clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

refactor: align repository layout with runtime roles

Dami committed 759e503
commit
759e503cce38f3816196824972f529bb862f5d95
parent
f56bded25c87ac3ae5aa3f226563367346657071
author
Dami <dami.etoile@gmail.com>
229 files changed, +1820 -356
Mapps/docs/scripts/check-docs.mjs2+-
Mapps/docs/scripts/check-rendered-examples.mjs2+-
Mapps/docs/src/components/DiagramExample/index.js2+-
Mapps/editor/PERSISTENCE.md2+-
Mapps/editor/src/client-svg.js2+-
Mapps/editor/test/svg-contract.test.js2+-
Rrenderers/edge/README.md → renderers/README.md31+-
Rrenderers/edge/scripts/smoke.mjs → renderers/catalog/scripts/smoke.mjs0
Rrenderers/edge/src/catalog.ts → renderers/catalog/src/catalog.ts4+-
Rrenderers/edge/src/index.ts → renderers/catalog/src/index.ts0
Rrenderers/edge/test/catalog.test.ts → renderers/catalog/test/catalog.test.ts2+-
Rrenderers/edge/test/gateway.test.ts → renderers/catalog/test/gateway.test.ts0
Rrenderers/edge/worker-configuration.d.ts → renderers/catalog/worker-configuration.d.ts0
Rrenderers/edge/wrangler.jsonc → renderers/catalog/wrangler.jsonc2+-
Rrenderers/edge/d2-wasm/d2-custom.wasm → renderers/edge/artifacts/d2/d2-custom.wasm0
Rrenderers/edge/d2-wasm/provenance.md → renderers/edge/artifacts/d2/provenance.md9+-
Rrenderers/edge/d2-wasm/wasm_exec.js → renderers/edge/artifacts/d2/wasm_exec.js0
Rrenderers/edge/src/vendor/dbml-backend.d.ts → renderers/edge/artifacts/dbml/dbml-backend.d.ts0
Rrenderers/edge/src/vendor/dbml-backend.js → renderers/edge/artifacts/dbml/dbml-backend.js0
Rrenderers/edge/src/vendor/dbml-provenance.md → renderers/edge/artifacts/dbml/dbml-provenance.md2+-
Rrenderers/edge/src/vendor/goat-wasm.d.ts → renderers/edge/artifacts/goat/goat-wasm.d.ts0
Rrenderers/edge/goat-wasm/goat.wasm → renderers/edge/artifacts/goat/goat.wasm0
Rrenderers/edge/goat-wasm/provenance.md → renderers/edge/artifacts/goat/provenance.md0
Rrenderers/edge/src/vendor/graphviz-backend.ts → renderers/edge/artifacts/graphviz/graphviz-backend.ts0
Rrenderers/edge/src/vendor/graphviz-errors.ts → renderers/edge/artifacts/graphviz/graphviz-errors.ts0
Rrenderers/edge/src/vendor/graphviz-wrapper.ts → renderers/edge/artifacts/graphviz/graphviz-wrapper.ts0
Rrenderers/edge/src/vendor/graphviz.wasm → renderers/edge/artifacts/graphviz/graphviz.wasm0
Rrenderers/edge/vendor-licenses/dbml-renderer-NOTICE → renderers/edge/artifacts/licenses/dbml-renderer-NOTICE0
Arenderers/edge/artifacts/licenses/npm-runtime-NOTICE.md1215++++++++++++++++++++++++++++++
Rrenderers/edge/vendor-licenses/plantuml-core-NOTICE → renderers/edge/artifacts/licenses/plantuml-core-NOTICE4+
Rrenderers/edge/vendor-licenses/viz-js-NOTICE → renderers/edge/artifacts/licenses/viz-js-NOTICE4+
Rrenderers/edge/src/vendor/pikchr-backend.js → renderers/edge/artifacts/pikchr/pikchr-backend.js0
Rrenderers/edge/src/vendor/pikchr-provenance.md → renderers/edge/artifacts/pikchr/pikchr-provenance.md0
Rrenderers/edge/src/vendor/pikchr.wasm → renderers/edge/artifacts/pikchr/pikchr.wasm0
Rrenderers/edge/src/vendor/plantuml-family/README.md → renderers/edge/artifacts/plantuml-family/README.md23+-
Rrenderers/edge/src/vendor/plantuml-family/plantuml-family.d.ts → renderers/edge/artifacts/plantuml-family/plantuml-family.d.ts0
Rrenderers/edge/src/vendor/plantuml-family/plantuml.js → renderers/edge/artifacts/plantuml-family/plantuml.js0
Rrenderers/edge/src/vendor/plantuml-family/viz-global.cjs → renderers/edge/artifacts/plantuml-family/viz-global.cjs0
Rrenderers/edge/src/vendor/plantuml-family/viz.wasm → renderers/edge/artifacts/plantuml-family/viz.wasm0
Rrenderers/edge/src/vendor/svgbob-LICENSE.txt → renderers/edge/artifacts/svgbob/svgbob-LICENSE.txt0
Rrenderers/edge/src/vendor/svgbob-provenance.md → renderers/edge/artifacts/svgbob/svgbob-provenance.md6+-
Rrenderers/edge/src/vendor/svgbob_wasm.d.ts → renderers/edge/artifacts/svgbob/svgbob_wasm.d.ts0
Rrenderers/edge/src/vendor/svgbob_wasm.js → renderers/edge/artifacts/svgbob/svgbob_wasm.js0
Rrenderers/edge/src/vendor/svgbob_wasm_bg.js → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.js0
Rrenderers/edge/src/vendor/svgbob_wasm_bg.wasm → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.wasm0
Rrenderers/edge/src/vendor/svgbob_wasm_bg.wasm.d.ts → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.wasm.d.ts0
Rrenderers/edge/wrangler.plantuml-family.local.jsonc → renderers/edge/config/local/plantuml-family.jsonc4+-
Rrenderers/edge/wrangler.units/bytefield.jsonc → renderers/edge/config/units/bytefield.jsonc4+-
Arenderers/edge/config/units/d2.jsonc1+
Rrenderers/edge/wrangler.units/goat.jsonc → renderers/edge/config/units/goat.jsonc4+-
Rrenderers/edge/wrangler.units/graphviz-family.jsonc → renderers/edge/config/units/graphviz-family.jsonc4+-
Rrenderers/edge/wrangler.units/nomnoml.jsonc → renderers/edge/config/units/nomnoml.jsonc4+-
Rrenderers/edge/wrangler.units/pikchr.jsonc → renderers/edge/config/units/pikchr.jsonc4+-
Rrenderers/edge/wrangler.plantuml-family.jsonc → renderers/edge/config/units/plantuml-family.jsonc4+-
Rrenderers/edge/wrangler.units/structurizr.jsonc → renderers/edge/config/units/structurizr.jsonc4+-
Rrenderers/edge/wrangler.units/svgbob.jsonc → renderers/edge/config/units/svgbob.jsonc4+-
Rrenderers/edge/wrangler.units/umlet.jsonc → renderers/edge/config/units/umlet.jsonc4+-
Rrenderers/edge/wrangler.units/vega-family.jsonc → renderers/edge/config/units/vega-family.jsonc4+-
Rrenderers/edge/wrangler.units/wavedrom.jsonc → renderers/edge/config/units/wavedrom.jsonc4+-
Mrenderers/edge/package.json22+-
Rrenderers/edge/scripts/build-d2-wasm.mjs → renderers/edge/scripts/build/d2.mjs14+-
Rrenderers/edge/scripts/build-dbml.mjs → renderers/edge/scripts/build/dbml.mjs12+-
Arenderers/edge/scripts/check-runtime-licenses.mjs109+++
Drenderers/edge/scripts/deploy-python-units.mjs17-
Drenderers/edge/scripts/deploy-worker-units.mjs50-
Arenderers/edge/scripts/deploy/worker-units.mjs120+++
Rrenderers/edge/scripts/plantuml-family-smoke.mjs → renderers/edge/scripts/smoke/plantuml-family.mjs0
Rrenderers/edge/src/adapters/edge/bytefield.ts → renderers/edge/src/adapters/bytefield.ts2+-
Rrenderers/edge/src/adapters/edge/c4-lowerer.ts → renderers/edge/src/adapters/c4-lowerer.ts2+-
Rrenderers/edge/src/adapters/edge/d2.ts → renderers/edge/src/adapters/d2.ts8+-
Rrenderers/edge/src/adapters/edge/dbml.ts → renderers/edge/src/adapters/dbml.ts6+-
Rrenderers/edge/src/adapters/edge/ditaa.ts → renderers/edge/src/adapters/ditaa.ts6+-
Drenderers/edge/src/adapters/edge.ts35-
Rrenderers/edge/src/adapters/edge/erd.ts → renderers/edge/src/adapters/erd.ts6+-
Rrenderers/edge/src/adapters/edge/goat.ts → renderers/edge/src/adapters/goat.ts8+-
Rrenderers/edge/src/adapters/edge/graphviz.ts → renderers/edge/src/adapters/graphviz.ts8+-
Arenderers/edge/src/adapters/index.ts35+
Rrenderers/edge/src/adapters/edge/nomnoml.ts → renderers/edge/src/adapters/nomnoml.ts2+-
Rrenderers/edge/src/adapters/edge/pikchr.ts → renderers/edge/src/adapters/pikchr.ts8+-
Rrenderers/edge/src/adapters/edge/plantuml-family.ts → renderers/edge/src/adapters/plantuml-family.ts10+-
Rrenderers/edge/src/adapters/edge/svgbob.ts → renderers/edge/src/adapters/svgbob.ts6+-
Rrenderers/edge/src/adapters/edge/types.ts → renderers/edge/src/adapters/types.ts4+-
Rrenderers/edge/src/adapters/edge/umlet.ts → renderers/edge/src/adapters/umlet.ts6+-
Rrenderers/edge/src/adapters/edge/vega-common.ts → renderers/edge/src/adapters/vega-common.ts0
Rrenderers/edge/src/adapters/edge/vega.ts → renderers/edge/src/adapters/vega.ts4+-
Rrenderers/edge/src/adapters/edge/vegalite.ts → renderers/edge/src/adapters/vegalite.ts4+-
Rrenderers/edge/src/adapters/edge/wavedrom.ts → renderers/edge/src/adapters/wavedrom.ts4+-
Rrenderers/edge/src/vendor.d.ts → renderers/edge/src/declarations/dependencies.d.ts0
Rrenderers/edge/src/raw.d.ts → renderers/edge/src/declarations/raw.d.ts0
Rrenderers/edge/src/erd.ts → renderers/edge/src/languages/erd.ts0
Rrenderers/edge/src/structurizr.ts → renderers/edge/src/languages/structurizr.ts2+-
Rrenderers/edge/src/umlet.ts → renderers/edge/src/languages/umlet.ts2+-
Rrenderers/edge/src/errors.ts → renderers/edge/src/runtime/errors.ts0
Rrenderers/edge/src/svg.ts → renderers/edge/src/runtime/svg.ts2+-
Rrenderers/edge/src/types.ts → renderers/edge/src/runtime/types.ts44+-
Rrenderers/edge/src/unit.ts → renderers/edge/src/runtime/unit.ts2+-
Rrenderers/edge/src/validation.ts → renderers/edge/src/runtime/validation.ts0
Mrenderers/edge/src/units/bytefield.ts4+-
Mrenderers/edge/src/units/d2.ts4+-
Mrenderers/edge/src/units/goat.ts4+-
Mrenderers/edge/src/units/graphviz-family.ts8+-
Mrenderers/edge/src/units/nomnoml.ts4+-
Mrenderers/edge/src/units/pikchr.ts4+-
Mrenderers/edge/src/units/plantuml-family.ts4+-
Mrenderers/edge/src/units/structurizr.ts6+-
Mrenderers/edge/src/units/svgbob.ts6+-
Mrenderers/edge/src/units/umlet.ts4+-
Mrenderers/edge/src/units/vega-family.ts2+-
Mrenderers/edge/src/units/vega.ts4+-
Mrenderers/edge/src/units/vegalite.ts4+-
Mrenderers/edge/src/units/wavedrom.ts4+-
Mrenderers/edge/test/adapters.test.ts4+-
Mrenderers/edge/test/c4-lowerer.test.ts2+-
Mrenderers/edge/test/d2.test.ts4+-
Mrenderers/edge/test/dbml.test.ts8+-
Mrenderers/edge/test/ditaa.test.ts4+-
Mrenderers/edge/test/erd.test.ts2+-
Mrenderers/edge/test/goat.test.ts4+-
Mrenderers/edge/test/graphviz-options.test.ts4+-
Mrenderers/edge/test/pikchr.test.ts4+-
Mrenderers/edge/test/structurizr.test.ts2+-
Mrenderers/edge/test/svg.test.ts2+-
Mrenderers/edge/test/svgbob.test.ts4+-
Mrenderers/edge/test/umlet.test.ts2+-
Mrenderers/edge/test/unit.test.ts4+-
Rrenderers/edge/d2-wasm/overlays/jsrunner/goja.go → renderers/edge/toolchains/d2/overlays/jsrunner/goja.go0
Rrenderers/edge/d2-wasm/overlays/jsrunner/js.go → renderers/edge/toolchains/d2/overlays/jsrunner/js.go0
Rrenderers/edge/d2-wasm/source/go.mod → renderers/edge/toolchains/d2/source/go.mod0
Rrenderers/edge/d2-wasm/source/go.sum → renderers/edge/toolchains/d2/source/go.sum0
Rrenderers/edge/d2-wasm/source/main.go → renderers/edge/toolchains/d2/source/main.go0
Rrenderers/edge/d2-wasm/source/worker.go → renderers/edge/toolchains/d2/source/worker.go0
Rrenderers/edge/src/vendor/dbml-entry.ts → renderers/edge/toolchains/dbml/entry.ts0
Rrenderers/edge/goat-wasm/README.md → renderers/edge/toolchains/goat/README.md4+-
Rrenderers/edge/goat-wasm/go.mod → renderers/edge/toolchains/goat/go.mod0
Rrenderers/edge/goat-wasm/go.sum → renderers/edge/toolchains/goat/go.sum0
Rrenderers/edge/goat-wasm/main.go → renderers/edge/toolchains/goat/main.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/.dir-locals.el → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/.dir-locals.el0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/.gitignore → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/.gitignore0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/CHANGELOG.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/CHANGELOG.md0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/LICENSE → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/LICENSE0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/README.md0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/README.md.tmpl0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/README.md0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/README.md.tmpl0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_drawable.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_line.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_line.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_roundedcorner.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_roundedcorner.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/ascii.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/ascii.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/clean.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/clean.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/git-add-generated-files.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/git-add-generated-files.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/internal/files.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/internal/files.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/internal/runstate.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/internal/runstate.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/local-markdown.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/local-markdown.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/markdown_to_html.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/markdown_to_html.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/pre-push.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/pre-push.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/proof-markdown.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/proof-markdown.sh0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/runeset.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/runeset.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/abstractcanvas.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/abstractcanvas.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/config.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/config.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/csshelp.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/csshelp.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/drawable.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/index.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/index.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/iter.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/iter.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/style.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/style.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/svg-text.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/svg-text.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/svg.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/svg.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/README.md0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/README.md.tmpl0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/joints.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/joints.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_drawable.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_line.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_line.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_svg.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_svg.go0
Rrenderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/utf8.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/utf8.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.gitattributes → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.gitattributes0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.gitignore → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.gitignore0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.golangci.yml → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.golangci.yml0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/LICENSE.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/LICENSE.md0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/README.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/README.md0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/binary.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/binary.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/binary_unix.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/binary_unix.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/buffer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/buffer.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/lexer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/lexer.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/reader.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/reader.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/streamlexer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/streamlexer.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/writer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/writer.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/common.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/common.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/README.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/README.md0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/hash.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/hash.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/lex.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/lex.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/parse.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/parse.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/util.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/util.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/error.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/error.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/input.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/input.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/position.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/position.go0
Rrenderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/util.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/util.go0
Rrenderers/edge/goat-wasm/vendor/modules.txt → renderers/edge/toolchains/goat/vendor/modules.txt0
Rrenderers/edge/svgbob-wasm/Cargo.lock → renderers/edge/toolchains/svgbob/Cargo.lock0
Rrenderers/edge/svgbob-wasm/Cargo.toml → renderers/edge/toolchains/svgbob/Cargo.toml0
Rrenderers/edge/svgbob-wasm/src/lib.rs → renderers/edge/toolchains/svgbob/src/lib.rs0
Mrenderers/edge/tsconfig.json11+-
Mrenderers/edge/vitest.config.ts2+-
Drenderers/edge/wrangler.units/d2.jsonc1-
Arenderers/scripts/deploy-python-units.mjs53+
Rrenderers/edge/scripts/smoke-units.mjs → renderers/scripts/smoke-units.mjs2+-
Arenderers/shared/engines.ts40+
Rworkers/api/README.md → services/api/README.md2+-
Rworkers/api/migrations/0001_aliases.sql → services/api/migrations/0001_aliases.sql0
Rworkers/api/package-lock.json → services/api/package-lock.json0
Rworkers/api/package.json → services/api/package.json2+-
Rworkers/api/src/crypto.ts → services/api/src/crypto.ts0
Rworkers/api/src/index.ts → services/api/src/index.ts2+-
Rworkers/api/src/model.ts → services/api/src/model.ts0
Rworkers/api/src/validation.ts → services/api/src/validation.ts0
Rworkers/api/test/aliases.test.ts → services/api/test/aliases.test.ts2+-
Rworkers/api/test/env.d.ts → services/api/test/env.d.ts0
Rworkers/api/tsconfig.json → services/api/tsconfig.json0
Rworkers/api/vitest.config.ts → services/api/vitest.config.ts0
Rworkers/api/worker-configuration.d.ts → services/api/worker-configuration.d.ts0
Rworkers/api/wrangler.jsonc → services/api/wrangler.jsonc0
Rworkers/shell/package-lock.json → services/shell/package-lock.json0
Rworkers/shell/package.json → services/shell/package.json8+-
Rworkers/shell/src/index.ts → services/shell/src/index.ts0
Rworkers/shell/test/index.test.ts → services/shell/test/index.test.ts0
Rworkers/shell/tsconfig.json → services/shell/tsconfig.json0
Rworkers/shell/vitest.config.ts → services/shell/vitest.config.ts0
Rworkers/shell/worker-configuration.d.ts → services/shell/worker-configuration.d.ts12+-
Rworkers/shell/wrangler.jsonc → services/shell/wrangler.jsonc0
Rpackages/svg/index.d.ts → shared/svg/index.d.ts0
Rpackages/svg/index.js → shared/svg/index.js0
M apps/docs/scripts/check-docs.mjs +1 -1
M apps/docs/scripts/check-rendered-examples.mjs +1 -1
M apps/docs/src/components/DiagramExample/index.js +1 -1
M apps/editor/PERSISTENCE.md +1 -1
M apps/editor/src/client-svg.js +1 -1
M apps/editor/test/svg-contract.test.js +1 -1
R renderers/edge/README.md → renderers/README.md +20 -11
@@ -1,6 +1,15 @@
1-# Edge renderers1+# Renderer plane22 3-This directory contains the Cloudflare renderer plane for diagram.zip.3+This directory contains the complete Cloudflare renderer plane for diagram.zip.4+5+| Path | Purpose |6+| --- | --- |7+| `catalog/` | Health and capability catalog service; it does not render diagrams |8+| `client/` | Renderer bundles executed in sandboxed browser frames |9+| `edge/` | JavaScript and WebAssembly renderer Workers |10+| `python/` | Python renderer and translation Workers |11+| `shared/` | Engine identities shared by the catalog and runtime units |12+| `scripts/` | Cross-runtime deployment and smoke-test orchestration |413 514 All 30 catalog engines have a final renderer path. No renderer uses the Fly.io application. No renderer can use an origin fallback.615
@@ -12,23 +21,23 @@ https://{engine}.render.diagram.zip
1221 1322 The hostname selects the engine. A render request does not contain an engine selector.1423 15-The Worker at `diagram.zip/render/v1/*` is a catalog service. It provides health and catalog routes. It does not provide a render proxy.24+The Worker in `catalog/` serves `diagram.zip/render/v1/*`. It provides health and catalog routes. It does not provide a render proxy.1625 1726 ## Validation1827 19-Run these commands from this directory:28+Run these commands from `renderers/`:2029 2130 ```sh22-npm install23-npm run cf-typegen24-npm run check25-npm test26-npm run deploy:dry31+npm --prefix edge install32+npm --prefix edge run generate:types33+npm --prefix edge run check34+npm --prefix edge test35+npm --prefix edge run deploy:dry-run2736 ```2837 29-Run `npm run smoke:units` after all units are deployed. This command checks one repository fixture or capability response for each catalog engine. It checks coverage and SVG structure. It does not compare pixels.38+Run `npm --prefix edge run smoke:renderers` after all units are deployed. This command checks one repository fixture or capability response for each catalog engine. It checks coverage and SVG structure. It does not compare pixels.3039 31-Run `npm run smoke` against a local catalog Worker. This command checks the health route, the 30-engine catalog, and the absence of the old render proxy.40+Run `npm --prefix edge run smoke:catalog` against a local catalog Worker. This command checks the health route, the 30-engine catalog, and the absence of the old render proxy.3241 3342 ## HTTP unit contract3443
R renderers/edge/scripts/smoke.mjs → renderers/catalog/scripts/smoke.mjs +0 -0

No content changes.

R renderers/edge/src/catalog.ts → renderers/catalog/src/catalog.ts +2 -2
R renderers/edge/src/index.ts → renderers/catalog/src/index.ts +0 -0

No content changes.

R renderers/edge/test/catalog.test.ts → renderers/catalog/test/catalog.test.ts +1 -1
R renderers/edge/test/gateway.test.ts → renderers/catalog/test/gateway.test.ts +0 -0

No content changes.

R renderers/edge/worker-configuration.d.ts → renderers/catalog/worker-configuration.d.ts +0 -0

No content changes.

R renderers/edge/wrangler.jsonc → renderers/catalog/wrangler.jsonc +1 -1
R renderers/edge/d2-wasm/d2-custom.wasm → renderers/edge/artifacts/d2/d2-custom.wasm +0 -0

No content changes.

R renderers/edge/d2-wasm/provenance.md → renderers/edge/artifacts/d2/provenance.md +5 -4
@@ -3,12 +3,13 @@
33 - Engine: D2 parser/compiler/SVG renderer `v0.7.1`44 - Artifact: `d2-custom.wasm`55 - SHA-256: `e27e0144f30e26b9891e086b6370c24755426d64934d61f8334002b2b4a3c663`6-- Build inputs: [`source/worker.go`](source/worker.go), [`source/main.go`](source/main.go), [`source/go.mod`](source/go.mod), [`source/go.sum`](source/go.sum), and the Worker-safe [`overlays/jsrunner`](overlays/jsrunner) source overlay.7-- Build command: `GOOS=js GOARCH=wasm go build -trimpath -buildvcs=false -ldflags='-s -w' -o ../d2-custom.wasm .`8-- Build toolchain: Go `go1.26.6`; use `npm run build:d2-wasm` from `renderers/edge`.6+- Build inputs: [`source/worker.go`](../../toolchains/d2/source/worker.go), [`source/main.go`](../../toolchains/d2/source/main.go), [`source/go.mod`](../../toolchains/d2/source/go.mod), [`source/go.sum`](../../toolchains/d2/source/go.sum), and the Worker-safe [`overlays/jsrunner`](../../toolchains/d2/overlays/jsrunner) source overlay.7+- Build command: `npm run build:d2` from `renderers/edge`.8+- Build toolchain: Go `go1.26.6`.99 - D2 dependency: peeled module `oss.terrastruct.com/d2@v0.7.1` (module is deprecated upstream in favor of `github.com/d2lang/d2`; the lockfile remains authoritative for this artifact).10+- Corresponding upstream source: https://github.com/terrastruct/d2/tree/v0.7.11011 - Layout: D2's bundled Dagre renderer with its default top-to-bottom flow. ELK is not included.1112 - JavaScript runtime: Dagre executes inside the pure-Go Goja runtime. The build stages the pinned D2 module in a temporary directory and replaces only its runtime-selection files; the upstream Wasm host-eval runner is excluded because Workers prohibit dynamic code generation.1213 - Host shim: Go standard `wasm_exec.js` from the build Go toolchain.1314 14-The D2 source and renderer are MPL-2.0. The generated artifact remains subject to the upstream D2 license and notices.15+The D2 source and renderer are MPL-2.0. The generated artifact remains subject to the upstream D2 license and notices. Recipients can obtain the covered upstream source from the exact link above; DiagramZip's Worker entry points, module lock, runtime overlay, and reproducible build command are retained under `renderers/edge/toolchains/d2/`.
R renderers/edge/d2-wasm/wasm_exec.js → renderers/edge/artifacts/d2/wasm_exec.js +0 -0

No content changes.

R renderers/edge/src/vendor/dbml-backend.d.ts → renderers/edge/artifacts/dbml/dbml-backend.d.ts +0 -0

No content changes.

R renderers/edge/src/vendor/dbml-backend.js → renderers/edge/artifacts/dbml/dbml-backend.js +0 -0

No content changes.

R renderers/edge/src/vendor/dbml-provenance.md → renderers/edge/artifacts/dbml/dbml-provenance.md +1 -1
R renderers/edge/src/vendor/goat-wasm.d.ts → renderers/edge/artifacts/goat/goat-wasm.d.ts +0 -0

No content changes.

R renderers/edge/goat-wasm/goat.wasm → renderers/edge/artifacts/goat/goat.wasm +0 -0

No content changes.

R renderers/edge/goat-wasm/provenance.md → renderers/edge/artifacts/goat/provenance.md +0 -0

No content changes.

R renderers/edge/src/vendor/graphviz-backend.ts → renderers/edge/artifacts/graphviz/graphviz-backend.ts +0 -0

No content changes.

R renderers/edge/src/vendor/graphviz-errors.ts → renderers/edge/artifacts/graphviz/graphviz-errors.ts +0 -0

No content changes.

R renderers/edge/src/vendor/graphviz-wrapper.ts → renderers/edge/artifacts/graphviz/graphviz-wrapper.ts +0 -0

No content changes.

R renderers/edge/src/vendor/graphviz.wasm → renderers/edge/artifacts/graphviz/graphviz.wasm +0 -0

No content changes.

R renderers/edge/vendor-licenses/dbml-renderer-NOTICE → renderers/edge/artifacts/licenses/dbml-renderer-NOTICE +0 -0

No content changes.

A renderers/edge/artifacts/licenses/npm-runtime-NOTICE.md +1215 -0
@@ -0,0 +1,1215 @@
1+# Edge Worker npm runtime notices2+3+Generated from Wrangler deploy metafiles for `config/units/*.jsonc`. Build, test,4+and deployment-tool dependencies that are absent from every emitted Worker bundle5+are intentionally excluded. WebAssembly and separately vendored artifacts are6+documented by their own notices and the repository-level component manifest.7+8+| Package | Version | License | Emitted Worker units |9+| --- | --- | --- | --- |10+| bit-field | 1.9.0 | MIT | wavedrom |11+| boolbase | 1.0.0 | ISC | plantuml-family |12+| bytefield-svg | 1.11.0 | EPL-2.0 | bytefield |13+| css-select | 5.2.2 | BSD-2-Clause | plantuml-family |14+| css-what | 6.2.2 | BSD-2-Clause | plantuml-family |15+| cssom | 0.5.0 | MIT | plantuml-family |16+| d3-array | 3.2.4 | ISC | vega-family |17+| d3-color | 3.1.0 | ISC | vega-family |18+| d3-delaunay | 6.0.4 | ISC | vega-family |19+| d3-dispatch | 3.0.1 | ISC | vega-family |20+| d3-dsv | 3.0.1 | ISC | vega-family |21+| d3-ease | 3.0.1 | BSD-3-Clause | vega-family |22+| d3-force | 3.0.0 | ISC | vega-family |23+| d3-format | 3.1.2 | ISC | vega-family |24+| d3-geo | 3.1.1 | ISC | vega-family |25+| d3-geo-projection | 4.0.0 | ISC | vega-family |26+| d3-hierarchy | 3.1.2 | ISC | vega-family |27+| d3-interpolate | 3.0.1 | ISC | vega-family |28+| d3-path | 3.1.0 | ISC | vega-family |29+| d3-quadtree | 3.0.1 | ISC | vega-family |30+| d3-scale | 4.0.2 | ISC | vega-family |31+| d3-scale-chromatic | 3.1.0 | ISC | vega-family |32+| d3-shape | 3.2.0 | ISC | vega-family |33+| d3-time | 3.1.0 | ISC | vega-family |34+| d3-time-format | 4.1.0 | ISC | vega-family |35+| d3-timer | 3.0.1 | ISC | vega-family |36+| delaunator | 5.1.0 | ISC | vega-family |37+| dom-serializer | 2.0.0 | MIT | plantuml-family |38+| domelementtype | 2.3.0 | BSD-2-Clause | plantuml-family |39+| domhandler | 5.0.3 | BSD-2-Clause | plantuml-family |40+| domutils | 3.2.2 | BSD-2-Clause | plantuml-family |41+| entities | 4.5.0 | BSD-2-Clause | plantuml-family |42+| graphre | 0.1.3 | MIT | nomnoml |43+| htmlparser2 | 10.1.0 | MIT | plantuml-family |44+| internmap | 2.0.3 | ISC | vega-family |45+| json5 | 2.2.3 | MIT | wavedrom |46+| linkedom | 0.18.12 | ISC | plantuml-family |47+| logidrom | 0.3.1 | MIT | wavedrom |48+| nomnoml | 1.7.0 | MIT | nomnoml |49+| nth-check | 2.1.1 | BSD-2-Clause | plantuml-family |50+| onml | 2.1.0 | MIT | wavedrom |51+| robust-predicates | 3.0.3 | Unlicense | vega-family |52+| sax | 1.6.1 | BlueOak-1.0.0 | wavedrom |53+| saxes | 6.0.0 | ISC | bytefield, d2, goat, graphviz-family, nomnoml, pikchr, plantuml-family, svgbob, umlet, vega-family, wavedrom |54+| topojson-client | 3.1.0 | ISC | vega-family |55+| tspan | 0.4.0 | MIT | wavedrom |56+| uhyphen | 0.2.0 | ISC | plantuml-family |57+| vega | 6.3.1 | BSD-3-Clause | vega-family |58+| vega-canvas | 2.0.0 | BSD-3-Clause | vega-family |59+| vega-crossfilter | 5.1.3 | BSD-3-Clause | vega-family |60+| vega-dataflow | 6.1.3 | BSD-3-Clause | vega-family |61+| vega-encode | 5.2.2 | BSD-3-Clause | vega-family |62+| vega-event-selector | 4.0.0 | BSD-3-Clause | vega-family |63+| vega-expression | 6.2.2 | BSD-3-Clause | vega-family |64+| vega-force | 5.1.3 | BSD-3-Clause | vega-family |65+| vega-format | 2.1.3 | BSD-3-Clause | vega-family |66+| vega-functions | 6.1.3 | BSD-3-Clause | vega-family |67+| vega-geo | 5.1.3 | BSD-3-Clause | vega-family |68+| vega-hierarchy | 5.1.3 | BSD-3-Clause | vega-family |69+| vega-interpreter | 2.3.2 | BSD-3-Clause | vega-family |70+| vega-label | 2.1.3 | BSD-3-Clause | vega-family |71+| vega-lite | 6.4.3 | BSD-3-Clause | vega-family |72+| vega-loader | 5.1.3 | BSD-3-Clause | vega-family |73+| vega-parser | 7.1.3 | BSD-3-Clause | vega-family |74+| vega-projection | 2.1.3 | BSD-3-Clause | vega-family |75+| vega-regression | 2.1.3 | BSD-3-Clause | vega-family |76+| vega-runtime | 7.1.3 | BSD-3-Clause | vega-family |77+| vega-scale | 8.1.3 | BSD-3-Clause | vega-family |78+| vega-scenegraph | 5.2.1 | BSD-3-Clause | vega-family |79+| vega-selections | 6.1.5 | BSD-3-Clause | vega-family |80+| vega-statistics | 2.0.0 | BSD-3-Clause | vega-family |81+| vega-time | 3.2.1 | BSD-3-Clause | vega-family |82+| vega-transforms | 5.2.2 | BSD-3-Clause | vega-family |83+| vega-util | 2.1.3 | BSD-3-Clause | vega-family |84+| vega-view | 6.1.2 | BSD-3-Clause | vega-family |85+| vega-view-transforms | 5.2.2 | BSD-3-Clause | vega-family |86+| vega-voronoi | 5.1.3 | BSD-3-Clause | vega-family |87+| vega-wordcloud | 5.1.3 | BSD-3-Clause | vega-family |88+| wavedrom | 3.6.2 | MIT | wavedrom |89+| xmlchars | 2.2.0 | MIT | bytefield, d2, goat, graphviz-family, nomnoml, pikchr, plantuml-family, svgbob, umlet, vega-family, wavedrom |90+91+## License and notice texts92+93+### bit-field@1.9.094+95+```text96+The MIT License (MIT)97+98+Copyright (c) 2015-2024 Aliaksei Chapyzhenka99+100+Permission is hereby granted, free of charge, to any person obtaining a copy101+of this software and associated documentation files (the "Software"), to deal102+in the Software without restriction, including without limitation the rights103+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell104+copies of the Software, and to permit persons to whom the Software is105+furnished to do so, subject to the following conditions:106+107+The above copyright notice and this permission notice shall be included in all108+copies or substantial portions of the Software.109+110+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR111+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,112+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE113+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER114+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,115+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE116+SOFTWARE.117+```118+119+### boolbase@1.0.0120+121+```text122+Copyright (c) Felix Boehm <me@feedic.com>123+124+Permission to use, copy, modify, and/or distribute this software for any125+purpose with or without fee is hereby granted, provided that the above126+copyright notice and this permission notice appear in all copies.127+128+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES129+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF130+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR131+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES132+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN133+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF134+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.135+```136+137+### bytefield-svg@1.11.0138+139+```text140+Eclipse Public License - v 2.0141+142+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE143+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION144+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.145+146+1. DEFINITIONS147+148+"Contribution" means:149+150+ a) in the case of the initial Contributor, the initial content151+ Distributed under this Agreement, and152+153+ b) in the case of each subsequent Contributor:154+ i) changes to the Program, and155+ ii) additions to the Program;156+ where such changes and/or additions to the Program originate from157+ and are Distributed by that particular Contributor. A Contribution158+ "originates" from a Contributor if it was added to the Program by159+ such Contributor itself or anyone acting on such Contributor's behalf.160+ Contributions do not include changes or additions to the Program that161+ are not Modified Works.162+163+"Contributor" means any person or entity that Distributes the Program.164+165+"Licensed Patents" mean patent claims licensable by a Contributor which166+are necessarily infringed by the use or sale of its Contribution alone167+or when combined with the Program.168+169+"Program" means the Contributions Distributed in accordance with this170+Agreement.171+172+"Recipient" means anyone who receives the Program under this Agreement173+or any Secondary License (as applicable), including Contributors.174+175+"Derivative Works" shall mean any work, whether in Source Code or other176+form, that is based on (or derived from) the Program and for which the177+editorial revisions, annotations, elaborations, or other modifications178+represent, as a whole, an original work of authorship.179+180+"Modified Works" shall mean any work in Source Code or other form that181+results from an addition to, deletion from, or modification of the182+contents of the Program, including, for purposes of clarity any new file183+in Source Code form that contains any contents of the Program. Modified184+Works shall not include works that contain only declarations,185+interfaces, types, classes, structures, or files of the Program solely186+in each case in order to link to, bind by name, or subclass the Program187+or Modified Works thereof.188+189+"Distribute" means the acts of a) distributing or b) making available190+in any manner that enables the transfer of a copy.191+192+"Source Code" means the form of a Program preferred for making193+modifications, including but not limited to software source code,194+documentation source, and configuration files.195+196+"Secondary License" means either the GNU General Public License,197+Version 2.0, or any later versions of that license, including any198+exceptions or additional permissions as identified by the initial199+Contributor.200+201+2. GRANT OF RIGHTS202+203+ a) Subject to the terms of this Agreement, each Contributor hereby204+ grants Recipient a non-exclusive, worldwide, royalty-free copyright205+ license to reproduce, prepare Derivative Works of, publicly display,206+ publicly perform, Distribute and sublicense the Contribution of such207+ Contributor, if any, and such Derivative Works.208+209+ b) Subject to the terms of this Agreement, each Contributor hereby210+ grants Recipient a non-exclusive, worldwide, royalty-free patent211+ license under Licensed Patents to make, use, sell, offer to sell,212+ import and otherwise transfer the Contribution of such Contributor,213+ if any, in Source Code or other form. This patent license shall214+ apply to the combination of the Contribution and the Program if, at215+ the time the Contribution is added by the Contributor, such addition216+ of the Contribution causes such combination to be covered by the217+ Licensed Patents. The patent license shall not apply to any other218+ combinations which include the Contribution. No hardware per se is219+ licensed hereunder.220+221+ c) Recipient understands that although each Contributor grants the222+ licenses to its Contributions set forth herein, no assurances are223+ provided by any Contributor that the Program does not infringe the224+ patent or other intellectual property rights of any other entity.225+ Each Contributor disclaims any liability to Recipient for claims226+ brought by any other entity based on infringement of intellectual227+ property rights or otherwise. As a condition to exercising the228+ rights and licenses granted hereunder, each Recipient hereby229+ assumes sole responsibility to secure any other intellectual230+ property rights needed, if any. For example, if a third party231+ patent license is required to allow Recipient to Distribute the232+ Program, it is Recipient's responsibility to acquire that license233+ before distributing the Program.234+235+ d) Each Contributor represents that to its knowledge it has236+ sufficient copyright rights in its Contribution, if any, to grant237+ the copyright license set forth in this Agreement.238+239+ e) Notwithstanding the terms of any Secondary License, no240+ Contributor makes additional grants to any Recipient (other than241+ those set forth in this Agreement) as a result of such Recipient's242+ receipt of the Program under the terms of a Secondary License243+ (if permitted under the terms of Section 3).244+245+3. REQUIREMENTS246+247+3.1 If a Contributor Distributes the Program in any form, then:248+249+ a) the Program must also be made available as Source Code, in250+ accordance with section 3.2, and the Contributor must accompany251+ the Program with a statement that the Source Code for the Program252+ is available under this Agreement, and informs Recipients how to253+ obtain it in a reasonable manner on or through a medium customarily254+ used for software exchange; and255+256+ b) the Contributor may Distribute the Program under a license257+ different than this Agreement, provided that such license:258+ i) effectively disclaims on behalf of all other Contributors all259+ warranties and conditions, express and implied, including260+ warranties or conditions of title and non-infringement, and261+ implied warranties or conditions of merchantability and fitness262+ for a particular purpose;263+264+ ii) effectively excludes on behalf of all other Contributors all265+ liability for damages, including direct, indirect, special,266+ incidental and consequential damages, such as lost profits;267+268+ iii) does not attempt to limit or alter the recipients' rights269+ in the Source Code under section 3.2; and270+271+ iv) requires any subsequent distribution of the Program by any272+ party to be under a license that satisfies the requirements273+ of this section 3.274+275+3.2 When the Program is Distributed as Source Code:276+277+ a) it must be made available under this Agreement, or if the278+ Program (i) is combined with other material in a separate file or279+ files made available under a Secondary License, and (ii) the initial280+ Contributor attached to the Source Code the notice described in281+ Exhibit A of this Agreement, then the Program may be made available282+ under the terms of such Secondary Licenses, and283+284+ b) a copy of this Agreement must be included with each copy of285+ the Program.286+287+3.3 Contributors may not remove or alter any copyright, patent,288+trademark, attribution notices, disclaimers of warranty, or limitations289+of liability ("notices") contained within the Program from any copy of290+the Program which they Distribute, provided that Contributors may add291+their own appropriate notices.292+293+4. COMMERCIAL DISTRIBUTION294+295+Commercial distributors of software may accept certain responsibilities296+with respect to end users, business partners and the like. While this297+license is intended to facilitate the commercial use of the Program,298+the Contributor who includes the Program in a commercial product299+offering should do so in a manner which does not create potential300+liability for other Contributors. Therefore, if a Contributor includes301+the Program in a commercial product offering, such Contributor302+("Commercial Contributor") hereby agrees to defend and indemnify every303+other Contributor ("Indemnified Contributor") against any losses,304+damages and costs (collectively "Losses") arising from claims, lawsuits305+and other legal actions brought by a third party against the Indemnified306+Contributor to the extent caused by the acts or omissions of such307+Commercial Contributor in connection with its distribution of the Program308+in a commercial product offering. The obligations in this section do not309+apply to any claims or Losses relating to any actual or alleged310+intellectual property infringement. In order to qualify, an Indemnified311+Contributor must: a) promptly notify the Commercial Contributor in312+writing of such claim, and b) allow the Commercial Contributor to control,313+and cooperate with the Commercial Contributor in, the defense and any314+related settlement negotiations. The Indemnified Contributor may315+participate in any such claim at its own expense.316+317+For example, a Contributor might include the Program in a commercial318+product offering, Product X. That Contributor is then a Commercial319+Contributor. If that Commercial Contributor then makes performance320+claims, or offers warranties related to Product X, those performance321+claims and warranties are such Commercial Contributor's responsibility322+alone. Under this section, the Commercial Contributor would have to323+defend claims against the other Contributors related to those performance324+claims and warranties, and if a court requires any other Contributor to325+pay any damages as a result, the Commercial Contributor must pay326+those damages.327+328+5. NO WARRANTY329+330+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT331+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"332+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR333+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF334+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR335+PURPOSE. Each Recipient is solely responsible for determining the336+appropriateness of using and distributing the Program and assumes all337+risks associated with its exercise of rights under this Agreement,338+including but not limited to the risks and costs of program errors,339+compliance with applicable laws, damage to or loss of data, programs340+or equipment, and unavailability or interruption of operations.341+342+6. DISCLAIMER OF LIABILITY343+344+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT345+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS346+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,347+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST348+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN349+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)350+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE351+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE352+POSSIBILITY OF SUCH DAMAGES.353+354+7. GENERAL355+356+If any provision of this Agreement is invalid or unenforceable under357+applicable law, it shall not affect the validity or enforceability of358+the remainder of the terms of this Agreement, and without further359+action by the parties hereto, such provision shall be reformed to the360+minimum extent necessary to make such provision valid and enforceable.361+362+If Recipient institutes patent litigation against any entity363+(including a cross-claim or counterclaim in a lawsuit) alleging that the364+Program itself (excluding combinations of the Program with other software365+or hardware) infringes such Recipient's patent(s), then such Recipient's366+rights granted under Section 2(b) shall terminate as of the date such367+litigation is filed.368+369+All Recipient's rights under this Agreement shall terminate if it370+fails to comply with any of the material terms or conditions of this371+Agreement and does not cure such failure in a reasonable period of372+time after becoming aware of such noncompliance. If all Recipient's373+rights under this Agreement terminate, Recipient agrees to cease use374+and distribution of the Program as soon as reasonably practicable.375+However, Recipient's obligations under this Agreement and any licenses376+granted by Recipient relating to the Program shall continue and survive.377+378+Everyone is permitted to copy and distribute copies of this Agreement,379+but in order to avoid inconsistency the Agreement is copyrighted and380+may only be modified in the following manner. The Agreement Steward381+reserves the right to publish new versions (including revisions) of382+this Agreement from time to time. No one other than the Agreement383+Steward has the right to modify this Agreement. The Eclipse Foundation384+is the initial Agreement Steward. The Eclipse Foundation may assign the385+responsibility to serve as the Agreement Steward to a suitable separate386+entity. Each new version of the Agreement will be given a distinguishing387+version number. The Program (including Contributions) may always be388+Distributed subject to the version of the Agreement under which it was389+received. In addition, after a new version of the Agreement is published,390+Contributor may elect to Distribute the Program (including its391+Contributions) under the new version.392+393+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient394+receives no rights or licenses to the intellectual property of any395+Contributor under this Agreement, whether expressly, by implication,396+estoppel or otherwise. All rights in the Program not expressly granted397+under this Agreement are reserved. Nothing in this Agreement is intended398+to be enforceable by any entity that is not a Contributor or Recipient.399+No third-party beneficiary rights are created under this Agreement.400+401+Exhibit A - Form of Secondary Licenses Notice402+403+"This Source Code may also be made available under the following 404+Secondary Licenses when the conditions for such availability set forth 405+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),406+version(s), and exceptions or additional permissions here}."407+408+ Simply including a copy of this Agreement, including this Exhibit A409+ is not sufficient to license the Source Code under Secondary Licenses.410+411+ If it is not possible or desirable to put the notice in a particular412+ file, then You may include the notice in a location (such as a LICENSE413+ file in a relevant directory) where a recipient would be likely to414+ look for such a notice.415+416+ You may add additional accurate notices of copyright ownership.417+```418+419+### css-select@5.2.2, css-what@6.2.2, domelementtype@2.3.0, domhandler@5.0.3, domutils@3.2.2, entities@4.5.0, nth-check@2.1.1420+421+```text422+Copyright (c) Felix Böhm423+All rights reserved.424+425+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:426+427+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.428+429+Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.430+431+THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,432+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.433+```434+435+### cssom@0.5.0436+437+```text438+Copyright (c) Nikita Vasilyev439+440+Permission is hereby granted, free of charge, to any person obtaining441+a copy of this software and associated documentation files (the442+"Software"), to deal in the Software without restriction, including443+without limitation the rights to use, copy, modify, merge, publish,444+distribute, sublicense, and/or sell copies of the Software, and to445+permit persons to whom the Software is furnished to do so, subject to446+the following conditions:447+448+The above copyright notice and this permission notice shall be449+included in all copies or substantial portions of the Software.450+451+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,452+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF453+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND454+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE455+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION456+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION457+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.458+```459+460+### d3-array@3.2.4461+462+```text463+Copyright 2010-2023 Mike Bostock464+465+Permission to use, copy, modify, and/or distribute this software for any purpose466+with or without fee is hereby granted, provided that the above copyright notice467+and this permission notice appear in all copies.468+469+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH470+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND471+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,472+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS473+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER474+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF475+THIS SOFTWARE.476+```477+478+### d3-color@3.1.0, d3-shape@3.2.0, d3-time@3.1.0479+480+```text481+Copyright 2010-2022 Mike Bostock482+483+Permission to use, copy, modify, and/or distribute this software for any purpose484+with or without fee is hereby granted, provided that the above copyright notice485+and this permission notice appear in all copies.486+487+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH488+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND489+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,490+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS491+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER492+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF493+THIS SOFTWARE.494+```495+496+### d3-delaunay@6.0.4497+498+```text499+Copyright 2018-2021 Observable, Inc.500+Copyright 2021 Mapbox501+502+Permission to use, copy, modify, and/or distribute this software for any purpose503+with or without fee is hereby granted, provided that the above copyright notice504+and this permission notice appear in all copies.505+506+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH507+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND508+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,509+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS510+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER511+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF512+THIS SOFTWARE.513+```514+515+### d3-dispatch@3.0.1, d3-force@3.0.0, d3-hierarchy@3.1.2, d3-interpolate@3.0.1, d3-quadtree@3.0.1, d3-scale@4.0.2, d3-time-format@4.1.0, d3-timer@3.0.1516+517+```text518+Copyright 2010-2021 Mike Bostock519+520+Permission to use, copy, modify, and/or distribute this software for any purpose521+with or without fee is hereby granted, provided that the above copyright notice522+and this permission notice appear in all copies.523+524+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH525+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND526+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,527+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS528+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER529+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF530+THIS SOFTWARE.531+```532+533+### d3-dsv@3.0.1534+535+```text536+Copyright 2013-2021 Mike Bostock537+538+Permission to use, copy, modify, and/or distribute this software for any purpose539+with or without fee is hereby granted, provided that the above copyright notice540+and this permission notice appear in all copies.541+542+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH543+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND544+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,545+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS546+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER547+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF548+THIS SOFTWARE.549+```550+551+### d3-ease@3.0.1552+553+```text554+Copyright 2010-2021 Mike Bostock555+Copyright 2001 Robert Penner556+All rights reserved.557+558+Redistribution and use in source and binary forms, with or without modification,559+are permitted provided that the following conditions are met:560+561+* Redistributions of source code must retain the above copyright notice, this562+ list of conditions and the following disclaimer.563+564+* Redistributions in binary form must reproduce the above copyright notice,565+ this list of conditions and the following disclaimer in the documentation566+ and/or other materials provided with the distribution.567+568+* Neither the name of the author nor the names of contributors may be used to569+ endorse or promote products derived from this software without specific prior570+ written permission.571+572+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND573+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED574+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE575+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR576+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES577+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;578+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON579+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT580+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS581+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.582+```583+584+### d3-format@3.1.2585+586+```text587+Copyright 2010-2026 Mike Bostock588+589+Permission to use, copy, modify, and/or distribute this software for any purpose590+with or without fee is hereby granted, provided that the above copyright notice591+and this permission notice appear in all copies.592+593+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH594+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND595+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,596+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS597+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER598+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF599+THIS SOFTWARE.600+```601+602+### d3-geo-projection@4.0.0603+604+```text605+Copyright 2013-2021 Mike Bostock606+607+Permission to use, copy, modify, and/or distribute this software for any purpose608+with or without fee is hereby granted, provided that the above copyright notice609+and this permission notice appear in all copies.610+611+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH612+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND613+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,614+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS615+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER616+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF617+THIS SOFTWARE.618+619+MIT License for https://github.com/scijs/integrate-adaptive-simpson620+621+The MIT License (MIT)622+623+Copyright 2015 Ricky Reusser624+625+Permission is hereby granted, free of charge, to any person obtaining a copy626+of this software and associated documentation files (the "Software"), to deal627+in the Software without restriction, including without limitation the rights628+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell629+copies of the Software, and to permit persons to whom the Software is630+furnished to do so, subject to the following conditions:631+632+The above copyright notice and this permission notice shall be included in633+all copies or substantial portions of the Software.634+635+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR636+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,637+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE638+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER639+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,640+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN641+THE SOFTWARE.642+```643+644+### d3-geo@3.1.1645+646+```text647+Copyright 2010-2024 Mike Bostock648+649+Permission to use, copy, modify, and/or distribute this software for any purpose650+with or without fee is hereby granted, provided that the above copyright notice651+and this permission notice appear in all copies.652+653+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH654+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND655+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,656+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS657+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER658+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF659+THIS SOFTWARE.660+661+This license applies to GeographicLib, versions 1.12 and later.662+663+Copyright 2008-2012 Charles Karney664+665+Permission is hereby granted, free of charge, to any person obtaining a copy of666+this software and associated documentation files (the "Software"), to deal in667+the Software without restriction, including without limitation the rights to668+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of669+the Software, and to permit persons to whom the Software is furnished to do so,670+subject to the following conditions:671+672+The above copyright notice and this permission notice shall be included in all673+copies or substantial portions of the Software.674+675+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR676+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS677+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR678+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER679+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN680+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.681+```682+683+### d3-path@3.1.0684+685+```text686+Copyright 2015-2022 Mike Bostock687+688+Permission to use, copy, modify, and/or distribute this software for any purpose689+with or without fee is hereby granted, provided that the above copyright notice690+and this permission notice appear in all copies.691+692+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH693+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND694+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,695+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS696+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER697+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF698+THIS SOFTWARE.699+```700+701+### d3-scale-chromatic@3.1.0702+703+```text704+Copyright 2010-2024 Mike Bostock705+706+Permission to use, copy, modify, and/or distribute this software for any purpose707+with or without fee is hereby granted, provided that the above copyright notice708+and this permission notice appear in all copies.709+710+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH711+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND712+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,713+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS714+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER715+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF716+THIS SOFTWARE.717+718+Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes719+720+Copyright 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University721+722+Licensed under the Apache License, Version 2.0 (the "License"); you may not use723+this file except in compliance with the License. You may obtain a copy of the724+License at725+726+http://www.apache.org/licenses/LICENSE-2.0727+728+Unless required by applicable law or agreed to in writing, software distributed729+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR730+CONDITIONS OF ANY KIND, either express or implied. See the License for the731+specific language governing permissions and limitations under the License.732+```733+734+### delaunator@5.1.0735+736+```text737+ISC License738+739+Copyright (c) 2026, Mapbox740+741+Permission to use, copy, modify, and/or distribute this software for any purpose742+with or without fee is hereby granted, provided that the above copyright notice743+and this permission notice appear in all copies.744+745+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH746+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND747+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,748+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS749+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER750+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF751+THIS SOFTWARE.752+```753+754+### dom-serializer@2.0.0755+756+```text757+License758+759+(The MIT License)760+761+Copyright (c) 2014 The cheeriojs contributors762+763+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:764+765+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.766+767+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.768+```769+770+### graphre@0.1.3771+772+```text773+Copyright (c) 2012-2014 Chris Pettitt774+775+Permission is hereby granted, free of charge, to any person obtaining a copy776+of this software and associated documentation files (the "Software"), to deal777+in the Software without restriction, including without limitation the rights778+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell779+copies of the Software, and to permit persons to whom the Software is780+furnished to do so, subject to the following conditions:781+782+The above copyright notice and this permission notice shall be included in783+all copies or substantial portions of the Software.784+785+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR786+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,787+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE788+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER789+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,790+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN791+THE SOFTWARE.792+```793+794+### htmlparser2@10.1.0795+796+```text797+Copyright 2010, 2011, Chris Winberry <chris@winberry.net>. All rights reserved.798+Permission is hereby granted, free of charge, to any person obtaining a copy799+of this software and associated documentation files (the "Software"), to800+deal in the Software without restriction, including without limitation the801+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or802+sell copies of the Software, and to permit persons to whom the Software is803+furnished to do so, subject to the following conditions:804+ 805+The above copyright notice and this permission notice shall be included in806+all copies or substantial portions of the Software.807+ 808+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR809+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,810+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE811+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER812+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING813+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS814+IN THE SOFTWARE.815+```816+817+### internmap@2.0.3818+819+```text820+Copyright 2021 Mike Bostock821+822+Permission to use, copy, modify, and/or distribute this software for any purpose823+with or without fee is hereby granted, provided that the above copyright notice824+and this permission notice appear in all copies.825+826+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH827+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND828+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,829+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS830+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER831+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF832+THIS SOFTWARE.833+```834+835+### json5@2.2.3836+837+```text838+MIT License839+840+Copyright (c) 2012-2018 Aseem Kishore, and [others].841+842+Permission is hereby granted, free of charge, to any person obtaining a copy843+of this software and associated documentation files (the "Software"), to deal844+in the Software without restriction, including without limitation the rights845+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell846+copies of the Software, and to permit persons to whom the Software is847+furnished to do so, subject to the following conditions:848+849+The above copyright notice and this permission notice shall be included in all850+copies or substantial portions of the Software.851+852+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR853+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,854+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE855+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER856+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,857+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE858+SOFTWARE.859+860+[others]: https://github.com/json5/json5/contributors861+```862+863+### linkedom@0.18.12864+865+```text866+ISC License867+868+Copyright (c) 2021, Andrea Giammarchi, @WebReflection869+870+Permission to use, copy, modify, and/or distribute this software for any871+purpose with or without fee is hereby granted, provided that the above872+copyright notice and this permission notice appear in all copies.873+874+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH875+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY876+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,877+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM878+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE879+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR880+PERFORMANCE OF THIS SOFTWARE.881+```882+883+### logidrom@0.3.1, onml@2.1.0884+885+```text886+The MIT License (MIT)887+888+Copyright (c) 2015-2021 Aliaksei Chapyzhenka889+890+Permission is hereby granted, free of charge, to any person obtaining a copy891+of this software and associated documentation files (the "Software"), to deal892+in the Software without restriction, including without limitation the rights893+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell894+copies of the Software, and to permit persons to whom the Software is895+furnished to do so, subject to the following conditions:896+897+The above copyright notice and this permission notice shall be included in all898+copies or substantial portions of the Software.899+900+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR901+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,902+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE903+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER904+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,905+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE906+SOFTWARE.907+```908+909+### nomnoml@1.7.0910+911+```text912+Copyright (c) 2020 Daniel Kallin913+914+Permission is hereby granted, free of charge, to any person obtaining a copy915+of this software and associated documentation files (the "Software"), to deal916+in the Software without restriction, including without limitation the rights917+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell918+copies of the Software, and to permit persons to whom the Software is919+furnished to do so, subject to the following conditions:920+921+The above copyright notice and this permission notice shall be included in922+all copies or substantial portions of the Software.923+924+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR925+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,926+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE927+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER928+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,929+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN930+THE SOFTWARE.931+```932+933+### robust-predicates@3.0.3934+935+```text936+This is free and unencumbered software released into the public domain.937+938+Anyone is free to copy, modify, publish, use, compile, sell, or939+distribute this software, either in source code form or as a compiled940+binary, for any purpose, commercial or non-commercial, and by any941+means.942+943+In jurisdictions that recognize copyright laws, the author or authors944+of this software dedicate any and all copyright interest in the945+software to the public domain. We make this dedication for the benefit946+of the public at large and to the detriment of our heirs and947+successors. We intend this dedication to be an overt act of948+relinquishment in perpetuity of all present and future rights to this949+software under copyright law.950+951+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,952+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF953+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.954+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR955+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,956+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR957+OTHER DEALINGS IN THE SOFTWARE.958+959+For more information, please refer to <http://unlicense.org>960+```961+962+### sax@1.6.1963+964+```text965+# Blue Oak Model License966+967+Version 1.0.0968+969+## Purpose970+971+This license gives everyone as much permission to work with972+this software as possible, while protecting contributors973+from liability.974+975+## Acceptance976+977+In order to receive this license, you must agree to its978+rules. The rules of this license are both obligations979+under that agreement and conditions to your license.980+You must not do anything with this software that triggers981+a rule that you cannot or will not follow.982+983+## Copyright984+985+Each contributor licenses you to do everything with this986+software that would otherwise infringe that contributor's987+copyright in it.988+989+## Notices990+991+You must ensure that everyone who gets a copy of992+any part of this software from you, with or without993+changes, also gets the text of this license or a link to994+<https://blueoakcouncil.org/license/1.0.0>.995+996+## Excuse997+998+If anyone notifies you in writing that you have not999+complied with [Notices](#notices), you can keep your1000+license by taking all practical steps to comply within 301001+days after the notice. If you do not do so, your license1002+ends immediately.1003+1004+## Patent1005+1006+Each contributor licenses you to do everything with this1007+software that would otherwise infringe any patent claims1008+they can license or become able to license.1009+1010+## Reliability1011+1012+No contributor can revoke this license.1013+1014+## No Liability1015+1016+***As far as the law allows, this software comes as is,1017+without any warranty or condition, and no contributor1018+will be liable to anyone for any damages related to this1019+software or this license, under any kind of legal claim.***1020+```1021+1022+### saxes@6.0.01023+1024+```text1025+Copyright (c) Louis-Dominique Dubeau <ldd@lddubeau.com>1026+1027+Permission to use, copy, modify, and/or distribute this software for any1028+purpose with or without fee is hereby granted, provided that the above1029+copyright notice and this permission notice appear in all copies.1030+1031+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES1032+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF1033+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR1034+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES1035+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN1036+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF1037+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.1038+```1039+1040+### topojson-client@3.1.01041+1042+```text1043+Copyright 2012-2019 Michael Bostock1044+1045+Permission to use, copy, modify, and/or distribute this software for any purpose1046+with or without fee is hereby granted, provided that the above copyright notice1047+and this permission notice appear in all copies.1048+1049+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH1050+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND1051+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,1052+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS1053+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER1054+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF1055+THIS SOFTWARE.1056+```1057+1058+### tspan@0.4.01059+1060+```text1061+The MIT License (MIT)1062+1063+Copyright (c) 2015-2020 Aliaksei Chapyzhenka1064+1065+Permission is hereby granted, free of charge, to any person obtaining a copy1066+of this software and associated documentation files (the "Software"), to deal1067+in the Software without restriction, including without limitation the rights1068+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell1069+copies of the Software, and to permit persons to whom the Software is1070+furnished to do so, subject to the following conditions:1071+1072+The above copyright notice and this permission notice shall be included in all1073+copies or substantial portions of the Software.1074+1075+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1076+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1077+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE1078+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER1079+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,1080+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE1081+SOFTWARE.1082+```1083+1084+### uhyphen@0.2.01085+1086+```text1087+ISC License1088+1089+Copyright (c) 2020, Andrea Giammarchi, @WebReflection1090+1091+Permission to use, copy, modify, and/or distribute this software for any1092+purpose with or without fee is hereby granted, provided that the above1093+copyright notice and this permission notice appear in all copies.1094+1095+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH1096+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY1097+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,1098+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM1099+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE1100+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR1101+PERFORMANCE OF THIS SOFTWARE.1102+```1103+1104+### vega-lite@6.4.31105+1106+```text1107+Copyright (c) 2015, University of Washington Interactive Data Lab.1108+All rights reserved.1109+1110+Redistribution and use in source and binary forms, with or without1111+modification, are permitted provided that the following conditions are met:1112+1113+1. Redistributions of source code must retain the above copyright notice, this1114+ list of conditions and the following disclaimer.1115+1116+2. Redistributions in binary form must reproduce the above copyright notice,1117+ this list of conditions and the following disclaimer in the documentation1118+ and/or other materials provided with the distribution.1119+1120+3. Neither the name of the copyright holder nor the names of its contributors1121+ may be used to endorse or promote products derived from this software1122+ without specific prior written permission.1123+1124+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"1125+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE1126+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE1127+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE1128+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL1129+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR1130+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER1131+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,1132+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE1133+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.1134+```1135+1136+### vega@6.3.1, vega-canvas@2.0.0, vega-crossfilter@5.1.3, vega-dataflow@6.1.3, vega-encode@5.2.2, vega-event-selector@4.0.0, vega-expression@6.2.2, vega-force@5.1.3, vega-format@2.1.3, vega-functions@6.1.3, vega-geo@5.1.3, vega-hierarchy@5.1.3, vega-interpreter@2.3.2, vega-label@2.1.3, vega-loader@5.1.3, vega-parser@7.1.3, vega-projection@2.1.3, vega-regression@2.1.3, vega-runtime@7.1.3, vega-scale@8.1.3, vega-scenegraph@5.2.1, vega-selections@6.1.5, vega-statistics@2.0.0, vega-time@3.2.1, vega-transforms@5.2.2, vega-util@2.1.3, vega-view@6.1.2, vega-view-transforms@5.2.2, vega-voronoi@5.1.3, vega-wordcloud@5.1.31137+1138+```text1139+Copyright (c) 2015-2023, University of Washington Interactive Data Lab1140+All rights reserved.1141+1142+Redistribution and use in source and binary forms, with or without1143+modification, are permitted provided that the following conditions are met:1144+1145+1. Redistributions of source code must retain the above copyright notice, this1146+ list of conditions and the following disclaimer.1147+1148+2. Redistributions in binary form must reproduce the above copyright notice,1149+ this list of conditions and the following disclaimer in the documentation1150+ and/or other materials provided with the distribution.1151+1152+3. Neither the name of the copyright holder nor the names of its contributors1153+ may be used to endorse or promote products derived from this software1154+ without specific prior written permission.1155+1156+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"1157+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE1158+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE1159+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE1160+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL1161+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR1162+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER1163+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,1164+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE1165+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.1166+```1167+1168+### wavedrom@3.6.21169+1170+```text1171+The MIT License (MIT)1172+1173+Copyright (c) 2011-2026 Aliaksei Chapyzhenka1174+1175+Permission is hereby granted, free of charge, to any person obtaining a copy1176+of this software and associated documentation files (the "Software"), to deal1177+in the Software without restriction, including without limitation the rights1178+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell1179+copies of the Software, and to permit persons to whom the Software is1180+furnished to do so, subject to the following conditions:1181+1182+The above copyright notice and this permission notice shall be included in1183+all copies or substantial portions of the Software.1184+1185+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1186+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1187+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE1188+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER1189+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,1190+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN1191+THE SOFTWARE.1192+```1193+1194+### xmlchars@2.2.01195+1196+```text1197+Copyright Louis-Dominique Dubeau and contributors to xmlchars1198+1199+Permission is hereby granted, free of charge, to any person obtaining a copy of1200+this software and associated documentation files (the "Software"), to deal in1201+the Software without restriction, including without limitation the rights to1202+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of1203+the Software, and to permit persons to whom the Software is furnished to do so,1204+subject to the following conditions:1205+1206+The above copyright notice and this permission notice shall be included in all1207+copies or substantial portions of the Software.1208+1209+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1210+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS1211+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR1212+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER1213+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN1214+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.1215+```
R renderers/edge/vendor-licenses/plantuml-core-NOTICE → renderers/edge/artifacts/licenses/plantuml-core-NOTICE +4 -0
R renderers/edge/vendor-licenses/viz-js-NOTICE → renderers/edge/artifacts/licenses/viz-js-NOTICE +4 -0
R renderers/edge/src/vendor/pikchr-backend.js → renderers/edge/artifacts/pikchr/pikchr-backend.js +0 -0

No content changes.

R renderers/edge/src/vendor/pikchr-provenance.md → renderers/edge/artifacts/pikchr/pikchr-provenance.md +0 -0

No content changes.

R renderers/edge/src/vendor/pikchr.wasm → renderers/edge/artifacts/pikchr/pikchr.wasm +0 -0

No content changes.

R renderers/edge/src/vendor/plantuml-family/README.md → renderers/edge/artifacts/plantuml-family/README.md +12 -11
@@ -6,11 +6,11 @@ Worker unit.
66 - `plantuml.js`: `@plantuml/core@1.2026.6`, SHA-25677 `87b8c74c1b9520ee659f4d2c8de16ae19c9f21365856a53d0766a8fa602b24d8`.88 Package integrity, upstream commit, and license are recorded in9- `vendor-licenses/plantuml-core-NOTICE`.9+ `../licenses/plantuml-core-NOTICE`.1010 - `viz-global.cjs`: the official package's `viz-global.js` in its native UMD11- CommonJS form, patched only to replace12- Emscripten's dynamic `WebAssembly.instantiate` with a precompiled module13- bridge and its Node-only `__filename` URL fallback with a fixed inert URL.11+ CommonJS form. It is patched only to replace Emscripten's dynamic12+ `WebAssembly.instantiate` with a precompiled module bridge. It also replaces13+ the Node-only `__filename` URL fallback with a fixed inert URL.1414 SHA-256 after those two Worker-boundary changes:1515 `f1aaf216e736c262e0ae4d7de12eb34bfe889d0d03f057129c55e168a85c9d44`.1616 - `viz.wasm`: the embedded Viz.js GraphViz module extracted from the official
@@ -18,15 +18,16 @@ Worker unit.
1818 `d744ded85304aea4a4b00343b275b4a1cab4785af8177d364beaa78bed6e8dd4`.1919 2020 The bundle proves sequence, class/component GraphViz, and lowered C4 context21-rendering in real workerd when a small DOM adapter is present and the Viz22-module is provided as Wrangler's precompiled Wasm import. The C4 adapter23-lowers the bounded macro surface to ordinary PlantUML primitives and rejects24-unsupported macros explicitly.21+rendering in real workerd. A small DOM adapter is present, and Wrangler22+provides the Viz module as a precompiled Wasm import. The C4 adapter lowers the23+bounded macro surface to ordinary PlantUML primitives and rejects unsupported24+macros explicitly.2525 26-Use `wrangler.plantuml-family.local.jsonc` for local multi-host workerd tests.26+Use `../../config/local/plantuml-family.jsonc` for local multi-host workerd27+tests.2728 Wrangler's local route emulation rewrites requests to the first configured28-custom domain when the production config is used, which would otherwise make29-the C4 hostname exercise the PlantUML descriptor.29+custom domain when the production config is used. Without the local config,30+the C4 hostname would exercise the PlantUML descriptor.3031 3132 The patched Viz bridge receives a `WebAssembly.Module` through3233 `globalThis.__DIAGRAMZIP_PLANTUML_VIZ_MODULE`; it must never compile bytes at
R renderers/edge/src/vendor/plantuml-family/plantuml-family.d.ts → renderers/edge/artifacts/plantuml-family/plantuml-family.d.ts +0 -0

No content changes.

R renderers/edge/src/vendor/plantuml-family/plantuml.js → renderers/edge/artifacts/plantuml-family/plantuml.js +0 -0

No content changes.

R renderers/edge/src/vendor/plantuml-family/viz-global.cjs → renderers/edge/artifacts/plantuml-family/viz-global.cjs +0 -0

No content changes.

R renderers/edge/src/vendor/plantuml-family/viz.wasm → renderers/edge/artifacts/plantuml-family/viz.wasm +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob-LICENSE.txt → renderers/edge/artifacts/svgbob/svgbob-LICENSE.txt +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob-provenance.md → renderers/edge/artifacts/svgbob/svgbob-provenance.md +3 -3
R renderers/edge/src/vendor/svgbob_wasm.d.ts → renderers/edge/artifacts/svgbob/svgbob_wasm.d.ts +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob_wasm.js → renderers/edge/artifacts/svgbob/svgbob_wasm.js +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob_wasm_bg.js → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.js +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob_wasm_bg.wasm → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.wasm +0 -0

No content changes.

R renderers/edge/src/vendor/svgbob_wasm_bg.wasm.d.ts → renderers/edge/artifacts/svgbob/svgbob_wasm_bg.wasm.d.ts +0 -0

No content changes.

R renderers/edge/wrangler.plantuml-family.local.jsonc → renderers/edge/config/local/plantuml-family.jsonc +2 -2
R renderers/edge/wrangler.units/bytefield.jsonc → renderers/edge/config/units/bytefield.jsonc +2 -2
A renderers/edge/config/units/d2.jsonc +1 -0
R renderers/edge/wrangler.units/goat.jsonc → renderers/edge/config/units/goat.jsonc +2 -2
R renderers/edge/wrangler.units/graphviz-family.jsonc → renderers/edge/config/units/graphviz-family.jsonc +2 -2
R renderers/edge/wrangler.units/nomnoml.jsonc → renderers/edge/config/units/nomnoml.jsonc +2 -2
R renderers/edge/wrangler.units/pikchr.jsonc → renderers/edge/config/units/pikchr.jsonc +2 -2
R renderers/edge/wrangler.plantuml-family.jsonc → renderers/edge/config/units/plantuml-family.jsonc +2 -2
R renderers/edge/wrangler.units/structurizr.jsonc → renderers/edge/config/units/structurizr.jsonc +2 -2
R renderers/edge/wrangler.units/svgbob.jsonc → renderers/edge/config/units/svgbob.jsonc +2 -2
R renderers/edge/wrangler.units/umlet.jsonc → renderers/edge/config/units/umlet.jsonc +2 -2
R renderers/edge/wrangler.units/vega-family.jsonc → renderers/edge/config/units/vega-family.jsonc +2 -2
R renderers/edge/wrangler.units/wavedrom.jsonc → renderers/edge/config/units/wavedrom.jsonc +2 -2
M renderers/edge/package.json +12 -10
R renderers/edge/scripts/build-d2-wasm.mjs → renderers/edge/scripts/build/d2.mjs +7 -7
@@ -2,11 +2,11 @@ import { execFileSync } from 'node:child_process'
22 import { chmodSync, copyFileSync, cpSync, mkdirSync, renameSync, rmSync } from 'node:fs'33 import { relative, resolve } from 'node:path'44 5-const root = resolve(import.meta.dirname, '..')6-const source = resolve(root, 'd2-wasm/source')7-const jsrunnerOverlay = resolve(root, 'd2-wasm/overlays/jsrunner')8-const output = resolve(root, 'd2-wasm/d2-custom.wasm')9-const temporary = resolve(root, 'd2-wasm/.d2-custom.wasm.tmp')5+const root = resolve(import.meta.dirname, '../..')6+const source = resolve(root, 'toolchains/d2/source')7+const jsrunnerOverlay = resolve(root, 'toolchains/d2/overlays/jsrunner')8+const output = resolve(root, 'artifacts/d2/d2-custom.wasm')9+const temporary = resolve(root, 'artifacts/d2/.d2-custom.wasm.tmp')1010 1111 const goVersion = execFileSync('go', ['version'], { encoding: 'utf8' }).trim()1212 if (!goVersion.includes('go1.26.6')) {
@@ -17,7 +17,7 @@ const d2Module = execFileSync('go', ['list', '-m', '-f', '{{.Dir}}', 'oss.terras
1717 cwd: source,1818 encoding: 'utf8',1919 }).trim()20-const staging = resolve(root, 'd2-wasm/.d2-build')20+const staging = resolve(root, 'toolchains/d2/.d2-build')2121 const stagedModule = resolve(staging, 'd2')2222 const stagedModfile = resolve(staging, 'worker.mod')2323 rmSync(staging, { force: true, recursive: true })
@@ -44,5 +44,5 @@ try {
4444 }4545 4646 const goroot = execFileSync('go', ['env', 'GOROOT'], { encoding: 'utf8' }).trim()47-copyFileSync(resolve(goroot, 'lib/wasm/wasm_exec.js'), resolve(root, 'd2-wasm/wasm_exec.js'))47+copyFileSync(resolve(goroot, 'lib/wasm/wasm_exec.js'), resolve(root, 'artifacts/d2/wasm_exec.js'))4848 console.log(execFileSync('shasum', ['-a', '256', output], { encoding: 'utf8' }).trim())
R renderers/edge/scripts/build-dbml.mjs → renderers/edge/scripts/build/dbml.mjs +6 -6
@@ -1,7 +1,7 @@
11 import { readdir, readFile } from 'node:fs/promises'22 import { build } from 'esbuild'33 4-const rendererPath = new URL('../node_modules/@softwaretechnik/dbml-renderer/lib/renderer.js', import.meta.url)4+const rendererPath = new URL('../../node_modules/@softwaretechnik/dbml-renderer/lib/renderer.js', import.meta.url)55 const upstreamRenderer = await readFile(rendererPath, 'utf8')66 const rendererPattern = /const render = \(input, format\) => \{[\s\S]*?\n\};/77 if (!rendererPattern.test(upstreamRenderer)) {
@@ -11,7 +11,7 @@ const dotOnlyRenderer = upstreamRenderer.replace(rendererPattern, `const render
1111 if (format !== "dot") throw new Error("The edge DBML bundle only supports DOT lowering.");1212 return dot(input);1313 };`)14-const parserPath = new URL('../node_modules/@softwaretechnik/dbml-renderer/lib/parser.js', import.meta.url)14+const parserPath = new URL('../../node_modules/@softwaretechnik/dbml-renderer/lib/parser.js', import.meta.url)1515 const upstreamParser = await readFile(parserPath, 'utf8')1616 if (!upstreamParser.includes('console.debug(peggyErr);')) {1717 throw new Error('DBML parser layout changed; review the debug suppression before rebuilding.')
@@ -19,12 +19,12 @@ if (!upstreamParser.includes('console.debug(peggyErr);')) {
1919 const quietParser = upstreamParser.replace(' console.debug(peggyErr);\n', '')2020 2121 await build({22- entryPoints: ['src/vendor/dbml-entry.ts'],22+ entryPoints: [new URL('../../toolchains/dbml/entry.ts', import.meta.url).pathname],2323 bundle: true,2424 format: 'esm',2525 platform: 'node',2626 minify: true,27- outfile: 'src/vendor/dbml-backend.js',27+ outfile: new URL('../../artifacts/dbml/dbml-backend.js', import.meta.url).pathname,2828 plugins: [{2929 name: 'dbml-dot-only',3030 setup(plugin) {
@@ -40,8 +40,8 @@ await build({
4040 }],4141 })4242 43-const { dbmlToDot } = await import(new URL(`../src/vendor/dbml-backend.js?build=${Date.now()}`, import.meta.url))44-const examplesPath = new URL('../node_modules/@softwaretechnik/dbml-renderer/examples/', import.meta.url)43+const { dbmlToDot } = await import(new URL(`../../artifacts/dbml/dbml-backend.js?build=${Date.now()}`, import.meta.url))44+const examplesPath = new URL('../../node_modules/@softwaretechnik/dbml-renderer/examples/', import.meta.url)4545 const examples = (await readdir(examplesPath)).filter(filename => filename.endsWith('.dbml')).sort()4646 if (examples.length < 20) throw new Error('DBML upstream example corpus is incomplete.')4747 for (const filename of examples) {
A renderers/edge/scripts/check-runtime-licenses.mjs +109 -0
@@ -0,0 +1,109 @@
1+import { createHash } from 'node:crypto'2+import { execFileSync } from 'node:child_process'3+import { mkdtemp, mkdir, readFile, readdir, rm, writeFile } from 'node:fs/promises'4+import { tmpdir } from 'node:os'5+import { basename, join } from 'node:path'6+import { fileURLToPath } from 'node:url'7+8+const root = fileURLToPath(new URL('../', import.meta.url))9+const configs = fileURLToPath(new URL('../config/units/', import.meta.url))10+const output = fileURLToPath(new URL('../artifacts/licenses/npm-runtime-NOTICE.md', import.meta.url))11+const lock = JSON.parse(await readFile(join(root, 'package-lock.json'), 'utf8'))12+const wrangler = join(root, 'node_modules/.bin/wrangler')13+const write = process.argv.includes('--write')14+15+const iscFallbacks = new Map([16+ ['boolbase', 'Copyright (c) Felix Boehm <me@feedic.com>'],17+ ['saxes', 'Copyright (c) Louis-Dominique Dubeau <ldd@lddubeau.com>'],18+])19+20+function iscText(copyright) {21+ return `${copyright}\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.`22+}23+24+function packageName(input) {25+ return input.match(/node_modules\/(?:@[^/]+\/[^/]+|[^/]+)/)?.[0].slice('node_modules/'.length)26+}27+28+async function legalText(name) {29+ const directory = join(root, 'node_modules', name)30+ const files = (await readdir(directory))31+ .filter(file => /^(?:licen[cs]e|copying|notice)(?:\.|$)/i.test(file))32+ .sort((left, right) => left.localeCompare(right))33+ if (files.length) {34+ const sections = []35+ for (const file of files) sections.push((await readFile(join(directory, file), 'utf8')).trim())36+ return sections.join('\n\n')37+ }38+ const copyright = iscFallbacks.get(name)39+ if (copyright) return iscText(copyright)40+ throw new Error(`Runtime package ${name} does not publish a license or notice file.`)41+}42+43+const temporary = await mkdtemp(join(tmpdir(), 'diagramzip-runtime-licenses-'))44+const units = new Map()45+try {46+ for (const config of (await readdir(configs)).filter(file => file.endsWith('.jsonc')).sort()) {47+ const unit = basename(config, '.jsonc')48+ const directory = join(temporary, unit)49+ await mkdir(directory)50+ execFileSync(wrangler, [51+ 'deploy', '--dry-run', '--config', join(configs, config),52+ '--outdir', directory, '--metafile',53+ ], { cwd: root, stdio: 'pipe' })54+ const meta = JSON.parse(await readFile(join(directory, 'bundle-meta.json'), 'utf8'))55+ const packages = new Set(Object.keys(meta.inputs).map(packageName).filter(Boolean))56+ units.set(unit, [...packages].sort())57+ }58+} finally {59+ await rm(temporary, { recursive: true, force: true })60+}61+62+const usedBy = new Map()63+for (const [unit, packages] of units) {64+ for (const name of packages) {65+ const consumers = usedBy.get(name) ?? []66+ consumers.push(unit)67+ usedBy.set(name, consumers)68+ }69+}70+71+const packages = []72+for (const name of [...usedBy.keys()].sort()) {73+ const metadata = lock.packages[`node_modules/${name}`]74+ if (!metadata?.version || !metadata.license) throw new Error(`Runtime package ${name} lacks locked version or license metadata.`)75+ packages.push({ name, version: metadata.version, license: metadata.license, units: usedBy.get(name), text: await legalText(name) })76+}77+78+const groups = new Map()79+for (const dependency of packages) {80+ const digest = createHash('sha256').update(dependency.text).digest('hex')81+ const group = groups.get(digest) ?? { text: dependency.text, packages: [] }82+ group.packages.push(`${dependency.name}@${dependency.version}`)83+ groups.set(digest, group)84+}85+86+const lines = [87+ '# Edge Worker npm runtime notices',88+ '',89+ 'Generated from Wrangler deploy metafiles for `config/units/*.jsonc`. Build, test,',90+ 'and deployment-tool dependencies that are absent from every emitted Worker bundle',91+ 'are intentionally excluded. WebAssembly and separately vendored artifacts are',92+ 'documented by their own notices and the repository-level component manifest.',93+ '',94+ '| Package | Version | License | Emitted Worker units |',95+ '| --- | --- | --- | --- |',96+]97+for (const dependency of packages) lines.push(`| ${dependency.name} | ${dependency.version} | ${dependency.license} | ${dependency.units.join(', ')} |`)98+lines.push('', '## License and notice texts', '')99+for (const group of [...groups.values()].sort((left, right) => left.packages[0].localeCompare(right.packages[0]))) {100+ lines.push(`### ${group.packages.join(', ')}`, '', '```text', group.text, '```', '')101+}102+const generated = `${lines.join('\n').trim()}\n`103+104+if (write) {105+ await writeFile(output, generated)106+} else {107+ const current = await readFile(output, 'utf8').catch(() => '')108+ if (current !== generated) throw new Error('Runtime license notice is stale. Run npm run generate:licenses.')109+}
D renderers/edge/scripts/deploy-python-units.mjs +0 -17
D renderers/edge/scripts/deploy-worker-units.mjs +0 -50
@@ -1,50 +0,0 @@
1-import { spawn } from 'node:child_process'2-import { resolve } from 'node:path'3-4-const configs = [5- 'wrangler.units/bytefield.jsonc',6- 'wrangler.units/nomnoml.jsonc',7- 'wrangler.units/vega-family.jsonc',8- 'wrangler.units/wavedrom.jsonc',9- 'wrangler.units/graphviz-family.jsonc',10- 'wrangler.units/pikchr.jsonc',11- 'wrangler.units/svgbob.jsonc',12- 'wrangler.units/goat.jsonc',13- 'wrangler.units/structurizr.jsonc',14- 'wrangler.plantuml-family.jsonc',15- 'wrangler.units/d2.jsonc',16- 'wrangler.units/umlet.jsonc',17-]18-const wrangler = resolve(import.meta.dirname, '../node_modules/.bin/wrangler')19-const pending = [...configs]20-const failures = []21-22-async function deploy(config) {23- await new Promise((resolvePromise, reject) => {24- const child = spawn(wrangler, ['deploy', '--config', config], {25- cwd: resolve(import.meta.dirname, '..'),26- stdio: 'inherit',27- })28- child.on('error', reject)29- child.on('exit', code => code === 0 ? resolvePromise() : reject(new Error(`${config} deployment exited ${code}`)))30- })31-}32-33-async function worker() {34- while (pending.length > 0) {35- const config = pending.shift()36- try {37- await deploy(config)38- } catch (error) {39- failures.push(error instanceof Error ? error.message : String(error))40- }41- }42-}43-44-await Promise.all(Array.from({ length: 4 }, worker))45-if (failures.length > 0) {46- for (const failure of failures) console.error(failure)47- process.exitCode = 148-} else {49- console.log(`${configs.length}/${configs.length} Worker renderer units deployed`)50-}
A renderers/edge/scripts/deploy/worker-units.mjs +120 -0
@@ -0,0 +1,120 @@
1+import { spawn } from 'node:child_process'2+import { readFile, readdir } from 'node:fs/promises'3+import { join, resolve } from 'node:path'4+5+const root = resolve(import.meta.dirname, '../..')6+const configDirectory = join(root, 'config/units')7+const wrangler = join(root, 'node_modules/.bin/wrangler')8+const message = process.env.DIAGRAMZIP_RELEASE_MESSAGE9+10+function parseJsonc(source) {11+ let stripped = ''12+ let string = false13+ let escaped = false14+ for (let index = 0; index < source.length; index += 1) {15+ const character = source[index]16+ const next = source[index + 1]17+ if (string) {18+ stripped += character19+ if (escaped) escaped = false20+ else if (character === '\\') escaped = true21+ else if (character === '"') string = false22+ } else if (character === '"') {23+ string = true24+ stripped += character25+ } else if (character === '/' && next === '/') {26+ while (index < source.length && source[index] !== '\n') index += 127+ stripped += '\n'28+ } else if (character === '/' && next === '*') {29+ index += 230+ while (index < source.length && !(source[index] === '*' && source[index + 1] === '/')) index += 131+ index += 132+ } else {33+ stripped += character34+ }35+ }36+ let normalized = ''37+ string = false38+ escaped = false39+ for (let index = 0; index < stripped.length; index += 1) {40+ const character = stripped[index]41+ if (string) {42+ normalized += character43+ if (escaped) escaped = false44+ else if (character === '\\') escaped = true45+ else if (character === '"') string = false46+ } else if (character === '"') {47+ string = true48+ normalized += character49+ } else if (character === ',') {50+ let next = index + 151+ while (/\s/.test(stripped[next] ?? '')) next += 152+ if (stripped[next] !== '}' && stripped[next] !== ']') normalized += character53+ } else {54+ normalized += character55+ }56+ }57+ return JSON.parse(normalized)58+}59+60+const configs = []61+for (const filename of (await readdir(configDirectory)).filter(name => name.endsWith('.jsonc')).sort()) {62+ const path = join(configDirectory, filename)63+ const config = parseJsonc(await readFile(path, 'utf8'))64+ if (!config.name) throw new Error(`${filename} does not declare a Worker name.`)65+ configs.push({66+ filename,67+ path,68+ name: config.name,69+ dependencies: (config.services ?? []).map(service => service.service),70+ })71+}72+73+const names = new Set(configs.map(config => config.name))74+if (names.size !== configs.length) throw new Error('Edge Worker configuration names must be unique.')75+76+async function deploy(config) {77+ await new Promise((resolvePromise, reject) => {78+ const args = ['deploy', '--strict', '--config', config.path]79+ if (message) args.push('--message', message)80+ const child = spawn(wrangler, args, {81+ cwd: root,82+ stdio: 'inherit',83+ })84+ child.on('error', reject)85+ child.on('exit', code => code === 0 ? resolvePromise() : reject(new Error(`${config.filename} deployment exited ${code}`)))86+ })87+}88+89+async function deployBatch(configs) {90+ const pending = [...configs]91+ const failures = []92+ async function worker() {93+ while (pending.length > 0) {94+ const config = pending.shift()95+ try {96+ await deploy(config)97+ } catch (error) {98+ failures.push(error instanceof Error ? error.message : String(error))99+ }100+ }101+ }102+ await Promise.all(Array.from({ length: Math.min(4, configs.length) }, worker))103+ if (failures.length > 0) throw new Error(failures.join('\n'))104+}105+106+const remaining = new Map(configs.map(config => [config.name, config]))107+let deployed = 0108+while (remaining.size > 0) {109+ const ready = [...remaining.values()].filter(config =>110+ config.dependencies.every(dependency => !names.has(dependency) || !remaining.has(dependency)),111+ )112+ if (ready.length === 0) {113+ throw new Error(`Cyclic Worker service dependencies: ${[...remaining.keys()].join(', ')}`)114+ }115+ await deployBatch(ready)116+ for (const config of ready) remaining.delete(config.name)117+ deployed += ready.length118+}119+120+console.log(`${deployed}/${configs.length} Worker renderer units deployed`)
R renderers/edge/scripts/plantuml-family-smoke.mjs → renderers/edge/scripts/smoke/plantuml-family.mjs +0 -0

No content changes.

R renderers/edge/src/adapters/edge/bytefield.ts → renderers/edge/src/adapters/bytefield.ts +1 -1
R renderers/edge/src/adapters/edge/c4-lowerer.ts → renderers/edge/src/adapters/c4-lowerer.ts +1 -1
R renderers/edge/src/adapters/edge/d2.ts → renderers/edge/src/adapters/d2.ts +4 -4
R renderers/edge/src/adapters/edge/dbml.ts → renderers/edge/src/adapters/dbml.ts +3 -3
R renderers/edge/src/adapters/edge/ditaa.ts → renderers/edge/src/adapters/ditaa.ts +3 -3
D renderers/edge/src/adapters/edge.ts +0 -35
R renderers/edge/src/adapters/edge/erd.ts → renderers/edge/src/adapters/erd.ts +3 -3
R renderers/edge/src/adapters/edge/goat.ts → renderers/edge/src/adapters/goat.ts +4 -4
R renderers/edge/src/adapters/edge/graphviz.ts → renderers/edge/src/adapters/graphviz.ts +4 -4
A renderers/edge/src/adapters/index.ts +35 -0
R renderers/edge/src/adapters/edge/nomnoml.ts → renderers/edge/src/adapters/nomnoml.ts +1 -1
R renderers/edge/src/adapters/edge/pikchr.ts → renderers/edge/src/adapters/pikchr.ts +4 -4
R renderers/edge/src/adapters/edge/plantuml-family.ts → renderers/edge/src/adapters/plantuml-family.ts +5 -5
R renderers/edge/src/adapters/edge/svgbob.ts → renderers/edge/src/adapters/svgbob.ts +3 -3
R renderers/edge/src/adapters/edge/types.ts → renderers/edge/src/adapters/types.ts +2 -2
R renderers/edge/src/adapters/edge/umlet.ts → renderers/edge/src/adapters/umlet.ts +3 -3
R renderers/edge/src/adapters/edge/vega-common.ts → renderers/edge/src/adapters/vega-common.ts +0 -0

No content changes.

R renderers/edge/src/adapters/edge/vega.ts → renderers/edge/src/adapters/vega.ts +2 -2
R renderers/edge/src/adapters/edge/vegalite.ts → renderers/edge/src/adapters/vegalite.ts +2 -2
R renderers/edge/src/adapters/edge/wavedrom.ts → renderers/edge/src/adapters/wavedrom.ts +2 -2
R renderers/edge/src/vendor.d.ts → renderers/edge/src/declarations/dependencies.d.ts +0 -0

No content changes.

R renderers/edge/src/raw.d.ts → renderers/edge/src/declarations/raw.d.ts +0 -0

No content changes.

R renderers/edge/src/erd.ts → renderers/edge/src/languages/erd.ts +0 -0

No content changes.

R renderers/edge/src/structurizr.ts → renderers/edge/src/languages/structurizr.ts +1 -1
R renderers/edge/src/umlet.ts → renderers/edge/src/languages/umlet.ts +1 -1
R renderers/edge/src/errors.ts → renderers/edge/src/runtime/errors.ts +0 -0

No content changes.

R renderers/edge/src/svg.ts → renderers/edge/src/runtime/svg.ts +1 -1
R renderers/edge/src/types.ts → renderers/edge/src/runtime/types.ts +4 -40
R renderers/edge/src/unit.ts → renderers/edge/src/runtime/unit.ts +1 -1
R renderers/edge/src/validation.ts → renderers/edge/src/runtime/validation.ts +0 -0

No content changes.

M renderers/edge/src/units/bytefield.ts +2 -2
M renderers/edge/src/units/d2.ts +2 -2
M renderers/edge/src/units/goat.ts +2 -2
M renderers/edge/src/units/graphviz-family.ts +4 -4
M renderers/edge/src/units/nomnoml.ts +2 -2
M renderers/edge/src/units/pikchr.ts +2 -2
M renderers/edge/src/units/plantuml-family.ts +2 -2
M renderers/edge/src/units/structurizr.ts +3 -3
M renderers/edge/src/units/svgbob.ts +3 -3
M renderers/edge/src/units/umlet.ts +2 -2
M renderers/edge/src/units/vega-family.ts +1 -1
M renderers/edge/src/units/vega.ts +2 -2
M renderers/edge/src/units/vegalite.ts +2 -2
M renderers/edge/src/units/wavedrom.ts +2 -2
M renderers/edge/test/adapters.test.ts +2 -2
M renderers/edge/test/c4-lowerer.test.ts +1 -1
M renderers/edge/test/d2.test.ts +2 -2
M renderers/edge/test/dbml.test.ts +4 -4
M renderers/edge/test/ditaa.test.ts +2 -2
M renderers/edge/test/erd.test.ts +1 -1
M renderers/edge/test/goat.test.ts +2 -2
M renderers/edge/test/graphviz-options.test.ts +2 -2
M renderers/edge/test/pikchr.test.ts +2 -2
M renderers/edge/test/structurizr.test.ts +1 -1
M renderers/edge/test/svg.test.ts +1 -1
M renderers/edge/test/svgbob.test.ts +2 -2
M renderers/edge/test/umlet.test.ts +1 -1
M renderers/edge/test/unit.test.ts +2 -2
R renderers/edge/d2-wasm/overlays/jsrunner/goja.go → renderers/edge/toolchains/d2/overlays/jsrunner/goja.go +0 -0

No content changes.

R renderers/edge/d2-wasm/overlays/jsrunner/js.go → renderers/edge/toolchains/d2/overlays/jsrunner/js.go +0 -0

No content changes.

R renderers/edge/d2-wasm/source/go.mod → renderers/edge/toolchains/d2/source/go.mod +0 -0

No content changes.

R renderers/edge/d2-wasm/source/go.sum → renderers/edge/toolchains/d2/source/go.sum +0 -0

No content changes.

R renderers/edge/d2-wasm/source/main.go → renderers/edge/toolchains/d2/source/main.go +0 -0

No content changes.

R renderers/edge/d2-wasm/source/worker.go → renderers/edge/toolchains/d2/source/worker.go +0 -0

No content changes.

R renderers/edge/src/vendor/dbml-entry.ts → renderers/edge/toolchains/dbml/entry.ts +0 -0

No content changes.

R renderers/edge/goat-wasm/README.md → renderers/edge/toolchains/goat/README.md +2 -2
R renderers/edge/goat-wasm/go.mod → renderers/edge/toolchains/goat/go.mod +0 -0

No content changes.

R renderers/edge/goat-wasm/go.sum → renderers/edge/toolchains/goat/go.sum +0 -0

No content changes.

R renderers/edge/goat-wasm/main.go → renderers/edge/toolchains/goat/main.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/.dir-locals.el → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/.dir-locals.el +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/.gitignore → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/.gitignore +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/CHANGELOG.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/CHANGELOG.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/LICENSE → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/LICENSE +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/README.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/README.md.tmpl +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/README.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/README.md.tmpl +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_drawable.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_line.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_line.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/a_roundedcorner.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/a_roundedcorner.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/ascii/ascii.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/ascii/ascii.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/clean.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/clean.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/git-add-generated-files.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/git-add-generated-files.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/internal/files.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/internal/files.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/internal/runstate.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/internal/runstate.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/local-markdown.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/local-markdown.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/markdown_to_html.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/markdown_to_html.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/pre-push.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/pre-push.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/proof-markdown.sh → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/proof-markdown.sh +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/runeset.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/runeset.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/abstractcanvas.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/abstractcanvas.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/config.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/config.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/csshelp.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/csshelp.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/drawable.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/index.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/index.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/iter.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/iter.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/style.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/style.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/svg-text.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/svg-text.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/svg/svg.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/svg/svg.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/README.md → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/README.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/README.md.tmpl → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/README.md.tmpl +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/joints.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/joints.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_drawable.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_drawable.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_line.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_line.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/u_svg.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/u_svg.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/blampe/goat/utf8/utf8.go → renderers/edge/toolchains/goat/vendor/github.com/blampe/goat/utf8/utf8.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.gitattributes → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.gitattributes +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.gitignore → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.gitignore +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/.golangci.yml → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/.golangci.yml +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/LICENSE.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/LICENSE.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/README.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/README.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/binary.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/binary.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/binary_unix.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/binary_unix.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/buffer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/buffer.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/lexer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/lexer.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/reader.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/reader.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/streamlexer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/streamlexer.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/buffer/writer.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/buffer/writer.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/common.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/common.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/README.md → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/README.md +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/hash.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/hash.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/lex.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/lex.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/parse.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/parse.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/css/util.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/css/util.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/error.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/error.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/input.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/input.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/position.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/position.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/github.com/tdewolff/parse/v2/util.go → renderers/edge/toolchains/goat/vendor/github.com/tdewolff/parse/v2/util.go +0 -0

No content changes.

R renderers/edge/goat-wasm/vendor/modules.txt → renderers/edge/toolchains/goat/vendor/modules.txt +0 -0

No content changes.

R renderers/edge/svgbob-wasm/Cargo.lock → renderers/edge/toolchains/svgbob/Cargo.lock +0 -0

No content changes.

R renderers/edge/svgbob-wasm/Cargo.toml → renderers/edge/toolchains/svgbob/Cargo.toml +0 -0

No content changes.

R renderers/edge/svgbob-wasm/src/lib.rs → renderers/edge/toolchains/svgbob/src/lib.rs +0 -0

No content changes.

M renderers/edge/tsconfig.json +10 -1
M renderers/edge/vitest.config.ts +1 -1
D renderers/edge/wrangler.units/d2.jsonc +0 -1
A renderers/scripts/deploy-python-units.mjs +53 -0
@@ -0,0 +1,53 @@
1+import { spawn } from 'node:child_process'2+import { access, readFile, readdir } from 'node:fs/promises'3+import { basename, join, resolve } from 'node:path'4+5+const pythonDirectory = resolve(import.meta.dirname, '../python')6+const units = []7+for (const entry of (await readdir(pythonDirectory, { withFileTypes: true }))8+ .filter(entry => entry.isDirectory())9+ .sort((left, right) => left.name.localeCompare(right.name))) {10+ const directory = join(pythonDirectory, entry.name)11+ try {12+ const configPath = join(directory, 'wrangler.jsonc')13+ await access(configPath)14+ const config = JSON.parse(await readFile(configPath, 'utf8'))15+ if (!config.name) throw new Error(`${entry.name}/wrangler.jsonc does not declare a Worker name.`)16+ units.push({17+ directory,18+ name: config.name,19+ dependencies: (config.services ?? []).map(service => service.service),20+ })21+ } catch {22+ // A Python support directory without a Wrangler config is not deployable.23+ }24+}25+26+if (units.length === 0) throw new Error('No Python Worker units were discovered.')27+const names = new Set(units.map(unit => unit.name))28+if (names.size !== units.length) throw new Error('Python Worker configuration names must be unique.')29+30+async function deploy(cwd) {31+ await new Promise((resolvePromise, reject) => {32+ const child = spawn('uv', ['run', 'pywrangler', 'deploy'], { cwd, stdio: 'inherit' })33+ child.on('error', reject)34+ child.on('exit', code => code === 0 ? resolvePromise() : reject(new Error(`${basename(cwd)} deployment exited ${code}`)))35+ })36+}37+38+const remaining = new Map(units.map(unit => [unit.name, unit]))39+let deployed = 040+while (remaining.size > 0) {41+ const ready = [...remaining.values()].filter(unit =>42+ unit.dependencies.every(dependency => !names.has(dependency) || !remaining.has(dependency)),43+ )44+ if (ready.length === 0) {45+ throw new Error(`Cyclic Python Worker service dependencies: ${[...remaining.keys()].join(', ')}`)46+ }47+ for (const unit of ready) {48+ await deploy(unit.directory)49+ remaining.delete(unit.name)50+ deployed += 151+ }52+}53+console.log(`${deployed}/${units.length} Python renderer units deployed`)
R renderers/edge/scripts/smoke-units.mjs → renderers/scripts/smoke-units.mjs +1 -1
A renderers/shared/engines.ts +40 -0
R workers/api/README.md → services/api/README.md +1 -1
R workers/api/migrations/0001_aliases.sql → services/api/migrations/0001_aliases.sql +0 -0

No content changes.

R workers/api/package-lock.json → services/api/package-lock.json +0 -0

No content changes.

R workers/api/package.json → services/api/package.json +1 -1
R workers/api/src/crypto.ts → services/api/src/crypto.ts +0 -0

No content changes.

R workers/api/src/index.ts → services/api/src/index.ts +1 -1
R workers/api/src/model.ts → services/api/src/model.ts +0 -0

No content changes.

R workers/api/src/validation.ts → services/api/src/validation.ts +0 -0

No content changes.

R workers/api/test/aliases.test.ts → services/api/test/aliases.test.ts +1 -1
R workers/api/test/env.d.ts → services/api/test/env.d.ts +0 -0

No content changes.

R workers/api/tsconfig.json → services/api/tsconfig.json +0 -0

No content changes.

R workers/api/vitest.config.ts → services/api/vitest.config.ts +0 -0

No content changes.

R workers/api/worker-configuration.d.ts → services/api/worker-configuration.d.ts +0 -0

No content changes.

R workers/api/wrangler.jsonc → services/api/wrangler.jsonc +0 -0

No content changes.

R workers/shell/package-lock.json → services/shell/package-lock.json +0 -0

No content changes.

R workers/shell/package.json → services/shell/package.json +4 -4
R workers/shell/src/index.ts → services/shell/src/index.ts +0 -0

No content changes.

R workers/shell/test/index.test.ts → services/shell/test/index.test.ts +0 -0

No content changes.

R workers/shell/tsconfig.json → services/shell/tsconfig.json +0 -0

No content changes.

R workers/shell/vitest.config.ts → services/shell/vitest.config.ts +0 -0

No content changes.

R workers/shell/worker-configuration.d.ts → services/shell/worker-configuration.d.ts +6 -6
@@ -1,6 +1,6 @@
11 /* eslint-disable */22 // Generated by Wrangler by running `wrangler types` (hash: 4244ca629f6011b823f8b11dd959b509)3-// Runtime types generated with workerd@1.20260820.1 2026-08-203+// Runtime types generated with workerd@1.20260820.1 2026-08-20 44 interface __BaseEnv_Env {55 ASSETS: Fetcher;66 }
@@ -11726,7 +11726,7 @@ interface RequestInitCfPropertiesImageDraw extends BasicImageTransformations {
1172611726 /**1172711727 * How to combine the foreground and backdrop pixels to create the result1172811728 */11729- composite?:11729+ composite?: 1173011730 /** Foreground drawn on top of backdrop (default) */1173111731 'over'1173211732 /** Foreground shown only where backdrop is opaque */
@@ -12240,7 +12240,7 @@ interface IncomingRequestCfPropertiesTLSClientAuthPlaceholder {
1224012240 certChainRFC9440TooLarge: false;1224112241 }1224212242 /** Possible outcomes of TLS verification */12243-declare type CertVerificationStatus =12243+declare type CertVerificationStatus = 1224412244 /** Authentication succeeded */1224512245 "SUCCESS"1224612246 /** No certificate was presented */
@@ -12308,7 +12308,7 @@ interface D1ExecResult {
1230812308 count: number;1230912309 duration: number;1231012310 }12311-type D1SessionConstraint =12311+type D1SessionConstraint = 1231212312 // Indicates that the first query should go to the primary, and the rest queries1231312313 // using the same D1DatabaseSession will go to any replica that is consistent with1231412314 // the bookmark maintained by the session (returned by the first query).
@@ -12758,7 +12758,7 @@ type ImageDrawOptions = {
1275812758 bottom?: number;1275912759 right?: number;1276012760 };12761-type ImageCompositeMode =12761+type ImageCompositeMode = 1276212762 /** Foreground drawn on top of backdrop (default) */1276312763 'over'1276412764 /** Foreground shown only where backdrop is opaque */
@@ -13251,7 +13251,7 @@ declare namespace Rpc {
1325113251 // The reason for using a generic type here is to build a serializable subset of structured1325213252 // cloneable composite types. This allows types defined with the "interface" keyword to pass the1325313253 // serializable check as well. Otherwise, only types defined with the "type" keyword would pass.13254- type Serializable<T> =13254+ type Serializable<T> = 1325513255 // Structured cloneables1325613256 BaseType1325713257 // Structured cloneable composites
R workers/shell/wrangler.jsonc → services/shell/wrangler.jsonc +0 -0

No content changes.

R packages/svg/index.d.ts → shared/svg/index.d.ts +0 -0

No content changes.

R packages/svg/index.js → shared/svg/index.js +0 -0

No content changes.