From 5da1fa0eec232a50c94aa5f4a5ed9f851001cb9d Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:16:31 +1000 Subject: [PATCH 01/11] Release notes for 0.2.0 --- src/dart_packages/dmx/CHANGELOG.md | 4 ++++ src/editors/vscode/CHANGELOG.md | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/dart_packages/dmx/CHANGELOG.md b/src/dart_packages/dmx/CHANGELOG.md index 151e17c..bcac878 100644 --- a/src/dart_packages/dmx/CHANGELOG.md +++ b/src/dart_packages/dmx/CHANGELOG.md @@ -5,6 +5,10 @@ ## Unreleased +- No API changes. `lib/` is identical to 0.1.0 apart from the version constant. +- The tag names the version, and the release stamps it [release.version]. +- README rewritten in plainer language. + ## 0.1.0 First release. diff --git a/src/editors/vscode/CHANGELOG.md b/src/editors/vscode/CHANGELOG.md index 473333d..d34ede8 100644 --- a/src/editors/vscode/CHANGELOG.md +++ b/src/editors/vscode/CHANGELOG.md @@ -5,6 +5,14 @@ ## Unreleased +- First Marketplace release. +- Watches every Dart package in the folder you open, not just `lib` + [editor.extension.paths]. Set `dmx.paths` to name them yourself. +- Also finds the binary in `src/dmx/target/{release,debug}` + [editor.extension.binary]. +- Resolves reported paths against the folder dmx ran in. +- Removed a debug probe that ran on activation. + ## 0.1.0 First release. From dbb34e53c3ff236dd24991084ac8b4ed17bd85db Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:16:42 +1000 Subject: [PATCH 02/11] config --- .gitignore | 1 + .vscode/settings.json | 18 +++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 92ef957..388186f 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,4 @@ examples/dmx_sqlite_example/tool/dmx/app.db # "autoMemoryEnabled": false setting ([AGENT-AUTOMEMORY]). Claude Code auto-ignores # this file by default, so re-include it explicitly. Keep this LAST so it wins. !.claude/settings.local.json +.mcp.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 54f0bfe..c456f76 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,18 +6,22 @@ "rust-analyzer.testExplorer": true, "rust-analyzer.check.command": "clippy", "rust-analyzer.check.allTargets": true, - // The Dart tests live in the example package, not at the workspace root. "dart.testAdditionalArgs": [], - // The Dart in this repo is the example package [editor.extension.autostart]. - "dmx.paths": ["examples/storefront/lib"], + "dmx.paths": [ + "examples/storefront/lib" + ], // Off *here only*: the `dmx: watch` task above already starts a watcher on // folder open, and this repo is the one place both mechanisms are present. // Consumers get `true`, which is the whole point of the extension. To try the // auto-start, stop that task and run "dmx: Restart Watcher". "dmx.autoStart": false, - - "[rust]": { "editor.formatOnSave": true }, - "files.watcherExclude": { "**/target/**": true } -} + "[rust]": { + "editor.formatOnSave": true + }, + "files.watcherExclude": { + "**/target/**": true + }, + "deslop.topOffenders.groupBy": "type" +} \ No newline at end of file From 74500ff9b19565db2b796224f8c14212f5c83e14 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:23:15 +1000 Subject: [PATCH 03/11] Grant the release's ci.yml call the permissions ci.yml declares A called workflow may not request more than its caller grants, and GitHub enforces it statically: ci.yml's `security` job declares `pull-requests: write`, the `verify` job granted only `contents: read`, and every tag push died as `startup_failure` before a job existed. No tag had ever been pushed, so nothing caught it. --- .github/workflows/release.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f2b507d..d0069b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -112,8 +112,16 @@ jobs: name: Verify needs: preflight uses: ./.github/workflows/ci.yml + # A called workflow may not request more than its caller grants, and GitHub + # checks that STATICALLY, before any job runs — an `if` that will never be + # true does not excuse the job from the check. ci.yml's `security` job asks + # for `pull-requests: write` to comment on a PR, so withholding it here does + # not skip that job, it refuses the whole run with `startup_failure` and no + # release starts at all. Granted, therefore, and unused: `security` is + # `if: github.event_name == 'pull_request'`, which a tag push never is. permissions: contents: read + pull-requests: write with: ref: ${{ inputs.ref || github.sha }} From 876d5c008e13feec3b87d500ae186e21962cf664 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:26:19 +1000 Subject: [PATCH 04/11] Create the output directory vsix-universal packages into MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `vsce` opens the --out path but does not create its directory. `vsix` gets that directory from `build`; `vsix-universal` carries no binary, builds nothing, and so died with ENOENT on every fresh checkout — which is what a release runner always is. Reproduced by packaging into a missing directory. --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index f227377..b66f948 100644 --- a/Makefile +++ b/Makefile @@ -420,6 +420,12 @@ vsix-universal: extension version ## Package the no-binary VSIX every other plat @# with one would hand every unmatched platform the wrong architecture. $(RM) $(EXTENSION_DIR)/bin cp LICENSE $(EXTENSION_DIR)/LICENSE + @# `vsce` opens the --out path, it does not create the directory holding it. + @# `vsix` gets that directory for free from `build`; this target carries no + @# binary and so builds nothing, which on a fresh checkout — a release + @# runner, every time — means target/ does not exist and packaging dies with + @# ENOENT after the bundle was assembled. + @$(MKDIR) $(CURDIR)/$(TARGET_DIR) cd $(EXTENSION_DIR) && npx vsce package --out $(CURDIR)/$(TARGET_DIR)/dmx-universal.vsix # Full clean rebuild-and-reinstall cycle for the VS Code extension From 56ec628b598a5e5fd7559348e8458ba5e9f48f14 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:28:28 +1000 Subject: [PATCH 05/11] Drop Intel macOS, and stop musl linking through musl-gcc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Intel macs are no longer a deployment target: the darwin-x64 leg and its bundle are gone. The alpine-x64 leg built a binary that segfaulted (exit 139) on its own --version. Rust ships a musl libc and links that target self-contained; overriding CARGO_TARGET_..._LINKER with Ubuntu's musl-gcc produced a broken x86_64 static-PIE. CC_ is still set — tree-sitter is C — but only a real cross-link (mingw) now names a linker. --- .github/workflows/release.yml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d0069b6..3f8fa07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -194,10 +194,7 @@ jobs: rust: x86_64-pc-windows-gnu apt: gcc-mingw-w64-x86-64 cc: x86_64-w64-mingw32-gcc - - vsix: darwin-x64 - os: macos-15-intel - rust: x86_64-apple-darwin - native: true + linker: x86_64-w64-mingw32-gcc - vsix: darwin-arm64 os: macos-14 rust: aarch64-apple-darwin @@ -221,14 +218,22 @@ jobs: if: matrix.apt != '' run: sudo apt-get update && sudo apt-get install --yes ${{ matrix.apt }} - - name: Point cargo and cc at it + # The C compiler and the LINKER are set separately because musl wants one + # and not the other. Rust ships its own musl libc and links that target + # self-contained; pointing the linker at Ubuntu's `musl-gcc` instead + # produced an x86_64 static-PIE that segfaulted (exit 139) the instant it + # was executed, so the binary was built, packaged, and dead. tree-sitter is + # still C and still needs CC_. Only a genuine cross-link — mingw — + # names a linker. + - name: Point cc at the cross toolchain if: matrix.cc != '' + run: echo "CC_${{ matrix.rust }}=${{ matrix.cc }}" >> "$GITHUB_ENV" + + - name: Point cargo's linker at it + if: matrix.linker != '' run: | triple=$(echo "${{ matrix.rust }}" | tr 'a-z-' 'A-Z_') - { - echo "CC_${{ matrix.rust }}=${{ matrix.cc }}" - echo "CARGO_TARGET_${triple}_LINKER=${{ matrix.cc }}" - } >> "$GITHUB_ENV" + echo "CARGO_TARGET_${triple}_LINKER=${{ matrix.linker }}" >> "$GITHUB_ENV" # VERSION stamps the bundle and reaches the compiler as DMX_VERSION, so # the manifest, the changelog the marketplace page shows, and the binary's @@ -338,7 +343,7 @@ jobs: # The complete set, named once. A platform missing from here is a platform # that silently stops being published. BUNDLES: >- - dmx-darwin-arm64.vsix dmx-darwin-x64.vsix + dmx-darwin-arm64.vsix dmx-linux-arm64.vsix dmx-linux-x64.vsix dmx-alpine-arm64.vsix dmx-alpine-x64.vsix dmx-win32-x64.vsix dmx-universal.vsix From 52f7b255f270c49a89b88654f37c2fe96ffffa3f Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:31:25 +1000 Subject: [PATCH 06/11] Refuse a release whose publishing credentials do not exist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit publish and publish-pub are held to the same gates but run in parallel, so a missing Entra credential surfaces only after pub.dev has already published a version that cannot be withdrawn. Checked in preflight before the checkout instead, where being wrong costs a red tag. Presence only — no value is ever printed or compared. --- .github/workflows/release.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3f8fa07..4cbd2ff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,6 +54,30 @@ jobs: version: ${{ steps.version.outputs.version }} publishing: ${{ github.event_name == 'push' }} steps: + # FIRST, before a checkout even. `publish` and `publish-pub` are held to + # the same gates but run in PARALLEL, so a Marketplace credential that + # turns out to be missing at publish time is discovered with pub.dev + # already published — and a pub version cannot be withdrawn, only + # retracted. The credentials are therefore proven to EXIST here, where the + # whole cost of being wrong is a red tag. Presence only: a value is never + # printed, compared, or logged. + - name: The publishing credentials exist + if: github.event_name == 'push' + env: + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + run: | + set -euo pipefail + missing="" + [ -n "${AZURE_CLIENT_ID:-}" ] || missing="${missing} AZURE_CLIENT_ID" + [ -n "${AZURE_TENANT_ID:-}" ] || missing="${missing} AZURE_TENANT_ID" + if [ -n "${missing}" ]; then + echo "::error::Release refused: no value for${missing}. The Marketplace publish exchanges GitHub OIDC for an Entra session and cannot run without them, and pub.dev publishes alongside it — so releasing now would burn a pub.dev version with no extension beside it [release.authentication]." + exit 1 + fi + echo "AZURE_CLIENT_ID: present" + echo "AZURE_TENANT_ID: present" + - uses: actions/checkout@v4 with: # The tagged commit, never a branch — `github.sha` on a tag push IS From 47a085b476cc0c8f42b1c74d327cacd7939ffa7b Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:36:18 +1000 Subject: [PATCH 07/11] Publish to the Marketplace with the Entra session itself, not a minted token vsce 3.x takes --azure-credential and uses the session azure/login already established from this job's OIDC token, so the release no longer mints an access token, masks it, and exports it as VSCE_PAT. Nothing token-shaped is handled by the workflow at all. --- .github/workflows/release.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4cbd2ff..3c34557 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -405,18 +405,15 @@ jobs: set -euo pipefail npm ci --prefix src/editors/vscode - # Azure DevOps' fixed first-party resource is what `vsce` authenticates - # against. Despite the environment variable name required by `vsce`, - # this is a short-lived OIDC-derived access token, not a stored PAT. - marketplace_token="$(az account get-access-token \ - --resource 499b84ac-1321-427f-aa17-267ca6975798 \ - --query accessToken -o tsv)" - echo "::add-mask::${marketplace_token}" - export VSCE_PAT="${marketplace_token}" - + # `--azure-credential` hands vsce the Entra session `azure/login` + # established from this job's OIDC token, and vsce acquires what it + # needs itself. Nothing mints, masks, exports or stores a token: there + # is no VSCE_PAT in this release, and no Marketplace PAT exists to + # expire, leak or rotate [release.authentication]. for bundle in $BUNDLES; do echo "Publishing bundles/$bundle" npx --prefix src/editors/vscode vsce publish \ + --azure-credential \ --skip-duplicate \ --packagePath "bundles/$bundle" done From 7074abc3a69927eb746b66520a7ec8fc174ce45b Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:44:24 +1000 Subject: [PATCH 08/11] Run preflight in the environment holding the credentials it checks Environment secrets are readable only by a job that declares the environment. The credentials guard sat in preflight, which declared none, so it read both as empty and refused a release whose secrets were set correctly. --- .github/workflows/release.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3c34557..e8922b8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,6 +50,12 @@ jobs: name: Preflight runs-on: ubuntu-22.04 timeout-minutes: 10 + # The publishing credentials are scoped to this environment, and an + # environment's secrets are readable ONLY by a job that declares it — so the + # check below is meaningless anywhere else. It reported both as absent while + # they were set correctly, which is the one way a guard can be worse than no + # guard: refusing the release it was added to protect. + environment: release outputs: version: ${{ steps.version.outputs.version }} publishing: ${{ github.event_name == 'push' }} From 9c6c769dcbf7ce5db47cbdd20ff0f0e73f9a4389 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 20:56:55 +1000 Subject: [PATCH 09/11] Prove the pub.dev archive after stamping it, not before MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dry run ran on the unstamped tree, on the reasoning that publishability does not depend on the version string. It does: pub validates the changelog against the current version, so the 0.0.0 placeholder produced 'CHANGELOG.md doesn't mention current version' and, once 0.1.0 existed, 'your version is earlier than that'. --dry-run exits non-zero on any warning, so the step could never once have passed. Stamped first now, committed into the throwaway checkout so the uncommitted- changes warning cannot fire, then proven — which validates the archive actually being published rather than a differently-versioned one. Reproduced in a clean clone of the tag: 0 warnings. --- .github/workflows/release.yml | 50 ++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e8922b8..5abc352 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,8 +11,11 @@ name: Release # A tag is the release, and THE TAG IS THE VERSION. Every package file in the # tree carries the placeholder `0.0.0`; each job checks out the tagged commit # and stamps what the tag names into its own throwaway checkout before it builds -# [release.version]. Nothing commits, nothing pushes, and no job checks out a -# branch. The stamped tree is a pure function of (tagged commit, tag), so +# [release.version]. Nothing pushes and no job checks out a branch; the pub.dev +# job alone commits, into its own throwaway checkout and only because pub +# refuses to validate an archive with uncommitted changes beside it. The +# repository is never written to. The stamped tree is a pure function of +# (tagged commit, tag), so # `make version VERSION=1.2.3` on the tagged commit reproduces what shipped — # nobody bumps a number before tagging, and no tag is ever refused for a file # somebody forgot. @@ -515,21 +518,6 @@ jobs: working-directory: src/dart_packages/dmx run: dart pub get - # The archive pub would receive, before it receives it. `--dry-run` fails - # on anything that would fail the real publish — a missing licence, a file - # the package cannot carry, an unresolvable constraint. - # - # BEFORE the stamp, deliberately. `--dry-run` exits non-zero on any - # warning, and one of pub's warnings is "you have uncommitted changes" — - # which the stamp is, by design. So the archive's SHAPE is proven here on - # the clean tagged checkout, where that warning cannot fire, and the - # version it carries is proven by the steps below. Nothing about - # publishability depends on which version string is in the file. - - name: Prove the archive is publishable - if: steps.published.outputs.skip != 'true' - working-directory: src/dart_packages/dmx - run: dart pub publish --dry-run - # `lib/src/version.dart` is GENERATED from the pubspec by this package's # own macro worker, so stamping the pubspec means regenerating it — a # package whose `DmxPackage.version` names the previous release is a @@ -558,12 +546,30 @@ jobs: make version VERSION="$VERSION" make dart-package-version VERSION="$VERSION" DMX="$PWD/bundle/dmx" git diff --stat + # Committed into this throwaway checkout, never pushed and never on a + # branch. `--dry-run` below exits non-zero on ANY warning, and "you + # have uncommitted changes" is one of them — so the stamp has to land + # in a commit for the archive to be provable at all. + git -c user.email=actions@github.com -c user.name="github-actions" \ + commit -qam "stamp $VERSION" + + # The archive pub is about to receive, exactly as it will receive it: + # stamped, so the version pub validates against is the version being + # published. `--dry-run` fails on anything that would fail the real + # publish — a missing licence, a file the package cannot carry, an + # unresolvable constraint, a changelog that never mentions this version. + # + # It ran BEFORE the stamp until v0.2.0, on the reasoning that nothing + # about publishability depends on the version string. It does: pub checks + # the changelog against the CURRENT version, so the `0.0.0` placeholder + # failed it every time, and the step could never once have passed. + - name: Prove the archive is publishable + if: steps.published.outputs.skip != 'true' + working-directory: src/dart_packages/dmx + run: dart pub publish --dry-run - # `--force` rather than a second `--dry-run`: the tree is deliberately - # dirty now, and pub treats that as a warning, not an error. Proven by - # `scripts/version.test.mjs` and `test/stamp_version_test.dart`, which - # cover what was written; proven again by the `--version` check above, - # which is the released binary reporting the released number. + # `--force` only to skip the interactive confirmation: the tree is clean + # and the archive is the one proven directly above. - name: Publish if: steps.published.outputs.skip != 'true' working-directory: src/dart_packages/dmx From 8c84fe1a1b7348636879e00c3d170ce4896063c3 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sat, 15 Aug 2026 21:38:29 +1000 Subject: [PATCH 10/11] Ship the real dmx mark as the extension icon, and link the install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The extension carried an older mark matching nothing else the project uses. Rebuilt from website/src/assets/images/dmx-mark.svg at 256x256 on the brand ground, in the proportions the apple-touch-icon already establishes. The Marketplace URL was written with the publisher in lowercase in six places. The gallery API accepts that form; the web page 404s on it. It is Nimblesite.dmx. The site and docs now offer the install itself — vscode:extension/Nimblesite.dmx opens the extension in the editor — alongside the Marketplace page, since the vscode: link is inert for a reader without VS Code. No new CSS: both CTAs reuse the existing button classes, and the budget stays at 1983 of 2000 lines. The docs claimed a macOS x64 bundle that 0.2.0 stopped publishing. --- README.md | 2 +- docs/messaging.md | 2 ++ src/dart_packages/dmx/CHANGELOG.md | 5 +++++ src/dart_packages/dmx/README.md | 2 +- src/editors/vscode/CHANGELOG.md | 5 +++++ src/editors/vscode/README.md | 2 +- src/editors/vscode/icon.png | Bin 14964 -> 17682 bytes website/src/docs/index.md | 11 +++++++---- website/src/index.njk | 10 +++++++--- 9 files changed, 29 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 34fbb62..8968522 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Neither input leaves the tab. ## Install **VS Code** — install **dmx — Dart code generation** from the -[Marketplace](https://marketplace.visualstudio.com/items?itemName=nimblesite.dmx), +[Marketplace](https://marketplace.visualstudio.com/items?itemName=Nimblesite.dmx), or from a terminal: ```bash diff --git a/docs/messaging.md b/docs/messaging.md index e31ad7b..bbd74a4 100644 --- a/docs/messaging.md +++ b/docs/messaging.md @@ -110,6 +110,8 @@ Version control is the team's choice. Commit generated files when a checkout sho ## Calls to action - **[Try dmx in your browser—no install](https://dmx.dev/playground.html)** +- **[Install the VS Code extension](vscode:extension/Nimblesite.dmx)** — the `vscode:` link opens the extension in the editor. Pair it with the Marketplace link below rather than using either alone: the `vscode:` link does nothing for a reader who has no VS Code installed, and the Marketplace page is the only one a browser can render. +- **[View on the Marketplace](https://marketplace.visualstudio.com/items?itemName=Nimblesite.dmx)** — the publisher is `Nimblesite`, capitalised. The lowercase `nimblesite.dmx` form is what the gallery API accepts and the web page 404s on, so it must never appear in a link. - **See code generation on every save** - **Shape your team's model template** - **Build a custom Dart macro** diff --git a/src/dart_packages/dmx/CHANGELOG.md b/src/dart_packages/dmx/CHANGELOG.md index bcac878..2b7be75 100644 --- a/src/dart_packages/dmx/CHANGELOG.md +++ b/src/dart_packages/dmx/CHANGELOG.md @@ -5,6 +5,11 @@ ## Unreleased +- No API changes. The README linked the extension's Marketplace page with the + publisher in lowercase, which 404s; it is `Nimblesite.dmx`. + +## 0.2.0 + - No API changes. `lib/` is identical to 0.1.0 apart from the version constant. - The tag names the version, and the release stamps it [release.version]. - README rewritten in plainer language. diff --git a/src/dart_packages/dmx/README.md b/src/dart_packages/dmx/README.md index bd0f36d..0972af0 100644 --- a/src/dart_packages/dmx/README.md +++ b/src/dart_packages/dmx/README.md @@ -8,7 +8,7 @@ factory, and no `build_runner` run. This package holds the `@dmx` annotation, the types the generated code uses, and the API for writing your own macros in Dart. The generating itself is done by the dmx tool, which the -[VS Code extension](https://marketplace.visualstudio.com/items?itemName=nimblesite.dmx) +[VS Code extension](https://marketplace.visualstudio.com/items?itemName=Nimblesite.dmx) bundles and runs for you. [Run the real generator in your browser](https://dmx.dev/playground.html) · diff --git a/src/editors/vscode/CHANGELOG.md b/src/editors/vscode/CHANGELOG.md index d34ede8..45934ab 100644 --- a/src/editors/vscode/CHANGELOG.md +++ b/src/editors/vscode/CHANGELOG.md @@ -5,6 +5,11 @@ ## Unreleased +- New icon: the dmx mark the website, favicon and docs already use. The + extension had been shipping an older mark that matched nothing else. + +## 0.2.0 + - First Marketplace release. - Watches every Dart package in the folder you open, not just `lib` [editor.extension.paths]. Set `dmx.paths` to name them yourself. diff --git a/src/editors/vscode/README.md b/src/editors/vscode/README.md index 8952ed0..574991e 100644 --- a/src/editors/vscode/README.md +++ b/src/editors/vscode/README.md @@ -8,7 +8,7 @@ factories, and no `build_runner` run. ## Install Install **dmx — Dart code generation** from the -[VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=nimblesite.dmx), +[VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=Nimblesite.dmx), or run: ```bash diff --git a/src/editors/vscode/icon.png b/src/editors/vscode/icon.png index a0adb70d230892b48107bfd2fb4f8047d9618c8c..4768c9be728489d8dd16821b299de167f527fcb6 100644 GIT binary patch literal 17682 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 literal 14964 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 MGz~Or)f}V#2lEOt>;M1& diff --git a/website/src/docs/index.md b/website/src/docs/index.md index ee5129a..b12b415 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -58,17 +58,20 @@ Install **dmx — Dart code generation** in any of these ways: - In VS Code, open **Extensions** (`⇧⌘X` on macOS or `Ctrl+Shift+X` on Windows and Linux), search for **dmx**, and select **Install**. -- From a terminal, run `code --install-extension nimblesite.dmx`. -- Open the [dmx Marketplace page](https://marketplace.visualstudio.com/items?itemName=nimblesite.dmx) +- From a terminal, run `code --install-extension Nimblesite.dmx`. +- Select [Install the VS Code extension](vscode:extension/Nimblesite.dmx), which + opens the extension in the editor you already have. +- Open the [dmx Marketplace page](https://marketplace.visualstudio.com/items?itemName=Nimblesite.dmx) and select **Install**. Open or reload a trusted Dart workspace after installation. The extension runs an initial build, inserts missing generated regions, and keeps them current as you save. -Platform-specific extensions are published for macOS and Linux on x64 and +Platform-specific extensions are published for macOS on ARM64, Linux on x64 and ARM64, Alpine on x64 and ARM64, and Windows on x64. VS Code selects the correct -bundle automatically. +bundle automatically, and installs a build carrying no binary anywhere else — +that one runs `dmx` from `PATH`. For an offline or air-gapped installation, download the VSIX for your platform from the [latest GitHub release](https://github.com/Nimblesite/dmx/releases/latest). diff --git a/website/src/index.njk b/website/src/index.njk index 164b5c7..f2905be 100644 --- a/website/src/index.njk +++ b/website/src/index.njk @@ -88,13 +88,16 @@ + + Install the VS Code extension + - Install the watcher + View on the Marketplace
    @@ -265,7 +268,8 @@

    Edit Dart and the Mustache template, and see what dmx emits. The generator runs in the tab as WebAssembly, so neither input is uploaded.

    From 68b8af3b38fc19df7dfe97362f9df70d43b77a58 Mon Sep 17 00:00:00 2001 From: Christian Findlay <16697547+MelbourneDeveloper@users.noreply.github.com> Date: Sun, 16 Aug 2026 07:55:30 +1000 Subject: [PATCH 11/11] Consume dmx from pub.dev, not the package beside it The examples, the golden corpus root and the corpus pubspec the Makefile generates all depended on src/dart_packages/dmx by path, so nothing in this repository ever exercised the package as published. They now resolve dmx ^0.3.0 from pub.dev, which is what a reader copying an example gets. examples/storefront/.dart_tool was tracked despite .dart_tool/ being ignored, and carried 48 absolute paths into a public repository. pub regenerates it, and switching to a hosted dependency would have written a pub-cache path under a developer's home directory into every future diff. --- Makefile | 2 +- examples/dmx_openapi_example/pubspec.yaml | 3 +- examples/dmx_sqlite_example/pubspec.yaml | 3 +- .../storefront/.dart_tool/package_config.json | 304 ------------ .../storefront/.dart_tool/package_graph.json | 448 ------------------ examples/storefront/pubspec.lock | 9 +- examples/storefront/pubspec.yaml | 3 +- src/dmx/tests/golden/pubspec.yaml | 3 +- 8 files changed, 10 insertions(+), 765 deletions(-) delete mode 100644 examples/storefront/.dart_tool/package_config.json delete mode 100644 examples/storefront/.dart_tool/package_graph.json diff --git a/Makefile b/Makefile index b66f948..85b9866 100644 --- a/Makefile +++ b/Makefile @@ -456,6 +456,6 @@ rebuild: ## From nothing: clean, rebuild the binary, and package the VSIX corpus: ## Generate every golden sample and prove it is valid Dart @$(RM) $(CORPUS_DIR) && $(MKDIR) $(CORPUS_DIR)/lib @cp $(GOLDEN_DIR)/*.dart $(CORPUS_DIR)/lib/ - @printf 'name: dmx_corpus\nenvironment:\n sdk: ^3.0.0\ndependencies:\n dmx:\n path: $(CURDIR)/src/dart_packages/dmx\n' > $(CORPUS_DIR)/pubspec.yaml + @printf 'name: dmx_corpus\nenvironment:\n sdk: ^3.0.0\ndependencies:\n dmx: ^0.3.0\n' > $(CORPUS_DIR)/pubspec.yaml cargo run $(CRATE) --quiet -- build $(CORPUS_DIR)/lib --insert-regions cd $(CORPUS_DIR) && dart pub get && dart analyze --fatal-infos diff --git a/examples/dmx_openapi_example/pubspec.yaml b/examples/dmx_openapi_example/pubspec.yaml index 6481e39..af96c73 100644 --- a/examples/dmx_openapi_example/pubspec.yaml +++ b/examples/dmx_openapi_example/pubspec.yaml @@ -6,8 +6,7 @@ environment: sdk: ^3.0.0 dependencies: - dmx: - path: ../../src/dart_packages/dmx + dmx: ^0.3.0 dev_dependencies: test: ^1.25.0 diff --git a/examples/dmx_sqlite_example/pubspec.yaml b/examples/dmx_sqlite_example/pubspec.yaml index 03feebd..bb5f29c 100644 --- a/examples/dmx_sqlite_example/pubspec.yaml +++ b/examples/dmx_sqlite_example/pubspec.yaml @@ -6,8 +6,7 @@ environment: sdk: ^3.0.0 dependencies: - dmx: - path: ../../src/dart_packages/dmx + dmx: ^0.3.0 dev_dependencies: test: ^1.25.0 diff --git a/examples/storefront/.dart_tool/package_config.json b/examples/storefront/.dart_tool/package_config.json deleted file mode 100644 index b17db18..0000000 --- a/examples/storefront/.dart_tool/package_config.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "configVersion": 2, - "packages": [ - { - "name": "_fe_analyzer_shared", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-105.0.0", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "analyzer", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/analyzer-14.1.0", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "args", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/args-2.7.0", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "async", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/async-2.13.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "boolean_selector", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2", - "packageUri": "lib/", - "languageVersion": "3.1" - }, - { - "name": "cli_config", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/cli_config-0.2.0", - "packageUri": "lib/", - "languageVersion": "3.0" - }, - { - "name": "collection", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/collection-1.19.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "convert", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/convert-3.1.2", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "coverage", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/coverage-1.15.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "crypto", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/crypto-3.0.7", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "dmx", - "rootUri": "../../../src/dart_packages/dmx", - "packageUri": "lib/", - "languageVersion": "3.0" - }, - { - "name": "file", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/file-7.0.1", - "packageUri": "lib/", - "languageVersion": "3.0" - }, - { - "name": "frontend_server_client", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0", - "packageUri": "lib/", - "languageVersion": "3.0" - }, - { - "name": "glob", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/glob-2.1.3", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "http_multi_server", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2", - "packageUri": "lib/", - "languageVersion": "3.2" - }, - { - "name": "http_parser", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/http_parser-4.1.2", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "io", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/io-1.0.5", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "logging", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/logging-1.3.0", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "matcher", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/matcher-0.12.20", - "packageUri": "lib/", - "languageVersion": "3.10" - }, - { - "name": "meta", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/meta-1.19.0", - "packageUri": "lib/", - "languageVersion": "3.5" - }, - { - "name": "mime", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/mime-2.0.0", - "packageUri": "lib/", - "languageVersion": "3.2" - }, - { - "name": "node_preamble", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/node_preamble-2.0.2", - "packageUri": "lib/", - "languageVersion": "2.12" - }, - { - "name": "package_config", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/package_config-3.0.0", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "path", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/path-1.9.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "pool", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/pool-1.5.2", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "pub_semver", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/pub_semver-2.2.0", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "shelf", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/shelf-1.4.2", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "shelf_packages_handler", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2", - "packageUri": "lib/", - "languageVersion": "2.17" - }, - { - "name": "shelf_static", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/shelf_static-1.1.3", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "shelf_web_socket", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0", - "packageUri": "lib/", - "languageVersion": "3.5" - }, - { - "name": "source_map_stack_trace", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "source_maps", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/source_maps-0.10.13", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "source_span", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/source_span-1.10.2", - "packageUri": "lib/", - "languageVersion": "3.1" - }, - { - "name": "stack_trace", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/stack_trace-1.12.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "stream_channel", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/stream_channel-2.1.4", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "string_scanner", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/string_scanner-1.4.1", - "packageUri": "lib/", - "languageVersion": "3.1" - }, - { - "name": "term_glyph", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/term_glyph-1.2.2", - "packageUri": "lib/", - "languageVersion": "3.1" - }, - { - "name": "test", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/test-1.31.2", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "test_api", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/test_api-0.7.13", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "test_core", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/test_core-0.6.19", - "packageUri": "lib/", - "languageVersion": "3.11" - }, - { - "name": "typed_data", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/typed_data-1.4.0", - "packageUri": "lib/", - "languageVersion": "3.5" - }, - { - "name": "vm_service", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/vm_service-15.2.0", - "packageUri": "lib/", - "languageVersion": "3.5" - }, - { - "name": "watcher", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/watcher-1.2.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "web", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/web-1.1.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "web_socket", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/web_socket-1.0.1", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "web_socket_channel", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.3", - "packageUri": "lib/", - "languageVersion": "3.3" - }, - { - "name": "webkit_inspection_protocol", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1", - "packageUri": "lib/", - "languageVersion": "3.0" - }, - { - "name": "yaml", - "rootUri": "file:///Users/christianfindlay/.pub-cache/hosted/pub.dev/yaml-3.1.3", - "packageUri": "lib/", - "languageVersion": "3.4" - }, - { - "name": "dmx_storefront_example", - "rootUri": "../", - "packageUri": "lib/", - "languageVersion": "3.0" - } - ], - "generator": "pub", - "generatorVersion": "3.12.2", - "flutterRoot": "file:///opt/homebrew/share/flutter", - "flutterVersion": "3.44.2", - "pubCache": "file:///Users/christianfindlay/.pub-cache" -} diff --git a/examples/storefront/.dart_tool/package_graph.json b/examples/storefront/.dart_tool/package_graph.json deleted file mode 100644 index 3a01d97..0000000 --- a/examples/storefront/.dart_tool/package_graph.json +++ /dev/null @@ -1,448 +0,0 @@ -{ - "roots": [ - "dmx_storefront_example" - ], - "packages": [ - { - "name": "dmx_storefront_example", - "version": "0.1.0", - "dependencies": [ - "dmx" - ], - "devDependencies": [ - "test" - ] - }, - { - "name": "test", - "version": "1.31.2", - "dependencies": [ - "analyzer", - "async", - "boolean_selector", - "collection", - "coverage", - "http_multi_server", - "io", - "matcher", - "node_preamble", - "package_config", - "path", - "pool", - "shelf", - "shelf_packages_handler", - "shelf_static", - "shelf_web_socket", - "source_span", - "stack_trace", - "stream_channel", - "test_api", - "test_core", - "typed_data", - "web_socket_channel", - "webkit_inspection_protocol", - "yaml" - ] - }, - { - "name": "dmx", - "version": "0.0.0", - "dependencies": [] - }, - { - "name": "yaml", - "version": "3.1.3", - "dependencies": [ - "collection", - "source_span", - "string_scanner" - ] - }, - { - "name": "webkit_inspection_protocol", - "version": "1.2.1", - "dependencies": [ - "logging" - ] - }, - { - "name": "web_socket_channel", - "version": "3.0.3", - "dependencies": [ - "async", - "crypto", - "stream_channel", - "web", - "web_socket" - ] - }, - { - "name": "typed_data", - "version": "1.4.0", - "dependencies": [ - "collection" - ] - }, - { - "name": "test_core", - "version": "0.6.19", - "dependencies": [ - "analyzer", - "args", - "async", - "boolean_selector", - "collection", - "coverage", - "frontend_server_client", - "glob", - "io", - "meta", - "package_config", - "path", - "pool", - "source_map_stack_trace", - "source_maps", - "source_span", - "stack_trace", - "stream_channel", - "test_api", - "vm_service", - "yaml" - ] - }, - { - "name": "test_api", - "version": "0.7.13", - "dependencies": [ - "async", - "boolean_selector", - "collection", - "meta", - "source_span", - "stack_trace", - "stream_channel", - "string_scanner", - "term_glyph" - ] - }, - { - "name": "stream_channel", - "version": "2.1.4", - "dependencies": [ - "async" - ] - }, - { - "name": "stack_trace", - "version": "1.12.1", - "dependencies": [ - "path" - ] - }, - { - "name": "source_span", - "version": "1.10.2", - "dependencies": [ - "collection", - "path", - "term_glyph" - ] - }, - { - "name": "shelf_web_socket", - "version": "3.0.0", - "dependencies": [ - "shelf", - "stream_channel", - "web_socket_channel" - ] - }, - { - "name": "shelf_static", - "version": "1.1.3", - "dependencies": [ - "convert", - "http_parser", - "mime", - "path", - "shelf" - ] - }, - { - "name": "shelf_packages_handler", - "version": "3.0.2", - "dependencies": [ - "path", - "shelf", - "shelf_static" - ] - }, - { - "name": "shelf", - "version": "1.4.2", - "dependencies": [ - "async", - "collection", - "http_parser", - "path", - "stack_trace", - "stream_channel" - ] - }, - { - "name": "pool", - "version": "1.5.2", - "dependencies": [ - "async", - "stack_trace" - ] - }, - { - "name": "path", - "version": "1.9.1", - "dependencies": [] - }, - { - "name": "package_config", - "version": "3.0.0", - "dependencies": [ - "meta" - ] - }, - { - "name": "node_preamble", - "version": "2.0.2", - "dependencies": [] - }, - { - "name": "matcher", - "version": "0.12.20", - "dependencies": [ - "async", - "meta", - "stack_trace", - "term_glyph", - "test_api" - ] - }, - { - "name": "io", - "version": "1.0.5", - "dependencies": [ - "meta", - "path", - "string_scanner" - ] - }, - { - "name": "http_multi_server", - "version": "3.2.2", - "dependencies": [ - "async" - ] - }, - { - "name": "coverage", - "version": "1.15.1", - "dependencies": [ - "args", - "cli_config", - "glob", - "logging", - "meta", - "package_config", - "path", - "source_maps", - "stack_trace", - "vm_service", - "yaml" - ] - }, - { - "name": "collection", - "version": "1.19.1", - "dependencies": [] - }, - { - "name": "boolean_selector", - "version": "2.1.2", - "dependencies": [ - "source_span", - "string_scanner" - ] - }, - { - "name": "async", - "version": "2.13.1", - "dependencies": [ - "collection", - "meta" - ] - }, - { - "name": "analyzer", - "version": "14.1.0", - "dependencies": [ - "_fe_analyzer_shared", - "collection", - "convert", - "crypto", - "glob", - "meta", - "package_config", - "path", - "pub_semver", - "source_span", - "watcher", - "yaml" - ] - }, - { - "name": "string_scanner", - "version": "1.4.1", - "dependencies": [ - "source_span" - ] - }, - { - "name": "logging", - "version": "1.3.0", - "dependencies": [] - }, - { - "name": "web_socket", - "version": "1.0.1", - "dependencies": [ - "web" - ] - }, - { - "name": "web", - "version": "1.1.1", - "dependencies": [] - }, - { - "name": "crypto", - "version": "3.0.7", - "dependencies": [ - "typed_data" - ] - }, - { - "name": "vm_service", - "version": "15.2.0", - "dependencies": [] - }, - { - "name": "source_maps", - "version": "0.10.13", - "dependencies": [ - "source_span" - ] - }, - { - "name": "source_map_stack_trace", - "version": "2.1.2", - "dependencies": [ - "path", - "source_maps", - "stack_trace" - ] - }, - { - "name": "meta", - "version": "1.19.0", - "dependencies": [] - }, - { - "name": "glob", - "version": "2.1.3", - "dependencies": [ - "async", - "collection", - "file", - "path", - "string_scanner" - ] - }, - { - "name": "frontend_server_client", - "version": "4.0.0", - "dependencies": [ - "async", - "path" - ] - }, - { - "name": "args", - "version": "2.7.0", - "dependencies": [] - }, - { - "name": "term_glyph", - "version": "1.2.2", - "dependencies": [] - }, - { - "name": "mime", - "version": "2.0.0", - "dependencies": [] - }, - { - "name": "http_parser", - "version": "4.1.2", - "dependencies": [ - "collection", - "source_span", - "string_scanner", - "typed_data" - ] - }, - { - "name": "convert", - "version": "3.1.2", - "dependencies": [ - "typed_data" - ] - }, - { - "name": "cli_config", - "version": "0.2.0", - "dependencies": [ - "args", - "yaml" - ] - }, - { - "name": "watcher", - "version": "1.2.1", - "dependencies": [ - "async", - "path" - ] - }, - { - "name": "pub_semver", - "version": "2.2.0", - "dependencies": [ - "collection" - ] - }, - { - "name": "_fe_analyzer_shared", - "version": "105.0.0", - "dependencies": [ - "meta" - ] - }, - { - "name": "file", - "version": "7.0.1", - "dependencies": [ - "meta", - "path" - ] - } - ], - "configVersion": 1 -} \ No newline at end of file diff --git a/examples/storefront/pubspec.lock b/examples/storefront/pubspec.lock index 3547bd5..7c867fd 100644 --- a/examples/storefront/pubspec.lock +++ b/examples/storefront/pubspec.lock @@ -84,10 +84,11 @@ packages: dmx: dependency: "direct main" description: - path: "../../src/dart_packages/dmx" - relative: true - source: path - version: "0.0.0" + name: dmx + sha256: "0d604ba0c5a9cc9977281fff53ceee03e1cad5ff99fc7ce742a086d8839b6d33" + url: "https://pub.dev" + source: hosted + version: "0.3.0" file: dependency: transitive description: diff --git a/examples/storefront/pubspec.yaml b/examples/storefront/pubspec.yaml index 181cea7..bb57fd2 100644 --- a/examples/storefront/pubspec.yaml +++ b/examples/storefront/pubspec.yaml @@ -5,8 +5,7 @@ publish_to: none environment: sdk: ^3.0.0 dependencies: - dmx: - path: ../../src/dart_packages/dmx + dmx: ^0.3.0 dev_dependencies: test: ^1.25.0 diff --git a/src/dmx/tests/golden/pubspec.yaml b/src/dmx/tests/golden/pubspec.yaml index af119e6..4333ef2 100644 --- a/src/dmx/tests/golden/pubspec.yaml +++ b/src/dmx/tests/golden/pubspec.yaml @@ -4,5 +4,4 @@ publish_to: none environment: sdk: ^3.0.0 dependencies: - dmx: - path: ../../../dart_packages/dmx + dmx: ^0.3.0