diff --git a/apps/resolver/package.json b/apps/resolver/package.json index 2e2a9d4..45cb8c7 100644 --- a/apps/resolver/package.json +++ b/apps/resolver/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "dev": "wrangler dev", + "dev": "portless resolver sh -c 'wrangler dev --port $PORT'", "deploy": "wrangler deploy", "test": "vitest run", "test:watch": "vitest" diff --git a/examples/js/package.json b/examples/js/package.json index 6f6fb65..433b91b 100644 --- a/examples/js/package.json +++ b/examples/js/package.json @@ -2,7 +2,7 @@ "name": "@experiences/example-js", "private": true, "scripts": { - "dev": "vite", + "dev": "PORTLESS_NAME=example-js portless example-js vite", "build": "vite build", "preview": "vite preview" }, diff --git a/examples/js/vite.config.js b/examples/js/vite.config.js index a9fd40c..b5479dd 100644 --- a/examples/js/vite.config.js +++ b/examples/js/vite.config.js @@ -38,6 +38,11 @@ function resolveFile(urlPath) { const pages = ['index.html', 'search.html', 'product.html']; export default { + server: { + host: '127.0.0.1', + port: process.env.PORT ? Number(process.env.PORT) : undefined, + strictPort: Boolean(process.env.PORT), + }, build: { rollupOptions: { input: Object.fromEntries( @@ -46,6 +51,18 @@ export default { }, }, plugins: [ + { + name: 'portless-url', + configureServer(server) { + const name = process.env.PORTLESS_NAME; + if (!name) return; + const port = process.env.PORTLESS_PORT || 1355; + server.printUrls = () => { + const url = `http://${name}.localhost:${port}/`; + server.config.logger.info(` ➜ Portless: ${url}`); + }; + }, + }, { name: 'local-canary-proxy', // Rewrite GitHub canary URLs to a local prefix so Vite serves them. diff --git a/examples/react/package.json b/examples/react/package.json index 8a6f761..05e9352 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -2,7 +2,7 @@ "name": "@experiences/example-react", "private": true, "scripts": { - "dev": "vite", + "dev": "PORTLESS_NAME=example-react portless example-react vite", "build": "vite build", "preview": "vite preview" }, diff --git a/examples/react/vite.config.ts b/examples/react/vite.config.ts index 146fc22..1c6693f 100644 --- a/examples/react/vite.config.ts +++ b/examples/react/vite.config.ts @@ -2,7 +2,26 @@ import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [react()], + server: { + host: '127.0.0.1', + port: process.env.PORT ? Number(process.env.PORT) : undefined, + strictPort: Boolean(process.env.PORT), + }, + plugins: [ + { + name: 'portless-url', + configureServer(server) { + const name = process.env.PORTLESS_NAME; + if (!name) return; + const port = process.env.PORTLESS_PORT || 1355; + server.printUrls = () => { + const url = `http://${name}.localhost:${port}/`; + server.config.logger.info(` ➜ Portless: ${url}`); + }; + }, + }, + react(), + ], build: { outDir: 'build', }, diff --git a/package-lock.json b/package-lock.json index a612f44..e05dee0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "husky": "^9.1.7", "lint-staged": "^16.2.7", "oxlint": "^1.43.0", + "portless": "^0.4.0", "prettier": "^3.7.4", "turbo": "^2.8.3", "typescript": "5.9.2" @@ -4456,6 +4457,19 @@ "node": ">=18" } }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/check-error": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", @@ -6420,6 +6434,26 @@ "node": ">=0.10" } }, + "node_modules/portless": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/portless/-/portless-0.4.0.tgz", + "integrity": "sha512-CW3ERwHux/9VNrnvaSXa4sCtNlY300b5sUh6A52IBkpYMfJm7dMS4NipRVaSMFwyLAwFSp+OxGxpRD0zItiBWg==", + "dev": true, + "license": "Apache-2.0", + "os": [ + "darwin", + "linux" + ], + "dependencies": { + "chalk": "^5.3.0" + }, + "bin": { + "portless": "dist/cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", diff --git a/package.json b/package.json index 7d5a8c6..75c3737 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "husky": "^9.1.7", "lint-staged": "^16.2.7", "oxlint": "^1.43.0", + "portless": "^0.4.0", "prettier": "^3.7.4", "turbo": "^2.8.3", "typescript": "5.9.2"