Add publish CI/CD for Marketplace and Open VSX
New publish.yml packages one .vsix and publishes it to the VS Code Marketplace (vsce) and Open VSX (ovsx) when a GitHub Release tagged v<version> is created. Guards the tag against package.json, bootstraps the Open VSX namespace, and supports a manual dry run. Adds ovsx as a dev dependency and documents the release flow and required secrets. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
paydii committed
Jun 26, 2026 at 05:23 UTC
416ec209c772e8ad0846a6c3abb3514487a2133e
4 files changed
+446
.github/workflows/publish.yml
new
+106
@@ -0,0 +1,106 @@
1
+name: Publish
2
+
3
+# Publishes the extension to the VS Code Marketplace and Open VSX.
4
+#
5
+# Real publish: create a GitHub Release whose tag is `v<version>` (e.g.
6
+# v1.0.1) matching package.json. Dry run: trigger manually from the Actions
7
+# tab with "publish" unchecked to build and package without publishing.
8
+#
9
+# Required repository secrets:
10
+# VSCE_PAT Azure DevOps PAT for the `getsigit` Marketplace publisher.
11
+# OVSX_PAT Access token for the Open VSX `getsigit` namespace.
12
+
13
+on:
14
+ release:
15
+ types: [published]
16
+ workflow_dispatch:
17
+ inputs:
18
+ publish:
19
+ description: "Publish to the registries (leave off for a dry run)"
20
+ type: boolean
21
+ default: false
22
+
23
+permissions:
24
+ contents: write # upload the .vsix asset to the release
25
+
26
+jobs:
27
+ publish:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+
32
+ - name: Setup pnpm
33
+ uses: pnpm/action-setup@v4
34
+
35
+ - name: Setup Node.js
36
+ uses: actions/setup-node@v4
37
+ with:
38
+ node-version: "20"
39
+ cache: pnpm
40
+
41
+ - name: Install dependencies
42
+ run: pnpm install --frozen-lockfile
43
+
44
+ - name: Lint
45
+ run: pnpm run lint
46
+
47
+ - name: Type check
48
+ run: pnpm run compile
49
+
50
+ - name: Build
51
+ run: pnpm run build
52
+
53
+ - name: Test
54
+ run: pnpm run test
55
+
56
+ - name: Resolve version
57
+ id: meta
58
+ run: |
59
+ VERSION=$(node -p "require('./package.json').version")
60
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
61
+ echo "vsix=sigit-code-$VERSION.vsix" >> "$GITHUB_OUTPUT"
62
+
63
+ - name: Verify tag matches package.json version
64
+ if: github.event_name == 'release'
65
+ run: |
66
+ TAG="${GITHUB_REF_NAME#v}"
67
+ PKG="${{ steps.meta.outputs.version }}"
68
+ if [ "$TAG" != "$PKG" ]; then
69
+ echo "::error::Release tag $GITHUB_REF_NAME ($TAG) does not match package.json version $PKG"
70
+ exit 1
71
+ fi
72
+
73
+ - name: Package VSIX
74
+ run: pnpm exec vsce package --no-dependencies -o "${{ steps.meta.outputs.vsix }}"
75
+
76
+ - name: Publish to VS Code Marketplace
77
+ if: github.event_name == 'release' || inputs.publish
78
+ env:
79
+ VSCE_PAT: ${{ secrets.VSCE_PAT }}
80
+ run: pnpm exec vsce publish --no-dependencies --packagePath "${{ steps.meta.outputs.vsix }}"
81
+
82
+ - name: Ensure Open VSX namespace
83
+ if: github.event_name == 'release' || inputs.publish
84
+ continue-on-error: true # already-exists is not an error
85
+ env:
86
+ OVSX_PAT: ${{ secrets.OVSX_PAT }}
87
+ run: pnpm exec ovsx create-namespace getsigit
88
+
89
+ - name: Publish to Open VSX
90
+ if: github.event_name == 'release' || inputs.publish
91
+ env:
92
+ OVSX_PAT: ${{ secrets.OVSX_PAT }}
93
+ run: pnpm exec ovsx publish "${{ steps.meta.outputs.vsix }}" --no-dependencies
94
+
95
+ - name: Attach VSIX to the release
96
+ if: github.event_name == 'release'
97
+ env:
98
+ GH_TOKEN: ${{ github.token }}
99
+ run: gh release upload "$GITHUB_REF_NAME" "${{ steps.meta.outputs.vsix }}" --clobber
100
+
101
+ - name: Upload VSIX artifact (dry run)
102
+ if: github.event_name == 'workflow_dispatch'
103
+ uses: actions/upload-artifact@v4
104
+ with:
105
+ name: ${{ steps.meta.outputs.vsix }}
106
+ path: ${{ steps.meta.outputs.vsix }}
README.md
+26
@@ -110,6 +110,32 @@ pnpm run test:smoke # ACP round-trip against a mock agent
110
pnpm run package # vsce package (.vsix)
111
```
112
113
+## Releasing
114
+
115
+Publishing is automated by [`.github/workflows/publish.yml`](.github/workflows/publish.yml).
116
+It runs the test suite, packages one `.vsix`, and publishes that same file to the
117
+VS Code Marketplace (`vsce`) and Open VSX (`ovsx`).
118
+
119
+One-time setup, stored as repository secrets:
120
+
121
+- `VSCE_PAT`: an Azure DevOps personal access token for the `getsigit`
122
+ Marketplace publisher (Marketplace > Manage scope).
123
+- `OVSX_PAT`: an access token for the `getsigit` namespace on
124
+ [open-vsx.org](https://open-vsx.org). The workflow creates the namespace on
125
+ first publish if it does not exist.
126
+
127
+To cut a release:
128
+
129
+1. Bump `version` in `package.json` and add a `CHANGELOG.md` entry.
130
+2. Push to `main`, then create a GitHub Release whose tag is `v<version>` (for
131
+ example `v1.0.1`). The workflow checks the tag against `package.json` and
132
+ fails on a mismatch.
133
+3. The release publishes to both registries and attaches the `.vsix` to the
134
+ GitHub Release.
135
+
136
+To test packaging without publishing, run the workflow manually from the Actions
137
+tab with **publish** left unchecked. It uploads the `.vsix` as a build artifact.
138
+
139
## License
140
141
[MIT](./LICENSE) © 2026 siGit Code & Deploy
package.json
+1
@@ -183,6 +183,7 @@
183
"@vscode/vsce": "^3.9.2",
184
"esbuild": "^0.20.0",
185
"eslint": "^8.57.0",
186
+ "ovsx": "^1.0.2",
187
"typescript": "^5.4.0"
188
}
189
}
pnpm-lock.yaml
+313
@@ -29,6 +29,9 @@ importers:
29
eslint:
30
specifier: ^8.57.0
31
version: 8.57.1
32
+ ovsx:
33
+ specifier: ^1.0.2
34
+ version: 1.0.2
35
typescript:
36
specifier: ^5.4.0
37
version: 5.9.3
@@ -93,6 +96,15 @@ packages:
96
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
97
engines: {node: '>=6.9.0'}
98
99
+ '@emnapi/core@1.11.1':
100
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
101
+
102
+ '@emnapi/runtime@1.11.1':
103
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
104
+
105
+ '@emnapi/wasi-threads@1.2.2':
106
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
107
+
108
'@esbuild/aix-ppc64@0.20.2':
109
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
110
engines: {node: '>=12'}
@@ -262,6 +274,100 @@ packages:
274
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
275
deprecated: Use @eslint/object-schema instead
276
277
+ '@napi-rs/wasm-runtime@0.2.12':
278
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
279
+
280
+ '@node-rs/crc32-android-arm-eabi@1.10.6':
281
+ resolution: {integrity: sha512-vZAMuJXm3TpWPOkkhxdrofWDv+Q+I2oO7ucLRbXyAPmXFNDhHtBxbO1rk9Qzz+M3eep8ieS4/+jCL1Q0zacNMQ==}
282
+ engines: {node: '>= 10'}
283
+ cpu: [arm]
284
+ os: [android]
285
+
286
+ '@node-rs/crc32-android-arm64@1.10.6':
287
+ resolution: {integrity: sha512-Vl/JbjCinCw/H9gEpZveWCMjxjcEChDcDBM8S4hKay5yyoRCUHJPuKr4sjVDBeOm+1nwU3oOm6Ca8dyblwp4/w==}
288
+ engines: {node: '>= 10'}
289
+ cpu: [arm64]
290
+ os: [android]
291
+
292
+ '@node-rs/crc32-darwin-arm64@1.10.6':
293
+ resolution: {integrity: sha512-kARYANp5GnmsQiViA5Qu74weYQ3phOHSYQf0G+U5wB3NB5JmBHnZcOc46Ig21tTypWtdv7u63TaltJQE41noyg==}
294
+ engines: {node: '>= 10'}
295
+ cpu: [arm64]
296
+ os: [darwin]
297
+
298
+ '@node-rs/crc32-darwin-x64@1.10.6':
299
+ resolution: {integrity: sha512-Q99bevJVMfLTISpkpKBlXgtPUItrvTWKFyiqoKH5IvscZmLV++NH4V13Pa17GTBmv9n18OwzgQY4/SRq6PQNVA==}
300
+ engines: {node: '>= 10'}
301
+ cpu: [x64]
302
+ os: [darwin]
303
+
304
+ '@node-rs/crc32-freebsd-x64@1.10.6':
305
+ resolution: {integrity: sha512-66hpawbNjrgnS9EDMErta/lpaqOMrL6a6ee+nlI2viduVOmRZWm9Rg9XdGTK/+c4bQLdtC6jOd+Kp4EyGRYkAg==}
306
+ engines: {node: '>= 10'}
307
+ cpu: [x64]
308
+ os: [freebsd]
309
+
310
+ '@node-rs/crc32-linux-arm-gnueabihf@1.10.6':
311
+ resolution: {integrity: sha512-E8Z0WChH7X6ankbVm8J/Yym19Cq3otx6l4NFPS6JW/cWdjv7iw+Sps2huSug+TBprjbcEA+s4TvEwfDI1KScjg==}
312
+ engines: {node: '>= 10'}
313
+ cpu: [arm]
314
+ os: [linux]
315
+
316
+ '@node-rs/crc32-linux-arm64-gnu@1.10.6':
317
+ resolution: {integrity: sha512-LmWcfDbqAvypX0bQjQVPmQGazh4dLiVklkgHxpV4P0TcQ1DT86H/SWpMBMs/ncF8DGuCQ05cNyMv1iddUDugoQ==}
318
+ engines: {node: '>= 10'}
319
+ cpu: [arm64]
320
+ os: [linux]
321
+ libc: [glibc]
322
+
323
+ '@node-rs/crc32-linux-arm64-musl@1.10.6':
324
+ resolution: {integrity: sha512-k8ra/bmg0hwRrIEE8JL1p32WfaN9gDlUUpQRWsbxd1WhjqvXea7kKO6K4DwVxyxlPhBS9Gkb5Urq7Y4mXANzaw==}
325
+ engines: {node: '>= 10'}
326
+ cpu: [arm64]
327
+ os: [linux]
328
+ libc: [musl]
329
+
330
+ '@node-rs/crc32-linux-x64-gnu@1.10.6':
331
+ resolution: {integrity: sha512-IfjtqcuFK7JrSZ9mlAFhb83xgium30PguvRjIMI45C3FJwu18bnLk1oR619IYb/zetQT82MObgmqfKOtgemEKw==}
332
+ engines: {node: '>= 10'}
333
+ cpu: [x64]
334
+ os: [linux]
335
+ libc: [glibc]
336
+
337
+ '@node-rs/crc32-linux-x64-musl@1.10.6':
338
+ resolution: {integrity: sha512-LbFYsA5M9pNunOweSt6uhxenYQF94v3bHDAQRPTQ3rnjn+mK6IC7YTAYoBjvoJP8lVzcvk9hRj8wp4Jyh6Y80g==}
339
+ engines: {node: '>= 10'}
340
+ cpu: [x64]
341
+ os: [linux]
342
+ libc: [musl]
343
+
344
+ '@node-rs/crc32-wasm32-wasi@1.10.6':
345
+ resolution: {integrity: sha512-KaejdLgHMPsRaxnM+OG9L9XdWL2TabNx80HLdsCOoX9BVhEkfh39OeahBo8lBmidylKbLGMQoGfIKDjq0YMStw==}
346
+ engines: {node: '>=14.0.0'}
347
+ cpu: [wasm32]
348
+
349
+ '@node-rs/crc32-win32-arm64-msvc@1.10.6':
350
+ resolution: {integrity: sha512-x50AXiSxn5Ccn+dCjLf1T7ZpdBiV1Sp5aC+H2ijhJO4alwznvXgWbopPRVhbp2nj0i+Gb6kkDUEyU+508KAdGQ==}
351
+ engines: {node: '>= 10'}
352
+ cpu: [arm64]
353
+ os: [win32]
354
+
355
+ '@node-rs/crc32-win32-ia32-msvc@1.10.6':
356
+ resolution: {integrity: sha512-DpDxQLaErJF9l36aghe1Mx+cOnYLKYo6qVPqPL9ukJ5rAGLtCdU0C+Zoi3gs9ySm8zmbFgazq/LvmsZYU42aBw==}
357
+ engines: {node: '>= 10'}
358
+ cpu: [ia32]
359
+ os: [win32]
360
+
361
+ '@node-rs/crc32-win32-x64-msvc@1.10.6':
362
+ resolution: {integrity: sha512-5B1vXosIIBw1m2Rcnw62IIfH7W9s9f7H7Ma0rRuhT8HR4Xh8QCgw6NJSI2S2MCngsGktYnAhyUvs81b7efTyQw==}
363
+ engines: {node: '>= 10'}
364
+ cpu: [x64]
365
+ os: [win32]
366
+
367
+ '@node-rs/crc32@1.10.6':
368
+ resolution: {integrity: sha512-+llXfqt+UzgoDzT9of5vPQPGqTAVCohU74I9zIBkNo5TH6s2P31DFJOGsJQKN207f0GHnYv5pV3wh3BCY/un/A==}
369
+ engines: {node: '>= 10'}
370
+
371
'@nodelib/fs.scandir@2.1.5':
372
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
373
engines: {node: '>= 8'}
@@ -338,6 +444,9 @@ packages:
444
'@textlint/types@15.7.1':
445
resolution: {integrity: sha512-Vye/GmFNBTgVzZFtIFJTmLB+s2A7oIADxNG6r9UhfPuY+Czv0z5G3xeyFZZudPlfxURsKUyPIU5XsjOFqVp33A==}
446
447
+ '@tybys/wasm-util@0.10.3':
448
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
449
+
450
'@types/node@20.19.43':
451
resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==}
452
@@ -601,6 +710,9 @@ packages:
710
chownr@1.1.4:
711
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
712
713
+ ci-info@2.0.0:
714
+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
715
+
716
cockatiel@3.2.1:
717
resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==}
718
engines: {node: '>=16'}
@@ -620,6 +732,10 @@ packages:
732
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
733
engines: {node: '>=18'}
734
735
+ commander@6.2.1:
736
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
737
+ engines: {node: '>= 6'}
738
+
739
concat-map@0.0.1:
740
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
741
@@ -662,10 +778,18 @@ packages:
778
resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
779
engines: {node: '>=18'}
780
781
+ define-data-property@1.1.4:
782
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
783
+ engines: {node: '>= 0.4'}
784
+
785
define-lazy-prop@3.0.0:
786
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
787
engines: {node: '>=12'}
788
789
+ define-properties@1.2.1:
790
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
791
+ engines: {node: '>= 0.4'}
792
+
793
delayed-stream@1.0.0:
794
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
795
engines: {node: '>=0.4.0'}
@@ -832,6 +956,15 @@ packages:
956
flatted@3.4.2:
957
resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
958
959
+ follow-redirects@1.16.0:
960
+ resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
961
+ engines: {node: '>=4.0'}
962
+ peerDependencies:
963
+ debug: '*'
964
+ peerDependenciesMeta:
965
+ debug:
966
+ optional: true
967
+
968
form-data@4.0.6:
969
resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
970
engines: {node: '>= 6'}
@@ -880,6 +1013,10 @@ packages:
1013
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
1014
engines: {node: '>=8'}
1015
1016
+ globalthis@1.0.4:
1017
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
1018
+ engines: {node: '>= 0.4'}
1019
+
1020
globby@11.1.0:
1021
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1022
engines: {node: '>=10'}
@@ -902,6 +1039,9 @@ packages:
1039
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1040
engines: {node: '>=8'}
1041
1042
+ has-property-descriptors@1.0.2:
1043
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1044
+
1045
has-symbols@1.1.0:
1046
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1047
engines: {node: '>= 0.4'}
@@ -970,6 +1110,10 @@ packages:
1110
ini@1.3.8:
1111
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
1112
1113
+ is-ci@2.0.0:
1114
+ resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
1115
+ hasBin: true
1116
+
1117
is-docker@3.0.0:
1118
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
1119
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -992,6 +1136,10 @@ packages:
1136
engines: {node: '>=14.16'}
1137
hasBin: true
1138
1139
+ is-it-type@5.1.3:
1140
+ resolution: {integrity: sha512-AX2uU0HW+TxagTgQXOJY7+2fbFHemC7YFBwN1XqD8qQMKdtfbOC8OC3fUb4s5NU59a3662Dzwto8tWDdZYRXxg==}
1141
+ engines: {node: '>=12'}
1142
+
1143
is-number@7.0.0:
1144
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1145
engines: {node: '>=0.12.0'}
@@ -1204,6 +1352,10 @@ packages:
1352
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1353
engines: {node: '>= 0.4'}
1354
1355
+ object-keys@1.1.1:
1356
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1357
+ engines: {node: '>= 0.4'}
1358
+
1359
once@1.4.0:
1360
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1361
@@ -1215,6 +1367,11 @@ packages:
1367
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1368
engines: {node: '>= 0.8.0'}
1369
1370
+ ovsx@1.0.2:
1371
+ resolution: {integrity: sha512-N0gWlINGgoOA2Sn0AhrF9L3ap40a/QbsFUpMDKR+CKYyZGJeTFEoNGngplLHjAYtcjrrZv2jX2K7ktPzxWjPNg==}
1372
+ engines: {node: '>= 20'}
1373
+ hasBin: true
1374
+
1375
p-limit@3.1.0:
1376
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1377
engines: {node: '>=10'}
@@ -1413,6 +1570,10 @@ packages:
1570
simple-get@4.0.1:
1571
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
1572
1573
+ simple-invariant@2.0.1:
1574
+ resolution: {integrity: sha512-1sbhsxqI+I2tqlmjbz99GXNmZtr6tKIyEgGGnJw/MKGblalqk/XoOYYFJlBzTKZCxx8kLaD3FD5s9BEEjx5Pyg==}
1575
+ engines: {node: '>=10'}
1576
+
1577
slash@3.0.0:
1578
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1579
engines: {node: '>=8'}
@@ -1614,6 +1775,10 @@ packages:
1775
yallist@4.0.0:
1776
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1777
1778
+ yauzl-promise@4.0.0:
1779
+ resolution: {integrity: sha512-/HCXpyHXJQQHvFq9noqrjfa/WpQC2XYs3vI7tBiAi4QiIU1knvYhZGaO1QPjwIVMdqflxbmwgMXtYeaRiAE0CA==}
1780
+ engines: {node: '>=16'}
1781
+
1782
yauzl@3.4.0:
1783
resolution: {integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==}
1784
engines: {node: '>=12'}
@@ -1723,6 +1888,22 @@ snapshots:
1888
1889
'@babel/helper-validator-identifier@7.29.7': {}
1890
1891
+ '@emnapi/core@1.11.1':
1892
+ dependencies:
1893
+ '@emnapi/wasi-threads': 1.2.2
1894
+ tslib: 2.8.1
1895
+ optional: true
1896
+
1897
+ '@emnapi/runtime@1.11.1':
1898
+ dependencies:
1899
+ tslib: 2.8.1
1900
+ optional: true
1901
+
1902
+ '@emnapi/wasi-threads@1.2.2':
1903
+ dependencies:
1904
+ tslib: 2.8.1
1905
+ optional: true
1906
+
1907
'@esbuild/aix-ppc64@0.20.2':
1908
optional: true
1909
@@ -1827,6 +2008,74 @@ snapshots:
2008
2009
'@humanwhocodes/object-schema@2.0.3': {}
2010
2011
+ '@napi-rs/wasm-runtime@0.2.12':
2012
+ dependencies:
2013
+ '@emnapi/core': 1.11.1
2014
+ '@emnapi/runtime': 1.11.1
2015
+ '@tybys/wasm-util': 0.10.3
2016
+ optional: true
2017
+
2018
+ '@node-rs/crc32-android-arm-eabi@1.10.6':
2019
+ optional: true
2020
+
2021
+ '@node-rs/crc32-android-arm64@1.10.6':
2022
+ optional: true
2023
+
2024
+ '@node-rs/crc32-darwin-arm64@1.10.6':
2025
+ optional: true
2026
+
2027
+ '@node-rs/crc32-darwin-x64@1.10.6':
2028
+ optional: true
2029
+
2030
+ '@node-rs/crc32-freebsd-x64@1.10.6':
2031
+ optional: true
2032
+
2033
+ '@node-rs/crc32-linux-arm-gnueabihf@1.10.6':
2034
+ optional: true
2035
+
2036
+ '@node-rs/crc32-linux-arm64-gnu@1.10.6':
2037
+ optional: true
2038
+
2039
+ '@node-rs/crc32-linux-arm64-musl@1.10.6':
2040
+ optional: true
2041
+
2042
+ '@node-rs/crc32-linux-x64-gnu@1.10.6':
2043
+ optional: true
2044
+
2045
+ '@node-rs/crc32-linux-x64-musl@1.10.6':
2046
+ optional: true
2047
+
2048
+ '@node-rs/crc32-wasm32-wasi@1.10.6':
2049
+ dependencies:
2050
+ '@napi-rs/wasm-runtime': 0.2.12
2051
+ optional: true
2052
+
2053
+ '@node-rs/crc32-win32-arm64-msvc@1.10.6':
2054
+ optional: true
2055
+
2056
+ '@node-rs/crc32-win32-ia32-msvc@1.10.6':
2057
+ optional: true
2058
+
2059
+ '@node-rs/crc32-win32-x64-msvc@1.10.6':
2060
+ optional: true
2061
+
2062
+ '@node-rs/crc32@1.10.6':
2063
+ optionalDependencies:
2064
+ '@node-rs/crc32-android-arm-eabi': 1.10.6
2065
+ '@node-rs/crc32-android-arm64': 1.10.6
2066
+ '@node-rs/crc32-darwin-arm64': 1.10.6
2067
+ '@node-rs/crc32-darwin-x64': 1.10.6
2068
+ '@node-rs/crc32-freebsd-x64': 1.10.6
2069
+ '@node-rs/crc32-linux-arm-gnueabihf': 1.10.6
2070
+ '@node-rs/crc32-linux-arm64-gnu': 1.10.6
2071
+ '@node-rs/crc32-linux-arm64-musl': 1.10.6
2072
+ '@node-rs/crc32-linux-x64-gnu': 1.10.6
2073
+ '@node-rs/crc32-linux-x64-musl': 1.10.6
2074
+ '@node-rs/crc32-wasm32-wasi': 1.10.6
2075
+ '@node-rs/crc32-win32-arm64-msvc': 1.10.6
2076
+ '@node-rs/crc32-win32-ia32-msvc': 1.10.6
2077
+ '@node-rs/crc32-win32-x64-msvc': 1.10.6
2078
+
2079
'@nodelib/fs.scandir@2.1.5':
2080
dependencies:
2081
'@nodelib/fs.stat': 2.0.5
@@ -1944,6 +2193,11 @@ snapshots:
2193
dependencies:
2194
'@textlint/ast-node-types': 15.7.1
2195
2196
+ '@tybys/wasm-util@0.10.3':
2197
+ dependencies:
2198
+ tslib: 2.8.1
2199
+ optional: true
2200
+
2201
'@types/node@20.19.43':
2202
dependencies:
2203
undici-types: 6.21.0
@@ -2265,6 +2519,8 @@ snapshots:
2519
chownr@1.1.4:
2520
optional: true
2521
2522
+ ci-info@2.0.0: {}
2523
+
2524
cockatiel@3.2.1: {}
2525
2526
color-convert@2.0.1:
@@ -2279,6 +2535,8 @@ snapshots:
2535
2536
commander@12.1.0: {}
2537
2538
+ commander@6.2.1: {}
2539
+
2540
concat-map@0.0.1: {}
2541
2542
cross-spawn@7.0.6:
@@ -2318,8 +2576,20 @@ snapshots:
2576
bundle-name: 4.1.0
2577
default-browser-id: 5.0.1
2578
2579
+ define-data-property@1.1.4:
2580
+ dependencies:
2581
+ es-define-property: 1.0.1
2582
+ es-errors: 1.3.0
2583
+ gopd: 1.2.0
2584
+
2585
define-lazy-prop@3.0.0: {}
2586
2587
+ define-properties@1.2.1:
2588
+ dependencies:
2589
+ define-data-property: 1.1.4
2590
+ has-property-descriptors: 1.0.2
2591
+ object-keys: 1.1.1
2592
+
2593
delayed-stream@1.0.0: {}
2594
2595
detect-libc@2.1.2:
@@ -2540,6 +2810,8 @@ snapshots:
2810
2811
flatted@3.4.2: {}
2812
2813
+ follow-redirects@1.16.0: {}
2814
+
2815
form-data@4.0.6:
2816
dependencies:
2817
asynckit: 0.4.0
@@ -2609,6 +2881,11 @@ snapshots:
2881
dependencies:
2882
type-fest: 0.20.2
2883
2884
+ globalthis@1.0.4:
2885
+ dependencies:
2886
+ define-properties: 1.2.1
2887
+ gopd: 1.2.0
2888
+
2889
globby@11.1.0:
2890
dependencies:
2891
array-union: 2.1.0
@@ -2635,6 +2912,10 @@ snapshots:
2912
2913
has-flag@4.0.0: {}
2914
2915
+ has-property-descriptors@1.0.2:
2916
+ dependencies:
2917
+ es-define-property: 1.0.1
2918
+
2919
has-symbols@1.1.0: {}
2920
2921
has-tostringtag@1.0.2:
@@ -2704,6 +2985,10 @@ snapshots:
2985
ini@1.3.8:
2986
optional: true
2987
2988
+ is-ci@2.0.0:
2989
+ dependencies:
2990
+ ci-info: 2.0.0
2991
+
2992
is-docker@3.0.0: {}
2993
2994
is-extglob@2.1.1: {}
@@ -2718,6 +3003,10 @@ snapshots:
3003
dependencies:
3004
is-docker: 3.0.0
3005
3006
+ is-it-type@5.1.3:
3007
+ dependencies:
3008
+ globalthis: 1.0.4
3009
+
3010
is-number@7.0.0: {}
3011
3012
is-path-inside@3.0.3: {}
@@ -2920,6 +3209,8 @@ snapshots:
3209
3210
object-inspect@1.13.4: {}
3211
3212
+ object-keys@1.1.1: {}
3213
+
3214
once@1.4.0:
3215
dependencies:
3216
wrappy: 1.0.2
@@ -2940,6 +3231,20 @@ snapshots:
3231
type-check: 0.4.0
3232
word-wrap: 1.2.5
3233
3234
+ ovsx@1.0.2:
3235
+ dependencies:
3236
+ '@vscode/vsce': 3.9.2
3237
+ commander: 6.2.1
3238
+ follow-redirects: 1.16.0
3239
+ is-ci: 2.0.0
3240
+ leven: 3.1.0
3241
+ semver: 7.8.5
3242
+ tmp: 0.2.7
3243
+ yauzl-promise: 4.0.0
3244
+ transitivePeerDependencies:
3245
+ - debug
3246
+ - supports-color
3247
+
3248
p-limit@3.1.0:
3249
dependencies:
3250
yocto-queue: 0.1.0
@@ -3155,6 +3460,8 @@ snapshots:
3460
simple-concat: 1.0.1
3461
optional: true
3462
3463
+ simple-invariant@2.0.1: {}
3464
+
3465
slash@3.0.0: {}
3466
3467
slash@5.1.0: {}
@@ -3344,6 +3651,12 @@ snapshots:
3651
3652
yallist@4.0.0: {}
3653
3654
+ yauzl-promise@4.0.0:
3655
+ dependencies:
3656
+ '@node-rs/crc32': 1.10.6
3657
+ is-it-type: 5.1.3
3658
+ simple-invariant: 2.0.1
3659
+
3660
yauzl@3.4.0:
3661
dependencies:
3662
pend: 1.2.0