Socket
Socket
Sign inDemoInstall

vue-loader

Package Overview
Dependencies
Maintainers
2
Versions
304
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vue-loader - npm Package Compare versions

Comparing version 15.10.0-beta.1 to 15.10.0-beta.2

lib/descriptorCache.js

6

.eslintrc.js
module.exports = {
root: true,
extends: ['plugin:vue-libs/recommended']
extends: ['plugin:vue-libs/recommended'],
rules: {
indent: 'off',
'space-before-function-paren': 'off'
}
}

16

CHANGELOG.md

@@ -1,3 +0,3 @@

<a name="15.10.0-beta.1"></a>
# [15.10.0-beta.1](https://github.com/vuejs/vue-loader/compare/v15.9.8...v15.10.0-beta.1) (2022-06-14)
<a name="15.10.0-beta.2"></a>
# [15.10.0-beta.2](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.1...v15.10.0-beta.2) (2022-06-16)

@@ -7,14 +7,14 @@

* apply js loaders to compiled template code when used with 2.7 ([30464a8](https://github.com/vuejs/vue-loader/commit/30464a8))
* compat for vue 2.7, support `<script setup>` ([308715a](https://github.com/vuejs/vue-loader/commit/308715a))
* use script-analyzed bindings when compiling template ([55de28c](https://github.com/vuejs/vue-loader/commit/55de28c))
<a name="15.9.8"></a>
## [15.9.8](https://github.com/vuejs/vue-loader/compare/v15.9.7...v15.9.8) (2021-08-02)
<a name="15.10.0-beta.1"></a>
# [15.10.0-beta.1](https://github.com/vuejs/vue-loader/compare/v15.9.8...v15.10.0-beta.1) (2022-06-14)
### Bug Fixes
### Features
* fix webpack 5.48 compatibility ([c4c5f17](https://github.com/vuejs/vue-loader/commit/c4c5f17)), closes [#1859](https://github.com/vuejs/vue-loader/issues/1859)
* apply js loaders to compiled template code when used with 2.7 ([30464a8](https://github.com/vuejs/vue-loader/commit/30464a8))
* compat for vue 2.7, support `<script setup>` ([308715a](https://github.com/vuejs/vue-loader/commit/308715a))

@@ -21,0 +21,0 @@

const qs = require('querystring')
const { attrsToQuery } = require('./utils')
module.exports = function genCustomBlocksCode (
module.exports = function genCustomBlocksCode(
blocks,

@@ -10,13 +10,23 @@ resourcePath,

) {
return `\n/* custom blocks */\n` + blocks.map((block, i) => {
const src = block.attrs.src || resourcePath
const attrsQuery = attrsToQuery(block.attrs)
const issuerQuery = block.attrs.src ? `&issuerPath=${qs.escape(resourcePath)}` : ''
const inheritQuery = resourceQuery ? `&${resourceQuery.slice(1)}` : ''
const query = `?vue&type=custom&index=${i}&blockType=${qs.escape(block.type)}${issuerQuery}${attrsQuery}${inheritQuery}`
return (
`import block${i} from ${stringifyRequest(src + query)}\n` +
`if (typeof block${i} === 'function') block${i}(component)`
)
}).join(`\n`) + `\n`
return (
`\n/* custom blocks */\n` +
blocks
.map((block, i) => {
const src = block.attrs.src || resourcePath
const attrsQuery = attrsToQuery(block.attrs)
const issuerQuery = block.attrs.src
? `&issuerPath=${qs.escape(resourcePath)}`
: ''
const inheritQuery = resourceQuery ? `&${resourceQuery.slice(1)}` : ''
const query = `?vue&type=custom&index=${i}&blockType=${qs.escape(
block.type
)}${issuerQuery}${attrsQuery}${inheritQuery}`
return (
`import block${i} from ${stringifyRequest(src + query)}\n` +
`if (typeof block${i} === 'function') block${i}(component)`
)
})
.join(`\n`) +
`\n`
)
}

@@ -5,3 +5,3 @@ const { attrsToQuery } = require('./utils')

module.exports = function genStyleInjectionCode (
module.exports = function genStyleInjectionCode(
loaderContext,

@@ -22,3 +22,3 @@ styles,

function genStyleRequest (style, i) {
function genStyleRequest(style, i) {
const src = style.src || resourcePath

@@ -34,3 +34,3 @@ const attrsQuery = attrsToQuery(style.attrs, 'css')

function genCSSModulesCode (style, request, i) {
function genCSSModulesCode(style, request, i) {
hasCSSModules = true

@@ -77,3 +77,4 @@

// empty styles: with no `src` specified or only contains whitespaces
const isNotEmptyStyle = style => style.src || nonWhitespaceRE.test(style.content)
const isNotEmptyStyle = (style) =>
style.src || nonWhitespaceRE.test(style.content)
// explicit injection is needed in SSR (for critical CSS collection)

@@ -96,6 +97,5 @@ // or in Shadow Mode (for injection into shadow root)

const request = genStyleRequest(style, i)
styleInjectionCode += (
styleInjectionCode +=
`var style${i} = require(${request})\n` +
`if (style${i}.__inject__) style${i}.__inject__(context)\n`
)
if (style.module) genCSSModulesCode(style, request, i)

@@ -120,7 +120,11 @@ }

${needsHotReload ? `
${
needsHotReload
? `
module.hot && module.hot.dispose(function (data) {
disposed = true
})
` : ``}
`
: ``
}

@@ -127,0 +131,0 @@ ${cssModulesHotReloadCode}

@@ -5,8 +5,3 @@ const qs = require('querystring')

// if the user happen to add them as attrs
const ignoreList = [
'id',
'index',
'src',
'type'
]
const ignoreList = ['id', 'index', 'src', 'type']

@@ -13,0 +8,0 @@ // transform the attrs on a SFC block descriptor into a resourceQuery string

@@ -29,3 +29,3 @@ // resolve compilers to use.

function loadFromContext (path, ctx) {
function loadFromContext(path, ctx) {
return require(require.resolve(path, {

@@ -36,3 +36,3 @@ paths: [ctx]

function loadTemplateCompiler (ctx, loaderContext) {
function loadTemplateCompiler(ctx, loaderContext) {
try {

@@ -39,0 +39,0 @@ return loadFromContext('vue-template-compiler', ctx)

@@ -14,2 +14,3 @@ const path = require('path')

const { resolveCompiler } = require('./compiler')
const { setDescriptor } = require('./descriptorCache')

@@ -31,3 +32,3 @@ let errorEmitted = false

const stringifyRequest = r => loaderUtils.stringifyRequest(loaderContext, r)
const stringifyRequest = (r) => loaderUtils.stringifyRequest(loaderContext, r)

@@ -57,6 +58,3 @@ const {

const { compiler, templateCompiler } = resolveCompiler(
rootContext,
loaderContext
)
const { compiler, templateCompiler } = resolveCompiler(context, loaderContext)

@@ -71,2 +69,5 @@ const descriptor = compiler.parse({

// cache descriptor
setDescriptor(filename, descriptor)
// if the query has a type field, this is a language block request

@@ -99,3 +100,3 @@ // e.g. foo.vue?type=template&id=xxxxx

// feature information
const hasScoped = descriptor.styles.some(s => s.scoped)
const hasScoped = descriptor.styles.some((s) => s.scoped)
const hasFunctional =

@@ -102,0 +103,0 @@ descriptor.template && descriptor.template.attrs.functional

@@ -9,14 +9,14 @@ const qs = require('querystring')

const isESLintLoader = l => /(\/|\\|@)eslint-loader/.test(l.path)
const isNullLoader = l => /(\/|\\|@)null-loader/.test(l.path)
const isCSSLoader = l => /(\/|\\|@)css-loader/.test(l.path)
const isCacheLoader = l => /(\/|\\|@)cache-loader/.test(l.path)
const isPitcher = l => l.path !== __filename
const isPreLoader = l => !l.pitchExecuted
const isPostLoader = l => l.pitchExecuted
const isESLintLoader = (l) => /(\/|\\|@)eslint-loader/.test(l.path)
const isNullLoader = (l) => /(\/|\\|@)null-loader/.test(l.path)
const isCSSLoader = (l) => /(\/|\\|@)css-loader/.test(l.path)
const isCacheLoader = (l) => /(\/|\\|@)cache-loader/.test(l.path)
const isPitcher = (l) => l.path !== __filename
const isPreLoader = (l) => !l.pitchExecuted
const isPostLoader = (l) => l.pitchExecuted
const dedupeESLintLoader = loaders => {
const dedupeESLintLoader = (loaders) => {
const res = []
let seen = false
loaders.forEach(l => {
loaders.forEach((l) => {
if (!isESLintLoader(l)) {

@@ -32,4 +32,4 @@ res.push(l)

const shouldIgnoreCustomBlock = loaders => {
const actualLoaders = loaders.filter(loader => {
const shouldIgnoreCustomBlock = (loaders) => {
const actualLoaders = loaders.filter((loader) => {
// vue-loader

@@ -50,3 +50,3 @@ if (loader.path === selfPath) {

module.exports = code => code
module.exports = (code) => code

@@ -68,3 +68,3 @@ // This pitching loader is responsible for intercepting all vue block requests

if (/\.vue$/.test(this.resourcePath)) {
loaders = loaders.filter(l => !isESLintLoader(l))
loaders = loaders.filter((l) => !isESLintLoader(l))
} else {

@@ -85,3 +85,3 @@ // This is a src import. Just make sure there's not more than 1 instance

const genRequest = loaders => {
const genRequest = (loaders) => {
// Important: dedupe since both the original rule

@@ -98,3 +98,3 @@ // and the cloned rule would match a source import request.

loaders.forEach(loader => {
loaders.forEach((loader) => {
const identifier =

@@ -142,13 +142,13 @@ typeof loader === 'string' ? loader : loader.path + loader.query

? [
`${require.resolve('cache-loader')}?${JSON.stringify({
// For some reason, webpack fails to generate consistent hash if we
// use absolute paths here, even though the path is only used in a
// comment. For now we have to ensure cacheDirectory is a relative path.
cacheDirectory: (path.isAbsolute(cacheDirectory)
? path.relative(process.cwd(), cacheDirectory)
: cacheDirectory
).replace(/\\/g, '/'),
cacheIdentifier: hash(cacheIdentifier) + '-vue-loader-template'
})}`
]
`${require.resolve('cache-loader')}?${JSON.stringify({
// For some reason, webpack fails to generate consistent hash if we
// use absolute paths here, even though the path is only used in a
// comment. For now we have to ensure cacheDirectory is a relative path.
cacheDirectory: (path.isAbsolute(cacheDirectory)
? path.relative(process.cwd(), cacheDirectory)
: cacheDirectory
).replace(/\\/g, '/'),
cacheIdentifier: hash(cacheIdentifier) + '-vue-loader-template'
})}`
]
: []

@@ -155,0 +155,0 @@

const qs = require('querystring')
const loaderUtils = require('loader-utils')
const { resolveCompiler } = require('../compiler')
const { getDescriptor } = require('../descriptorCache')
const { resolveScript } = require('../resolveScript')

@@ -10,2 +12,4 @@ // Loader that compiles raw template into JavaScript functions.

const loaderContext = this
const filename = this.resourcePath
const ctx = this.rootContext
const query = qs.parse(this.resourceQuery.slice(1))

@@ -36,7 +40,7 @@

const { compiler, templateCompiler } = resolveCompiler(
loaderContext.rootContext,
loaderContext
)
const { compiler, templateCompiler } = resolveCompiler(ctx, loaderContext)
const descriptor = getDescriptor(filename, options, loaderContext)
const script = resolveScript(descriptor, options, loaderContext)
// for vue/compiler-sfc OR @vue/component-compiler-utils

@@ -54,3 +58,4 @@ const finalOptions = {

optimizeSSR: isServer && options.optimizeSSR !== false,
prettify: options.prettify
prettify: options.prettify,
bindings: script ? script.bindings : undefined
}

@@ -62,3 +67,3 @@

if (compiled.tips && compiled.tips.length) {
compiled.tips.forEach(tip => {
compiled.tips.forEach((tip) => {
loaderContext.emitWarning(typeof tip === 'object' ? tip.msg : tip)

@@ -90,3 +95,3 @@ })

`\n Error compiling template:\n${pad(compiled.source)}\n` +
compiled.errors.map(e => ` - ${e}`).join('\n') +
compiled.errors.map((e) => ` - ${e}`).join('\n') +
'\n'

@@ -103,7 +108,7 @@ )

function pad (source) {
function pad(source) {
return source
.split(/\r?\n/)
.map(line => ` ${line}`)
.map((line) => ` ${line}`)
.join('\n')
}

@@ -9,9 +9,9 @@ const qs = require('querystring')

class VueLoaderPlugin {
apply (compiler) {
apply(compiler) {
// add NS marker so that the loader can detect and report missing plugin
if (compiler.hooks) {
// webpack 4
compiler.hooks.compilation.tap(id, compilation => {
compiler.hooks.compilation.tap(id, (compilation) => {
const normalModuleLoader = compilation.hooks.normalModuleLoader
normalModuleLoader.tap(id, loaderContext => {
normalModuleLoader.tap(id, (loaderContext) => {
loaderContext[NS] = true

@@ -22,4 +22,4 @@ })

// webpack < 4
compiler.plugin('compilation', compilation => {
compilation.plugin('normal-module-loader', loaderContext => {
compiler.plugin('compilation', (compilation) => {
compilation.plugin('normal-module-loader', (loaderContext) => {
loaderContext[NS] = true

@@ -57,3 +57,3 @@ })

// get vue-loader options
const vueLoaderUseIndex = vueUse.findIndex(u => {
const vueLoaderUseIndex = vueUse.findIndex((u) => {
return /^vue-loader|(\/|\\|@)vue-loader/.test(u.loader)

@@ -78,3 +78,3 @@ })

// that targets the corresponding language blocks in *.vue files.
const clonedRules = rules.filter(r => r !== vueRule).map(cloneRule)
const clonedRules = rules.filter((r) => r !== vueRule).map(cloneRule)

@@ -84,3 +84,3 @@ // rule for template compiler

loader: require.resolve('./loaders/templateLoader'),
resourceQuery: query => {
resourceQuery: (query) => {
const parsed = qs.parse(query.slice(1))

@@ -102,3 +102,3 @@ return parsed.vue != null && parsed.type === 'template'

jsRulesForRenderFn = rules
.filter(r => r !== vueRule && matchesJS(r))
.filter((r) => r !== vueRule && matchesJS(r))
.map(cloneRuleForRenderFn)

@@ -111,3 +111,3 @@ }

loader: require.resolve('./loaders/pitcher'),
resourceQuery: query => {
resourceQuery: (query) => {
const parsed = qs.parse(query.slice(1))

@@ -133,3 +133,3 @@ return parsed.vue != null

function createMatcher (fakeFile) {
function createMatcher(fakeFile) {
return (rule, i) => {

@@ -144,3 +144,3 @@ // #1201 we need to skip the `include` check when locating the vue rule

function cloneRule (rule) {
function cloneRule(rule) {
const { resource, resourceQuery } = rule

@@ -155,3 +155,3 @@ // Assuming `test` and `resourceQuery` tests are executed in series and

resource: {
test: resource => {
test: (resource) => {
currentResource = resource

@@ -161,3 +161,3 @@ return true

},
resourceQuery: query => {
resourceQuery: (query) => {
const parsed = qs.parse(query.slice(1))

@@ -192,3 +192,3 @@ if (parsed.vue == null) {

function cloneRuleForRenderFn (rule) {
function cloneRuleForRenderFn(rule) {
const resource = rule.resource

@@ -199,7 +199,7 @@ const resourceQuery = rule.resourceQuery

...rule,
resource: resource => {
resource: (resource) => {
currentResource = resource
return true
},
resourceQuery: query => {
resourceQuery: (query) => {
const parsed = qs.parse(query.slice(1))

@@ -206,0 +206,0 @@ if (parsed.vue == null || parsed.type !== 'template') {

@@ -46,3 +46,3 @@ const { resolveCompiler } = require('./compiler')

class VueLoaderPlugin {
apply (compiler) {
apply(compiler) {
const normalModule = compiler.webpack

@@ -52,6 +52,6 @@ ? compiler.webpack.NormalModule

// add NS marker so that the loader can detect and report missing plugin
compiler.hooks.compilation.tap(id, compilation => {
const normalModuleLoader = normalModule.getCompilationHooks(compilation)
.loader
normalModuleLoader.tap(id, loaderContext => {
compiler.hooks.compilation.tap(id, (compilation) => {
const normalModuleLoader =
normalModule.getCompilationHooks(compilation).loader
normalModuleLoader.tap(id, (loaderContext) => {
loaderContext[NS] = true

@@ -93,7 +93,7 @@ })

const vueUse = vueRules
.filter(rule => rule.type === 'use')
.map(rule => rule.value)
.filter((rule) => rule.type === 'use')
.map((rule) => rule.value)
// get vue-loader options
const vueLoaderUseIndex = vueUse.findIndex(u => {
const vueLoaderUseIndex = vueUse.findIndex((u) => {
return /^vue-loader|(\/|\\|@)vue-loader/.test(u.loader)

@@ -120,4 +120,4 @@ })

const clonedRules = rules
.filter(r => r !== rawVueRule)
.map(rawRule =>
.filter((r) => r !== rawVueRule)
.map((rawRule) =>
cloneRule(rawRule, refs, langBlockRuleCheck, langBlockRuleResource)

@@ -134,3 +134,3 @@ )

loader: require.resolve('./loaders/templateLoader'),
resourceQuery: query => {
resourceQuery: (query) => {
if (!query) {

@@ -154,7 +154,7 @@ return false

.filter(
r =>
(r) =>
r !== rawVueRule &&
(match(r, 'test.js').length > 0 || match(r, 'test.ts').length > 0)
)
.map(rawRule => cloneRule(rawRule, refs, jsRuleCheck, jsRuleResource))
.map((rawRule) => cloneRule(rawRule, refs, jsRuleCheck, jsRuleResource))
}

@@ -166,3 +166,3 @@

loader: require.resolve('./loaders/pitcher'),
resourceQuery: query => {
resourceQuery: (query) => {
if (!query) {

@@ -193,3 +193,3 @@ return false

function match (rule, fakeFile) {
function match(rule, fakeFile) {
let ruleSet = matcherCache.get(rule)

@@ -218,3 +218,3 @@ if (!ruleSet) {

const jsRuleCheck = query => {
const jsRuleCheck = (query) => {
return query.type === 'template'

@@ -228,3 +228,3 @@ }

function cloneRule (rawRule, refs, ruleCheck, ruleResource) {
function cloneRule(rawRule, refs, ruleCheck, ruleResource) {
const compiledRule = ruleSetCompiler.compileRule(

@@ -239,4 +239,4 @@ `clonedRuleSet-${++uid}`,

const ruleUse = compiledRule.effects
.filter(effect => effect.type === 'use')
.map(effect => effect.value)
.filter((effect) => effect.type === 'use')
.map((effect) => effect.value)
// fix conflict with config.loader and config.options when using config.use

@@ -251,7 +251,7 @@ delete rawRule.loader

...rawRule,
resource: resources => {
resource: (resources) => {
currentResource = resources
return true
},
resourceQuery: query => {
resourceQuery: (query) => {
if (!query) {

@@ -284,3 +284,3 @@ return false

if (rawRule.rules) {
res.rules = rawRule.rules.map(rule =>
res.rules = rawRule.rules.map((rule) =>
cloneRule(rule, refs, ruleCheck, ruleResource)

@@ -291,3 +291,3 @@ )

if (rawRule.oneOf) {
res.oneOf = rawRule.oneOf.map(rule =>
res.oneOf = rawRule.oneOf.map((rule) =>
cloneRule(rule, refs, ruleCheck, ruleResource)

@@ -294,0 +294,0 @@ )

@@ -6,3 +6,3 @@ const { resolveCompiler } = require('./compiler')

exports.resolveScript = function resolveScript (
exports.resolveScript = function resolveScript(
descriptor,

@@ -9,0 +9,0 @@ options,

@@ -7,3 +7,3 @@ /* globals __VUE_SSR_CONTEXT__ */

export default function normalizeComponent (
export default function normalizeComponent(
scriptExports,

@@ -15,9 +15,8 @@ render,

scopeId,
moduleIdentifier, /* server only */
moduleIdentifier /* server only */,
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports.options
: scriptExports
var options =
typeof scriptExports === 'function' ? scriptExports.options : scriptExports

@@ -42,3 +41,4 @@ // render functions

var hook
if (moduleIdentifier) { // server build
if (moduleIdentifier) {
// server build
hook = function (context) {

@@ -69,7 +69,7 @@ // 2.3 injection

? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles

@@ -85,3 +85,3 @@ }

var originalRender = options.render
options.render = function renderWithStyleInjection (h, context) {
options.render = function renderWithStyleInjection(h, context) {
hook.call(context)

@@ -93,5 +93,3 @@ return originalRender(h, context)

var existing = options.beforeCreate
options.beforeCreate = existing
? [].concat(existing, hook)
: [hook]
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
}

@@ -98,0 +96,0 @@ }

const { resolveScript } = require('./resolveScript')
module.exports = function selectBlock (
module.exports = function selectBlock(
descriptor,

@@ -5,0 +5,0 @@ options,

{
"name": "vue-loader",
"version": "15.10.0-beta.1",
"version": "15.10.0-beta.2",
"description": "Vue single-file component loader for Webpack",

@@ -14,3 +14,3 @@ "main": "lib/index.js",

"docs:build": "vuepress build docs",
"prepublishOnly": "conventional-changelog -p angular -r 2 -i CHANGELOG.md -s"
"prepublishOnly": "conventional-changelog -p angular -r 1 -i CHANGELOG.md -s"
},

@@ -17,0 +17,0 @@ "author": "Evan You",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc