"packageManager": "pnpm@9.12.3",
"type": "module",
"scripts": {
- "dev": "node scripts/dev.js vue runtime-vapor",
+ "dev": "node scripts/dev.js",
"build": "node scripts/build.js",
"build-dts": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js",
"clean": "rimraf --glob packages/*/dist temp .eslintcache",
"size": "run-s \"size-*\" && node scripts/usage-size.js",
- "size-global": "node scripts/build.js vue runtime-vapor runtime-dom runtime-vapor compiler-dom -f global -p --size",
+ "size-global": "node scripts/build.js vue runtime-dom compiler-dom -f global -p --size",
"size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime",
- "size-esm": "node scripts/build.js runtime-shared runtime-dom runtime-vapor runtime-core reactivity shared runtime-vapor -f esm-bundler",
+ "size-esm": "node scripts/build.js runtime-shared runtime-dom runtime-core reactivity shared runtime-vapor -f esm-bundler",
"check": "tsc --incremental --noEmit",
"lint": "eslint --cache .",
"format": "prettier --write --cache .",
"format-check": "prettier --check --cache .",
"test": "vitest",
"test-unit": "vitest --project unit",
- "test-e2e": "node scripts/build.js vue runtime-vapor -f global -d && vitest --project e2e",
+ "test-e2e": "node scripts/build.js vue -f global -d && vitest --project e2e",
"test-dts": "run-s build-dts test-dts-only",
"test-dts-only": "tsc -p packages-private/dts-built-test/tsconfig.json && tsc -p ./packages-private/dts-test/tsconfig.test.json",
"test-coverage": "vitest run --project unit --coverage",
"dev-compiler": "run-p \"dev template-explorer\" serve open",
"dev-sfc": "run-s dev-prepare-cjs dev-sfc-run",
"dev-sfc-serve": "vite packages-private/sfc-playground",
- "dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime\" \"dev vue -ipf esm-browser-runtime\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
+ "dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if vapor\" \"dev vue -ipf vapor\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
"dev-vapor": "pnpm -C playground run dev",
"serve": "serve",
"open": "open http://localhost:3000/packages-private/template-explorer/local.html",
- "build-sfc-playground": "run-s build-all-cjs build-runtime-esm build-browser-esm build-ssr-esm build-sfc-playground-self",
+ "build-sfc-playground": "run-s build-all-cjs build-all-esm build-sfc-playground-self",
"build-all-cjs": "node scripts/build.js vue runtime compiler reactivity shared -af cjs",
- "build-runtime-esm": "node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js vue -f esm-browser-runtime",
- "build-browser-esm": "node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler && node scripts/build.js vue -f esm-browser",
- "build-ssr-esm": "node scripts/build.js compiler-sfc server-renderer runtime-vapor -f esm-browser",
+ "build-all-esm": "node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler,esm-browser,esm-bundler-runtime,esm-browser-runtime && node scripts/build.js compiler-sfc server-renderer -f esm-browser",
"build-sfc-playground-self": "cd packages-private/sfc-playground && npm run build",
"preinstall": "npx only-allow pnpm",
"postinstall": "simple-git-hooks"
type SFCOptions,
useStore,
useVueImportMap,
- mergeImportMap,
File,
StoreState,
- ImportMap,
} from '@vue/repl'
import Monaco from '@vue/repl/monaco-editor'
import { ref, watchEffect, onMounted, computed, watch } from 'vue'
)
const autoSave = ref(initAutoSave)
-const {
- vueVersion,
- productionMode,
- importMap: vueImportMap,
-} = useVueImportMap({
- runtimeDev: import.meta.env.PROD
- ? `${location.origin}/vue.runtime.esm-browser.js`
- : `${location.origin}/src/vue-dev-proxy`,
- runtimeProd: import.meta.env.PROD
- ? `${location.origin}/vue.runtime.esm-browser.prod.js`
- : `${location.origin}/src/vue-dev-proxy-prod`,
+const { vueVersion, productionMode, importMap } = useVueImportMap({
+ runtimeDev: () => {
+ return import.meta.env.PROD
+ ? useVaporMode.value
+ ? `${location.origin}/vue.runtime-with-vapor.esm-browser.js`
+ : `${location.origin}/vue.runtime.esm-browser.js`
+ : `${location.origin}/src/vue-dev-proxy`
+ },
+ runtimeProd: () => {
+ return import.meta.env.PROD
+ ? useVaporMode.value
+ ? `${location.origin}/vue.runtime-with-vapor.esm-browser.prod.js`
+ : `${location.origin}/vue.runtime.esm-browser.prod.js`
+ : `${location.origin}/src/vue-dev-proxy-prod`
+ },
serverRenderer: import.meta.env.PROD
? `${location.origin}/server-renderer.esm-browser.js`
: `${location.origin}/src/vue-server-renderer-dev-proxy`,
})
-const importMap = computed(() => {
- const vapor = import.meta.env.PROD
- ? `${location.origin}/vue-vapor.esm-browser.js`
- : `${location.origin}/src/vue-vapor-dev-proxy`
-
- const vaporImportMap: ImportMap = {
- imports: {
- 'vue/vapor': vapor,
- },
- }
-
- return mergeImportMap(vueImportMap.value, vaporImportMap)
-})
-
let hash = location.hash.slice(1)
if (hash.startsWith('__DEV__')) {
hash = hash.slice(7)
files.value['src/index.html'] = new File(
'src/index.html',
`<script type="module">
- import { createVaporApp } from 'vue/vapor'
+ import { createVaporApp } from 'vue'
import App from './App.vue'
createVaporApp(App).mount('#app')` +
'<' +
// serve vue to the iframe sandbox during dev.
-export * from 'vue/dist/vue.runtime.esm-browser.prod.js'
+export * from 'vue/dist/vue.runtime-with-vapor.esm-browser.prod.js'
// serve vue to the iframe sandbox during dev.
-export * from 'vue'
+export * from 'vue/dist/vue.runtime-with-vapor.esm-browser.js'
+++ /dev/null
-// serve vue/vapor to the iframe sandbox during dev.
-export * from 'vue/vapor'
copyFile(`vue/dist/vue.esm-browser.prod.js`)
copyFile(`vue/dist/vue.runtime.esm-browser.js`)
copyFile(`vue/dist/vue.runtime.esm-browser.prod.js`)
+ copyFile(`vue/dist/vue.runtime-with-vapor.esm-browser.js`)
+ copyFile(`vue/dist/vue.runtime-with-vapor.esm-browser.prod.js`)
copyFile(`server-renderer/dist/server-renderer.esm-browser.js`)
- copyFile(`vue-vapor/dist/vue-vapor.esm-browser.js`)
},
}
}
* @default 'vue'
*/
runtimeModuleName?: string
- /**
- * Customize where to import runtime helpers from.
- * @default 'vue/vapor'
- */
- vaporRuntimeModuleName?: string
/**
* Customize where to import ssr runtime helpers from/**
* @default 'vue/server-renderer'
const vueImportAliases: Record<string, string> = {}
for (const key in ctx.userImports) {
const { source, imported, local } = ctx.userImports[key]
- if (['vue', 'vue/vapor'].includes(source))
- vueImportAliases[imported] = local
+ if (source === 'vue') vueImportAliases[imported] = local
}
// 2.1 process normal <script> body
ctx.bindingMetadata[key] =
imported === '*' ||
(imported === 'default' && source.endsWith('.vue')) ||
- ['vue', 'vue/vapor'].includes(source)
+ source === 'vue'
? BindingTypes.SETUP_CONST
: BindingTypes.SETUP_MAYBE_REF
}
for (const key in allBindings) {
if (
allBindings[key] === true &&
- !['vue', 'vue/vapor'].includes(ctx.userImports[key].source) &&
+ ctx.userImports[key].source !== 'vue' &&
!ctx.userImports[key].source.endsWith('.vue')
) {
// generate getter for import bindings
ctx.s.prependLeft(
startOffset,
`\n${genDefaultAs} /*@__PURE__*/${ctx.helper(
- `defineComponent`,
- vapor,
+ vapor ? `defineVaporComponent` : `defineComponent`,
)}({${def}${runtimeOptions}\n ${
hasAwait ? `async ` : ``
}setup(${args}) {\n${exposeCall}`,
.join(', ')} } from ${importSrc}\n`,
)
}
- if (ctx.vaporHelperImports.size > 0) {
- ctx.s.prepend(
- `import { ${[...ctx.vaporHelperImports]
- .map(h => `${h} as _${h}`)
- .join(', ')} } from 'vue/vapor'\n`,
- )
- }
return {
...scriptSetup,
// codegen
bindingMetadata: BindingMetadata = {}
helperImports: Set<string> = new Set()
- vaporHelperImports: Set<string> = new Set()
- helper(key: string, vapor?: boolean): string {
- ;(vapor ? this.vaporHelperImports : this.helperImports).add(key)
+ helper(key: string): string {
+ this.helperImports.add(key)
return `_${key}`
}
scopeId: null,
runtimeGlobalName: `Vue`,
runtimeModuleName: `vue`,
- vaporRuntimeModuleName: 'vue/vapor',
ssrRuntimeModuleName: 'vue/server-renderer',
ssr: false,
isTS: false,
if (vaporHelpers.size) {
imports += `import { ${[...vaporHelpers]
.map(h => `${h} as _${h}`)
- .join(', ')} } from '${options.vaporRuntimeModuleName}';\n`
+ .join(', ')} } from 'vue';\n`
}
return imports
}
"buildOptions": {
"name": "VueRuntimeVapor",
"formats": [
- "esm-bundler",
- "esm-browser",
- "cjs",
- "global"
+ "esm-bundler"
]
},
"repository": {
import type { VaporComponent } from './component'
/*! #__NO_SIDE_EFFECTS__ */
-export function defineComponent(comp: VaporComponent): VaporComponent {
+export function defineVaporComponent(comp: VaporComponent): VaporComponent {
// TODO type inference
return comp
}
+// public APIs
+export { createVaporApp } from './apiCreateApp'
+export { defineVaporComponent } from './apiDefineComponent'
+
+// compiler-use only
export { createComponent, createComponentWithFallback } from './component'
export { renderEffect } from './renderEffect'
-export { createVaporApp } from './apiCreateApp'
-export { defineComponent } from './apiDefineComponent'
export { createSlot } from './componentSlots'
-
-// DOM
export { template, children, next } from './dom/template'
export { insert, prepend, remove, createTextNode } from './dom/node'
export { setStyle } from './dom/style'
} from './dom/prop'
export { on, delegate, delegateEvents, setDynamicEvents } from './dom/event'
export { setRef } from './dom/templateRef'
-
-// re-exports
-export { resolveComponent } from '@vue/runtime-dom'
"global",
"global-runtime",
"esm-browser",
- "esm-browser-runtime"
+ "esm-browser-runtime",
+ "vapor"
]
},
"repository": {
--- /dev/null
+export * from './runtime'
+export * from '@vue/runtime-vapor'
* @template {keyof T} K
* @typedef { Omit<T, K> & Required<Pick<T, K>> } MarkRequired
*/
-/** @typedef {'cjs' | 'esm-bundler' | 'global' | 'global-runtime' | 'esm-browser' | 'esm-bundler-runtime' | 'esm-browser-runtime'} PackageFormat */
+/** @typedef {'cjs' | 'esm-bundler' | 'global' | 'global-runtime' | 'esm-browser' | 'esm-bundler-runtime' | 'esm-browser-runtime' | 'vapor'} PackageFormat */
/** @typedef {MarkRequired<import('rollup').OutputOptions, 'file' | 'format'>} OutputOptions */
if (!process.env.TARGET) {
file: resolve(`dist/${name}.runtime.global.js`),
format: 'iife',
},
+ // The vapor format is a esm-browser + runtime only build that is meant for
+ // the SFC playground only.
+ vapor: {
+ file: resolve(`dist/${name}.runtime-with-vapor.esm-browser.js`),
+ format: 'es',
+ },
}
/** @type {ReadonlyArray<PackageFormat>} */
if (format === 'cjs') {
packageConfigs.push(createProductionConfig(format))
}
- if (/^(global|esm-browser)(-runtime)?/.test(format)) {
+ if (format === 'vapor' || /^(global|esm-browser)(-runtime)?/.test(format)) {
packageConfigs.push(createMinifiedConfig(format))
}
})
const isProductionBuild =
process.env.__DEV__ === 'false' || /\.prod\.js$/.test(output.file)
const isBundlerESMBuild = /esm-bundler/.test(format)
- const isBrowserESMBuild = /esm-browser/.test(format)
+ const isBrowserESMBuild = /esm-browser/.test(format) || format === 'vapor'
const isServerRenderer = name === 'server-renderer'
const isCJSBuild = format === 'cjs'
const isGlobalBuild = /global/.test(format)
output.name = packageOptions.name
}
- let entryFile = /\bruntime\b/.test(format) ? `runtime.ts` : `index.ts`
+ let entryFile =
+ format === 'vapor'
+ ? 'runtime-with-vapor.ts'
+ : /\bruntime\b/.test(format)
+ ? `runtime.ts`
+ : `index.ts`
// the compat build needs both default AND named exports. This will cause
// Rollup to complain for non-ESM targets, so we use separate entries for
? 'cjs'
: 'esm'
-const postfix = format.endsWith('-runtime')
- ? `runtime.${format.replace(/-runtime$/, '')}`
- : format
+const postfix =
+ format === 'vapor'
+ ? 'runtime-with-vapor.esm-browser'
+ : format.endsWith('-runtime')
+ ? `runtime.${format.replace(/-runtime$/, '')}`
+ : format
const privatePackages = fs.readdirSync('packages-private')
plugins.push(polyfillNode())
}
+ const entry =
+ format === 'vapor'
+ ? 'runtime-with-vapor.ts'
+ : format.endsWith('-runtime')
+ ? 'runtime.ts'
+ : 'index.ts'
+
esbuild
.context({
- entryPoints: [resolve(__dirname, `${pkgBasePath}/src/index.ts`)],
+ entryPoints: [resolve(__dirname, `${pkgBasePath}/src/${entry}`)],
outfile,
bundle: true,
external,