Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/publish-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,15 @@ jobs:
- name: Install dependencies
run: pnpm install

# The registry bridge rewrites dependencies by package name. Stamp core
# before pnpm pack so the dependency named `vite` already aliases the
# preview version. Keep the CLI manifest aligned with its built dist too.
- name: Set preview package versions
run: |
for package in cli core; do
pnpm exec json-edit "packages/$package/package.json" '_.version = process.env.VERSION'
done

- name: Download cli dist
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import assert from 'node:assert/strict';
import { createRequire } from 'node:module';

import * as vite from 'vite';
import { ModuleRunner } from 'vite/module-runner';
import * as vp from 'vite-plus';
import { ModuleRunner as VpModuleRunner } from 'vite-plus/module-runner';
import pkg from 'vite-plus/package.json' with { type: 'json' };

const require = createRequire(import.meta.url);
const cjsVite = require('vite');
const cjsVp = require('vite-plus');
for (const name of [
'createServer',
'DevEnvironment',
'mergeConfig',
'isRunnableDevEnvironment',
'isFetchableDevEnvironment',
]) {
assert.equal(vite[name], vp[name], name);
assert.equal(cjsVite[name], cjsVp[name], name);
assert.equal(vite[name], cjsVite[name], name);
}
assert.equal(ModuleRunner, VpModuleRunner);
const config = {};
assert.equal(vite.defineConfig(config), config);
assert.equal(pkg.dependencies.vite, `npm:@voidzero-dev/vite-plus-core@${pkg.version}`);
assert.equal(pkg.dependencies['@voidzero-dev/vite-plus-core'], undefined);
console.log('Packed alias, ESM, CommonJS, and module-runner identity passed');
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import assert from 'node:assert/strict';
import { createRequire } from 'node:module';

import { createServer } from 'vite-plus';
import { build } from 'vite-plus/pack';

const require = createRequire(import.meta.url);
const cliRequire = createRequire(require.resolve('vite-plus/package.json'));
assert.equal(createServer, cliRequire('vite').createServer);
assert.equal(build, cliRequire('vite/pack').build);
assert.equal(require('./package.json').devDependencies.vite, undefined);
console.log('Bundled APIs resolve without a project Vite dependency');
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const message = 'Core identity regression';
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { expect, test } from 'vite-plus/test';
import { createServer, isRunnableDevEnvironment } from 'vite-plus';

test('the public guard accepts an environment created by the bundled server', async () => {
const server = await createServer({ configFile: false, server: { middlewareMode: true } });
try {
expect(isRunnableDevEnvironment(server.environments.ssr)).toBe(true);
} finally {
await server.close();
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<!doctype html>
<title>Core identity regression</title>
<script type="module" src="/entry.js"></script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "core-module-identity",
"private": true,
"type": "module",
"packageManager": "bun@1.4.2",
"devDependencies": {
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
"vite-plus": "latest"
},
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@latest"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
[[case]]
name = "core_module_identity_bun"
vp = "global"
local-registry = true
steps = [
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
]

[[case]]
name = "core_module_identity_repackaged_version"
vp = "global"
local-registry = true
comment = "CI can stamp the package version after building the CLI. The resolver must compare installed manifests rather than an inlined build-time version."
steps = [
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
{ argv = ["vpt", "json-edit", "node_modules/vite-plus/package.json", "version", "0.0.0"], snapshot = false },
{ argv = ["vpt", "json-edit", "node_modules/vite-plus/package.json", "dependencies.vite", "npm:@voidzero-dev/vite-plus-core@0.0.0"], snapshot = false },
{ argv = ["vpt", "json-edit", "node_modules/vite/package.json", "version", "0.0.0"], snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
["vp", "build"],
["vp", "pack", "entry.js"],
]

[[case]]
name = "core_module_identity_yarn"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "json-edit", "package.json", "packageManager", "yarn@4.10.3"], snapshot = false },
{ argv = ["vpt", "json-edit", "package.json", "resolutions.vite", "npm:@voidzero-dev/vite-plus-core@latest"], snapshot = false },
{ argv = ["vpt", "write-file", ".yarnrc.yml", "nodeLinker: node-modules\nenableScripts: false\n"], snapshot = false },
{ argv = ["vp", "install"], timeout = 120000, snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
]

[[case]]
name = "core_module_identity_npm"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "json-edit", "package.json", "packageManager", "npm@11.11.0"], snapshot = false },
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
]

[[case]]
name = "core_module_identity_pnpm"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "json-edit", "package.json", "packageManager", "pnpm@11.24.0"], snapshot = false },
{ argv = ["vpt", "write-file", "pnpm-workspace.yaml", "overrides:\n vite: npm:@voidzero-dev/vite-plus-core@latest\nminimumReleaseAge: 0\n"], snapshot = false },
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
]

[[case]]
name = "core_module_identity_without_project_alias"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "write-file", "package.json", "{\"name\":\"core-module-identity\",\"private\":true,\"type\":\"module\",\"devDependencies\":{\"vite-plus\":\"latest\"},\"packageManager\":\"pnpm@11.24.0\"}\n"], snapshot = false },
{ argv = ["vpt", "write-file", "pnpm-workspace.yaml", "hoist: false\nminimumReleaseAge: 0\noverrides:\n vite: npm:@voidzero-dev/vite-plus-core@latest\n"], snapshot = false },
{ argv = ["vpt", "replace-file-content", "vite.config.ts", "from 'vite';", "from 'vite-plus';"], snapshot = false },
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
["node", "check-bundled.mjs"],
["vp", "dev"],
["vp", "build"],
["vp", "test", "run"],
["vp", "pack", "entry.js"],
]

[[case]]
name = "core_module_identity_pnpm_global_store"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "json-edit", "package.json", "packageManager", "pnpm@11.24.0"], snapshot = false },
{ argv = ["vpt", "write-file", "pnpm-workspace.yaml", "enableGlobalVirtualStore: true\noverrides:\n vite: npm:@voidzero-dev/vite-plus-core@latest\nminimumReleaseAge: 0\n"], snapshot = false },
{ argv = ["vp", "install", "--ignore-scripts"], snapshot = false },
["node", "check-api.mjs"],
["vp", "dev"],
]

[[case]]
name = "core_module_identity_pnpm_peer_contexts"
vp = "global"
local-registry = true
steps = [
{ argv = ["vpt", "json-edit", "package.json", "packageManager", "pnpm@11.24.0"], snapshot = false },
{ argv = ["vpt", "write-file", "pnpm-workspace.yaml", "packages:\n - packages/*\nresolvePeersFromWorkspaceRoot: false\noverrides:\n vite: npm:@voidzero-dev/vite-plus-core@latest\nminimumReleaseAge: 0\n"], snapshot = false },
{ argv = ["vpt", "write-file", "packages/a/package.json", "{\"name\":\"app-a\",\"private\":true,\"type\":\"module\",\"devDependencies\":{\"vite\":\"npm:@voidzero-dev/vite-plus-core@latest\",\"vite-plus\":\"latest\",\"@types/node\":\"22.20.1\"}}\n"], snapshot = false },
{ argv = ["vpt", "write-file", "packages/b/package.json", "{\"name\":\"app-b\",\"private\":true,\"type\":\"module\",\"devDependencies\":{\"vite\":\"npm:@voidzero-dev/vite-plus-core@latest\",\"vite-plus\":\"latest\",\"@types/node\":\"24.10.3\"}}\n"], snapshot = false },
{ argv = ["vpt", "cp", "check-api.mjs", "packages/a/check-api.mjs"], snapshot = false },
{ argv = ["vpt", "cp", "check-api.mjs", "packages/b/check-api.mjs"], snapshot = false },
{ argv = ["vpt", "cp", "vite.config.ts", "packages/a/vite.config.ts"], snapshot = false },
{ argv = ["vpt", "cp", "vite.config.ts", "packages/b/vite.config.ts"], snapshot = false },
{ argv = ["vp", "install", "--ignore-scripts"], timeout = 120000, snapshot = false },
{ argv = ["node", "check-api.mjs"], cwd = "packages/a" },
{ argv = ["vp", "dev"], cwd = "packages/a" },
{ argv = ["node", "check-api.mjs"], cwd = "packages/b" },
{ argv = ["vp", "dev"], cwd = "packages/b" },
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# core_module_identity_bun

## `vp install --ignore-scripts`


## `node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# core_module_identity_npm

## `vpt json-edit package.json packageManager npm@11.11.0`


## `vp install --ignore-scripts`


## `node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# core_module_identity_pnpm

## `vpt json-edit package.json packageManager pnpm@11.24.0`


## `vpt write-file pnpm-workspace.yaml 'overrides:
vite: npm:@voidzero-dev/vite-plus-core@latest
minimumReleaseAge: 0
'`


## `vp install --ignore-scripts`


## `node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# core_module_identity_pnpm_global_store

## `vpt json-edit package.json packageManager pnpm@11.24.0`


## `vpt write-file pnpm-workspace.yaml 'enableGlobalVirtualStore: true
overrides:
vite: npm:@voidzero-dev/vite-plus-core@latest
minimumReleaseAge: 0
'`


## `vp install --ignore-scripts`


## `node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# core_module_identity_pnpm_peer_contexts

## `vpt json-edit package.json packageManager pnpm@11.24.0`


## `vpt write-file pnpm-workspace.yaml 'packages:
- packages/*
resolvePeersFromWorkspaceRoot: false
overrides:
vite: npm:@voidzero-dev/vite-plus-core@latest
minimumReleaseAge: 0
'`


## `vpt write-file packages/a/package.json '{"name":"app-a","private":true,"type":"module","devDependencies":{"vite":"npm:@voidzero-dev/vite-plus-core@latest","vite-plus":"latest","@types/node":"22.20.1"}}
'`


## `vpt write-file packages/b/package.json '{"name":"app-b","private":true,"type":"module","devDependencies":{"vite":"npm:@voidzero-dev/vite-plus-core@latest","vite-plus":"latest","@types/node":"24.10.3"}}
'`


## `vpt cp check-api.mjs packages/a/check-api.mjs`


## `vpt cp check-api.mjs packages/b/check-api.mjs`


## `vpt cp vite.config.ts packages/a/vite.config.ts`


## `vpt cp vite.config.ts packages/b/vite.config.ts`


## `vp install --ignore-scripts`


## `cd packages/a && node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `cd packages/a && vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```

## `cd packages/b && node check-api.mjs`

```
Packed alias, ESM, CommonJS, and module-runner identity passed
```

## `cd packages/b && vp dev`

```

VITE+ <version>

➜ Local: http://127.0.0.1:<port>/
➜ press h + enter to show help
SSR environment identity and HTTP response passed
```
Loading
Loading