From d89071cae0f55fa0b44882f11630fc14dbc194f8 Mon Sep 17 00:00:00 2001 From: yoyo930021 Date: Sun, 19 Feb 2023 19:52:18 +0800 Subject: [PATCH] Basic support + + +`; + + test('Basic', () => { + const { regions } = parseVueDocumentRegions(TextDocument.create('test://test.vue', 'vue', 0, src)); + + assert.equal(regions[0].attrs['other'], true); + assert.equal(regions[0].attrs['other-string'], 'other'); + assert.equal(regions[1].attrs.setup, true); + assert.equal(regions[1].attrs.lang, 'ts'); + assert.equal(regions[2].attrs['lang'], 'scss'); + assert.equal(regions[2].attrs['scoped'], true); + assert.equal(regions[3].attrs['lang'], 'less'); + assert.equal(regions[3].attrs['module'], true); + }); +}); diff --git a/server/src/embeddedSupport/vueDocumentRegionParser.ts b/server/src/embeddedSupport/vueDocumentRegionParser.ts index bf7b5a28df..b74dd258d2 100644 --- a/server/src/embeddedSupport/vueDocumentRegionParser.ts +++ b/server/src/embeddedSupport/vueDocumentRegionParser.ts @@ -4,12 +4,16 @@ import { removeQuotes } from '../utils/strings'; import { LanguageId } from './embeddedSupport'; export type RegionType = 'template' | 'script' | 'style' | 'custom'; +export type RegionAttrKey = 'setup' | 'module' | 'scoped' | 'lang'; + +export type RegionAttrs = Partial> & Partial>; export interface EmbeddedRegion { languageId: LanguageId; start: number; end: number; type: RegionType; + attrs: RegionAttrs; } const defaultScriptLang = 'javascript'; @@ -22,6 +26,7 @@ export function parseVueDocumentRegions(document: TextDocument) { let lastTagName = ''; let lastAttributeName = ''; let languageIdFromType: LanguageId | '' = ''; + let attrs: Partial> = {}; const importedScripts: string[] = []; let stakes = 0; @@ -35,7 +40,8 @@ export function parseVueDocumentRegions(document: TextDocument) { : defaultCSSLang, start: scanner.getTokenOffset(), end: scanner.getTokenEnd(), - type: 'style' + type: 'style', + attrs }); languageIdFromType = ''; break; @@ -44,7 +50,8 @@ export function parseVueDocumentRegions(document: TextDocument) { languageId: languageIdFromType ? languageIdFromType : defaultScriptLang, start: scanner.getTokenOffset(), end: scanner.getTokenEnd(), - type: 'script' + type: 'script', + attrs }); languageIdFromType = ''; break; @@ -67,23 +74,24 @@ export function parseVueDocumentRegions(document: TextDocument) { break; case HtmlTokenType.AttributeName: lastAttributeName = scanner.getTokenText(); + attrs[lastAttributeName] = true; break; case HtmlTokenType.AttributeValue: + const attrValue = removeQuotes(scanner.getTokenText()); if (lastAttributeName === 'lang') { - languageIdFromType = getLanguageIdFromLangAttr(scanner.getTokenText()); + languageIdFromType = getLanguageIdFromLangAttr(attrValue); } else { if (lastAttributeName === 'src' && lastTagName.toLowerCase() === 'script') { - let value = scanner.getTokenText(); - if (value[0] === "'" || value[0] === '"') { - value = value.slice(1, value.length - 1); - } + const value = attrValue; importedScripts.push(value); } } + attrs[lastAttributeName] = attrValue; lastAttributeName = ''; break; case HtmlTokenType.StartTagSelfClose: case HtmlTokenType.EndTagClose: + attrs = {}; stakes--; lastAttributeName = ''; languageIdFromType = ''; @@ -104,6 +112,7 @@ function scanTemplateRegion(scanner: Scanner, text: string): EmbeddedRegion | nu let token = -1; let start = 0; let end: number; + const attrs: Partial> = {}; // Scan until finding matching template EndTag // Also record immediate next StartTagClose to find start @@ -138,9 +147,14 @@ function scanTemplateRegion(scanner: Scanner, text: string): EmbeddedRegion | nu if (start === 0) { if (token === HtmlTokenType.AttributeName) { lastAttributeName = scanner.getTokenText(); + attrs[lastAttributeName] = true; } else if (token === HtmlTokenType.AttributeValue) { + const attrValue = removeQuotes(scanner.getTokenText()); if (lastAttributeName === 'lang') { - languageId = getLanguageIdFromLangAttr(scanner.getTokenText()); + languageId = getLanguageIdFromLangAttr(attrValue); + } + if (lastAttributeName) { + attrs[lastAttributeName] = attrValue; } lastAttributeName = null; } else if (token === HtmlTokenType.StartTagClose) { @@ -168,7 +182,8 @@ function scanTemplateRegion(scanner: Scanner, text: string): EmbeddedRegion | nu languageId, start, end: offset, - type: 'template' + type: 'template', + attrs }; } } @@ -185,7 +200,8 @@ function scanTemplateRegion(scanner: Scanner, text: string): EmbeddedRegion | nu languageId, start, end, - type: 'template' + type: 'template', + attrs }; } @@ -195,11 +211,12 @@ function scanCustomRegion(tagName: string, scanner: Scanner, text: string): Embe let token = -1; let start = 0; let end: number; + const attrs: Partial> = {}; // Scan until finding matching template EndTag // Also record immediate next StartTagClose to find start let unClosedTag = 1; - let lastAttributeName = null; + let lastAttributeName: string | null = null; while (unClosedTag !== 0) { token = scanner.scan(); @@ -210,9 +227,14 @@ function scanCustomRegion(tagName: string, scanner: Scanner, text: string): Embe if (start === 0) { if (token === HtmlTokenType.AttributeName) { lastAttributeName = scanner.getTokenText(); + attrs[lastAttributeName] = true; } else if (token === HtmlTokenType.AttributeValue) { + const attrValue = removeQuotes(scanner.getTokenText()); if (lastAttributeName === 'lang') { - languageId = getLanguageIdFromLangAttr(scanner.getTokenText()); + languageId = getLanguageIdFromLangAttr(attrValue); + } + if (lastAttributeName) { + attrs[lastAttributeName] = attrValue; } lastAttributeName = null; } else if (token === HtmlTokenType.StartTagClose) { @@ -240,7 +262,8 @@ function scanCustomRegion(tagName: string, scanner: Scanner, text: string): Embe languageId, start, end: offset, - type: 'custom' + type: 'custom', + attrs }; } } @@ -257,12 +280,12 @@ function scanCustomRegion(tagName: string, scanner: Scanner, text: string): Embe languageId, start, end, - type: 'custom' + type: 'custom', + attrs }; } -function getLanguageIdFromLangAttr(lang: string): LanguageId { - let languageIdFromType = removeQuotes(lang); +function getLanguageIdFromLangAttr(languageIdFromType: string): LanguageId { if (languageIdFromType === 'jade') { languageIdFromType = 'pug'; } diff --git a/server/src/index.ts b/server/src/index.ts index f4005ddc77..5bbbdc879b 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -141,7 +141,7 @@ export { printSourceMap, stringifySourceMapNodes } from './services/typescriptService/sourceMap'; -export { createTemplateDiagnosticFilter } from './services/typescriptService/templateDiagnosticFilter'; +export { createTemplateDiagnosticFilter as createTemplateDiagnosticFilter } from './services/typescriptService/diagnosticFilter'; export { getTemplateTransformFunctions, renderHelperName, diff --git a/server/src/modes/script/javascript.ts b/server/src/modes/script/javascript.ts index e3d26b13af..722e7213db 100644 --- a/server/src/modes/script/javascript.ts +++ b/server/src/modes/script/javascript.ts @@ -69,6 +69,7 @@ import { getTokenTypeFromClassification } from './semanticToken'; import { RefTokensService } from '../../services/RefTokenService'; +import { createScriptSetupDiagnosticFilter } from '../../services/typescriptService/diagnosticFilter'; // Todo: After upgrading to LS server 4.0, use CompletionContext for filtering trigger chars // https://microsoft.github.io/language-server-protocol/specification#completion-request-leftwards_arrow_with_hook @@ -91,12 +92,6 @@ export async function getJavascriptMode( return vueDocument.getSingleTypeDocument('script'); }); - const firstScriptRegion = getLanguageModelCache(10, 60, document => { - const vueDocument = documentRegions.refreshAndGet(document); - const scriptRegions = vueDocument.getLanguageRangesOfType('script'); - return scriptRegions.length > 0 ? scriptRegions[0] : undefined; - }); - const { updateCurrentVueTextDocument } = serviceHost; let supportedCodeFixCodes: Set; @@ -196,6 +191,26 @@ export async function getJavascriptMode( ]; } + const scriptSetupRange = documentRegions + .refreshAndGet(doc) + .getLanguageRangesOfType('script') + .find(range => range.attrs.setup); + if (scriptSetupRange) { + const scriptSetupDiagnosticsFilters = createScriptSetupDiagnosticFilter(tsModule); + const scriptSetupRangeStart = doc.offsetAt(scriptSetupRange.start); + const scriptSetupRangeEnd = doc.offsetAt(scriptSetupRange.end); + rawScriptDiagnostics = rawScriptDiagnostics.filter(diag => { + if (diag.start) { + const range = convertRange(doc, diag as ts.TextSpan); + const start = doc.offsetAt(range.start); + if (start >= scriptSetupRangeStart && start <= scriptSetupRangeEnd) { + return scriptSetupDiagnosticsFilters(diag); + } + } + return true; + }); + } + return rawScriptDiagnostics.map(diag => { const tags: DiagnosticTag[] = []; @@ -248,7 +263,6 @@ export async function getJavascriptMode( const item: CompletionItem = { uri: doc.uri, - position, preselect: entry.isRecommended ? true : undefined, label, detail, @@ -262,6 +276,7 @@ export async function getJavascriptMode( languageId: scriptDoc.languageId, uri: doc.uri, offset, + position, source: entry.source, tsData: entry.data } @@ -353,8 +368,12 @@ export async function getJavascriptMode( } } - if (details.codeActions && env.getConfig().vetur.completion.autoImport) { - const textEdits = convertCodeAction(doc, details.codeActions, firstScriptRegion); + const vueDocument = documentRegions.refreshAndGet(doc); + const languageRange = item.data.position + ? vueDocument.getLanguageRangeAtPosition(item.data.position) + : vueDocument.getLanguageRangesOfType('script')[0]; + if (details.codeActions && env.getConfig().vetur.completion.autoImport && languageRange) { + const textEdits = convertCodeAction(doc, details.codeActions, languageRange); item.additionalTextEdits = textEdits; details.codeActions.forEach(action => { @@ -813,7 +832,7 @@ export async function getJavascriptMode( const docIdentifier = VersionedTextDocumentIdentifier.create(URI.file(doc.uri).toString(), 0); textDocumentEdit.push( ...edit.textChanges.map(({ span, newText }) => { - const range = Range.create(doc.positionAt(span.start), doc.positionAt(span.start + span.length)); + const range = convertRange(doc, span); return TextDocumentEdit.create(docIdentifier, [TextEdit.replace(range, newText)]); }) ); @@ -1112,12 +1131,8 @@ function getTsTriggerCharacter(triggerChar: string) { return undefined; } -function convertCodeAction( - doc: TextDocument, - codeActions: ts.CodeAction[], - regionStart: LanguageModelCache -): TextEdit[] { - const scriptStartOffset = doc.offsetAt(regionStart.refreshAndGet(doc)!.start); +function convertCodeAction(doc: TextDocument, codeActions: ts.CodeAction[], regionStart: LanguageRange): TextEdit[] { + const scriptStartOffset = doc.offsetAt(regionStart.start); const textEdits: TextEdit[] = []; for (const action of codeActions) { for (const change of action.changes) { @@ -1126,9 +1141,8 @@ function convertCodeAction( // currently, only import codeAction is available // change start of doc to start of script region if (tc.span.start <= scriptStartOffset && tc.span.length === 0) { - const region = regionStart.refreshAndGet(doc); - if (region) { - const line = region.start.line; + if (regionStart) { + const line = regionStart.start.line; return { range: Range.create(line + 1, 0, line + 1, 0), newText: tc.newText diff --git a/server/src/modes/template/index.ts b/server/src/modes/template/index.ts index 5818947721..00e067b50e 100644 --- a/server/src/modes/template/index.ts +++ b/server/src/modes/template/index.ts @@ -39,7 +39,14 @@ export class VueHTMLMode implements LanguageMode { autoImportSfcPlugin, vueInfoService ); - this.vueInterpolationMode = new VueInterpolationMode(tsModule, serviceHost, env, vueDocuments, vueInfoService); + this.vueInterpolationMode = new VueInterpolationMode( + documentRegions, + tsModule, + serviceHost, + env, + vueDocuments, + vueInfoService + ); this.autoImportSfcPlugin = autoImportSfcPlugin; } getId() { diff --git a/server/src/modes/template/interpolationMode.ts b/server/src/modes/template/interpolationMode.ts index ee03044c34..cfd62969bd 100644 --- a/server/src/modes/template/interpolationMode.ts +++ b/server/src/modes/template/interpolationMode.ts @@ -13,28 +13,29 @@ import { } from 'vscode-languageserver-types'; import { URI } from 'vscode-uri'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { VLSFullConfig } from '../../config'; import { LanguageModelCache } from '../../embeddedSupport/languageModelCache'; import { LanguageMode } from '../../embeddedSupport/languageModes'; import { IServiceHost } from '../../services/typescriptService/serviceHost'; import { mapBackRange, mapFromPositionToOffset } from '../../services/typescriptService/sourceMap'; import type ts from 'typescript'; import _ from 'lodash'; -import { createTemplateDiagnosticFilter } from '../../services/typescriptService/templateDiagnosticFilter'; +import { createTemplateDiagnosticFilter } from '../../services/typescriptService/diagnosticFilter'; import { toCompletionItemKind } from '../../services/typescriptService/util'; import { VueInfoService } from '../../services/vueInfoService'; import { isVCancellationRequested, VCancellationToken } from '../../utils/cancellationToken'; import { getFileFsPath } from '../../utils/paths'; import { NULL_COMPLETION } from '../nullMode'; -import { getFormatCodeSettings, languageServiceIncludesFile } from '../script/javascript'; +import { languageServiceIncludesFile } from '../script/javascript'; import * as Previewer from '../script/previewer'; import { HTMLDocument } from './parser/htmlParser'; import { isInsideInterpolation } from './services/isInsideInterpolation'; import { RuntimeLibrary } from '../../services/dependencyService'; import { EnvironmentService } from '../../services/EnvironmentService'; +import { VueDocumentRegions } from '../../embeddedSupport/embeddedSupport'; export class VueInterpolationMode implements LanguageMode { constructor( + private documentRegions: LanguageModelCache, private tsModule: RuntimeLibrary['typescript'], private serviceHost: IServiceHost, private env: EnvironmentService, @@ -56,15 +57,22 @@ export class VueInterpolationMode implements LanguageMode { : []; } + private isInterpolationMode(document: TextDocument) { + return ( + this.env.getConfig().vetur.experimental.templateInterpolationService && + !this.documentRegions + .refreshAndGet(document) + .getLanguageRangesOfType('script') + .some(region => region.attrs.setup) + ); + } + async doValidation(document: TextDocument, cancellationToken?: VCancellationToken): Promise { - if ( - !this.env.getConfig().vetur.experimental.templateInterpolationService || - !this.env.getConfig().vetur.validation.interpolation - ) { + if (await isVCancellationRequested(cancellationToken)) { return []; } - if (await isVCancellationRequested(cancellationToken)) { + if (!this.isInterpolationMode(document) || !this.env.getConfig().vetur.validation.interpolation) { return []; } @@ -109,7 +117,7 @@ export class VueInterpolationMode implements LanguageMode { } doComplete(document: TextDocument, position: Position): CompletionList { - if (!this.env.getConfig().vetur.experimental.templateInterpolationService) { + if (!this.isInterpolationMode(document)) { return NULL_COMPLETION; } @@ -203,7 +211,7 @@ export class VueInterpolationMode implements LanguageMode { } doResolve(document: TextDocument, item: CompletionItem): CompletionItem { - if (!this.env.getConfig().vetur.experimental.templateInterpolationService) { + if (!this.isInterpolationMode(document)) { return item; } @@ -276,7 +284,7 @@ export class VueInterpolationMode implements LanguageMode { contents: MarkedString[]; range?: Range; } { - if (!this.env.getConfig().vetur.experimental.templateInterpolationService) { + if (!this.isInterpolationMode(document)) { return { contents: [] }; } @@ -334,7 +342,7 @@ export class VueInterpolationMode implements LanguageMode { } findDefinition(document: TextDocument, position: Position): Location[] { - if (!this.env.getConfig().vetur.experimental.templateInterpolationService) { + if (!this.isInterpolationMode(document)) { return []; } @@ -385,7 +393,7 @@ export class VueInterpolationMode implements LanguageMode { } findReferences(document: TextDocument, position: Position): Location[] { - if (!this.env.getConfig().vetur.experimental.templateInterpolationService) { + if (!this.isInterpolationMode(document)) { return []; } diff --git a/server/src/services/typescriptService/templateDiagnosticFilter.ts b/server/src/services/typescriptService/diagnosticFilter.ts similarity index 72% rename from server/src/services/typescriptService/templateDiagnosticFilter.ts rename to server/src/services/typescriptService/diagnosticFilter.ts index 9a44662c68..08d97ec8da 100644 --- a/server/src/services/typescriptService/templateDiagnosticFilter.ts +++ b/server/src/services/typescriptService/diagnosticFilter.ts @@ -71,6 +71,33 @@ export function createTemplateDiagnosticFilter(tsModule: RuntimeLibrary['typescr return mergeFilter([ignorePrivateProtectedViolation, ignoreNoImplicitAnyViolationInNativeEvent]); } +export function createScriptSetupDiagnosticFilter(tsModule: RuntimeLibrary['typescript']): DiagnosticFilter { + const ignoreUnusedVariableViolation: DiagnosticFilter = diag => { + const unusedVariableViolation = [6133]; + const ignoreNodeFns = [tsModule.isVariableStatement, tsModule.isFunctionDeclaration, tsModule.isImportDeclaration]; + + if (!unusedVariableViolation.includes(diag.code)) { + return true; + } + + const source = diag.file; + if (!source) { + return true; + } + + const target = findNodeFromDiagnostic(diag, source); + + const node = findXXXFromNodeParent(target, ignoreNodeFns); + if (node && tsModule.isSourceFile(node.parent)) { + return false; + } + + return true; + }; + + return ignoreUnusedVariableViolation; +} + /** * Merge an array of filter to create a filter function. */ @@ -98,3 +125,16 @@ function findNodeFromDiagnostic(diag: ts.Diagnostic, node: ts.Node): ts.Node | u return childMatch ? childMatch : node; } + +function findXXXFromNodeParent( + node: ts.Node | undefined, + fns: Array<(node: ts.Node) => boolean> +): ts.Node | undefined { + if (!node) { + return undefined; + } + if (fns.some(fn => fn(node))) { + return node as T; + } + return findXXXFromNodeParent(node.parent, fns); +} diff --git a/server/src/services/typescriptService/preprocess.ts b/server/src/services/typescriptService/preprocess.ts index 770050f518..d48b13d606 100644 --- a/server/src/services/typescriptService/preprocess.ts +++ b/server/src/services/typescriptService/preprocess.ts @@ -213,6 +213,14 @@ function modifyVueScript(tsModule: RuntimeLibrary['typescript'], sourceFile: ts. }); (exportDefaultObject as any).expression = setObjPos(tsModule.createCall(vue, undefined, [objectLiteral])); setObjPos((exportDefaultObject.expression as ts.CallExpression).arguments!); + } else { + // @ts-expect-error + sourceFile.externalModuleIndicator = createExportAssignment( + tsModule, + undefined, + undefined, + tsModule.createCall(tsModule.createIdentifier('__vueEditorBridge'), undefined, [tsModule.createObjectLiteral([])]) + ); } } @@ -316,6 +324,20 @@ function createImportDeclaration( return tsModule.createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier); } +function createExportAssignment( + tsModule: RuntimeLibrary['typescript'], + modifiers: readonly ts.Modifier[] | undefined, + isExportEquals: boolean | undefined, + expression: ts.Expression +) { + const [major, minor] = tsModule.version.split('.'); + if ((Number(major) === 4 && Number(minor) >= 8) || Number(major) > 4) { + return tsModule.factory.createExportAssignment(modifiers, isExportEquals, expression); + } + // @ts-expect-error + return tsModule.createExportAssignment(modifiers, isExportEquals, undefined, expression); +} + /** Create a function that calls setTextRange on synthetic wrapper nodes that need a valid range */ function getWrapperRangeSetter( tsModule: RuntimeLibrary['typescript'], diff --git a/test/lsp/fixture/completion/autoImport/defineInOneLine.vue b/test/lsp/fixture/completion/autoImport/defineInOneLine.vue index 094ea44b8c..cdf742d70d 100644 --- a/test/lsp/fixture/completion/autoImport/defineInOneLine.vue +++ b/test/lsp/fixture/completion/autoImport/defineInOneLine.vue @@ -1,7 +1,7 @@ diff --git a/test/vue3/features/diagnostics/scriptSetup.test.ts b/test/vue3/features/diagnostics/scriptSetup.test.ts new file mode 100644 index 0000000000..6efde4acc1 --- /dev/null +++ b/test/vue3/features/diagnostics/scriptSetup.test.ts @@ -0,0 +1,44 @@ +import vscode from 'vscode'; +import { DiagnosticTag } from 'vscode-languageclient'; +import { sameLineRange } from '../../../util'; +import { testDiagnostics, testNoDiagnostics } from '../../../diagnosticHelper'; +import { getDocUri } from '../../path'; + +describe('Should find diagnostics for script setup', () => { + const doc1Uri = getDocUri('diagnostics/scriptSetup1.vue'); + const doc2Uri = getDocUri('diagnostics/scriptSetup2.vue'); + const docDiagUri = getDocUri('diagnostics/scriptSetupDiag.vue'); + + it('shows no diagnostics error for script setup 1', async () => { + await testNoDiagnostics(doc1Uri); + }); + + it('shows no diagnostics error for script setup 2', async () => { + await testNoDiagnostics(doc2Uri); + }); + + it('shows diagnostic errors for script setup', async () => { + const expectedDiagnostics: vscode.Diagnostic[] = [ + { + severity: vscode.DiagnosticSeverity.Hint, + message: "'a' is declared but its value is never read.", + range: sameLineRange(13, 8, 9), + tags: [DiagnosticTag.Unnecessary] + }, + { + severity: vscode.DiagnosticSeverity.Hint, + message: "'b' is declared but its value is never read.", + range: sameLineRange(14, 11, 12), + tags: [DiagnosticTag.Unnecessary] + }, + { + severity: vscode.DiagnosticSeverity.Error, + message: "Type 'boolean' is not assignable to type 'string'.", + range: sameLineRange(20, 6, 7), + tags: [DiagnosticTag.Unnecessary] + } + ]; + + await testDiagnostics(docDiagUri, expectedDiagnostics); + }); +}); diff --git a/test/vue3/fixture/diagnostics/scriptSetup1.vue b/test/vue3/fixture/diagnostics/scriptSetup1.vue new file mode 100644 index 0000000000..8f2ef7bb95 --- /dev/null +++ b/test/vue3/fixture/diagnostics/scriptSetup1.vue @@ -0,0 +1,16 @@ + + + diff --git a/test/vue3/fixture/diagnostics/scriptSetup2.vue b/test/vue3/fixture/diagnostics/scriptSetup2.vue new file mode 100644 index 0000000000..114d7e1a3c --- /dev/null +++ b/test/vue3/fixture/diagnostics/scriptSetup2.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/test/vue3/fixture/diagnostics/scriptSetupDiag.vue b/test/vue3/fixture/diagnostics/scriptSetupDiag.vue new file mode 100644 index 0000000000..19bf432bfb --- /dev/null +++ b/test/vue3/fixture/diagnostics/scriptSetupDiag.vue @@ -0,0 +1,22 @@ + + + diff --git a/test/vue3/fixture/package.json b/test/vue3/fixture/package.json index 623bce2c10..764d5b4697 100644 --- a/test/vue3/fixture/package.json +++ b/test/vue3/fixture/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "vue": "^3.0.0-rc.13", + "vue": "^3.2.47", "vue-class-component": "^8.0.0-rc.1" } } diff --git a/test/vue3/fixture/yarn.lock b/test/vue3/fixture/yarn.lock index d6c42f083d..45cf29e4de 100644 --- a/test/vue3/fixture/yarn.lock +++ b/test/vue3/fixture/yarn.lock @@ -2,108 +2,164 @@ # yarn lockfile v1 -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/parser@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== - -"@babel/types@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== +"@babel/parser@^7.16.4": + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" + integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== + +"@vue/compiler-core@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz#3e07c684d74897ac9aa5922c520741f3029267f8" + integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@vue/compiler-core@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0-rc.13.tgz#bec6812c4ce9e9b41210deaf8d05652feb50f1e5" - integrity sha512-bVtg7iilAE8uq+WvR4JN+vtzQWX+yjKHNG5Un0ar6M9WbphydGY9C0y1whKjRbKn/7U+evUh1MJ2hV2q3GBrSQ== + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305" + integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ== dependencies: - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" - "@vue/shared" "3.0.0-rc.13" - estree-walker "^2.0.1" + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/compiler-sfc@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d" + integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-ssr" "3.2.47" + "@vue/reactivity-transform" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" source-map "^0.6.1" -"@vue/compiler-dom@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.0-rc.13.tgz#dc00b10c19a9d03a5302046de84daa5b1096d4cb" - integrity sha512-D0x6cZFiDfz+rcmWSgvgxjhVQOADMmQy7kcbft3u5nlTurZaztBNBz7pwHYi57/z3FjhzyclpDf0daOrRvph4A== +"@vue/compiler-ssr@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee" + integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw== dependencies: - "@vue/compiler-core" "3.0.0-rc.13" - "@vue/shared" "3.0.0-rc.13" + "@vue/compiler-dom" "3.2.47" + "@vue/shared" "3.2.47" -"@vue/reactivity@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.0-rc.13.tgz#3e7eebb438249a09b74b74e33d6a0e02970a000a" - integrity sha512-I4E9/3ZGejuNfUbpbgtWWDGas3qIGqqvjUeMEuDGbJfaUluZauSKXPRKjfGPz+esmgwvGAWjkcFeyyiYY4RSNQ== +"@vue/reactivity-transform@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" + integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.47.tgz#1d6399074eadfc3ed35c727e2fd707d6881140b6" + integrity sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ== dependencies: - "@vue/shared" "3.0.0-rc.13" + "@vue/shared" "3.2.47" -"@vue/runtime-core@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.0-rc.13.tgz#e4ea95304aa33391696822c52b07a932fddf1d26" - integrity sha512-N5xGV6s/LaXybNt81XdBdil6exMoI1HPd0FeURnmhHfUizI41xq4yrWO+Yi44XO+R8xFcfxYECBaPqk0jPLgsg== +"@vue/runtime-core@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz#406ebade3d5551c00fc6409bbc1eeb10f32e121d" + integrity sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA== dependencies: - "@vue/reactivity" "3.0.0-rc.13" - "@vue/shared" "3.0.0-rc.13" + "@vue/reactivity" "3.2.47" + "@vue/shared" "3.2.47" -"@vue/runtime-dom@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.0-rc.13.tgz#e82e67a4b099e7b8ec259693b79fadd525955d8a" - integrity sha512-o3Y9qlS3w8gqaj/vc99Z0DA2yETQFH8Q+qvxZstvRTEOYGEzxualIkBpCBXkPEXVSaing3Gbd4wso764RUZjkQ== +"@vue/runtime-dom@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz#93e760eeaeab84dedfb7c3eaf3ed58d776299382" + integrity sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA== dependencies: - "@vue/runtime-core" "3.0.0-rc.13" - "@vue/shared" "3.0.0-rc.13" + "@vue/runtime-core" "3.2.47" + "@vue/shared" "3.2.47" csstype "^2.6.8" -"@vue/shared@3.0.0-rc.13": - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.0-rc.13.tgz#2ec450daa7eae752da38da41a5b1c84056b10b7e" - integrity sha512-8zEVHmffW1P8Wlt8P63N+zKJrmzL6y0P2P6biWdl4CI9E5QVKlbOEYl7i+tU/dpa6oLj6nEzBxUCwA7UHvcPkw== +"@vue/server-renderer@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz#8aa1d1871fc4eb5a7851aa7f741f8f700e6de3c0" + integrity sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA== + dependencies: + "@vue/compiler-ssr" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/shared@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" + integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== csstype@^2.6.8: version "2.6.13" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== -estree-walker@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.1.tgz#f8e030fb21cefa183b44b7ad516b747434e7a3e0" - integrity sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +postcss@^8.1.10: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" -lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== vue-class-component@^8.0.0-rc.1: version "8.0.0-rc.1" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-8.0.0-rc.1.tgz#db692cd97656eb9a08206c03d0b7398cdb1d9420" integrity sha512-w1nMzsT/UdbDAXKqhwTmSoyuJzUXKrxLE77PCFVuC6syr8acdFDAq116xgvZh9UCuV0h+rlCtxXolr3Hi3HyPQ== -vue@^3.0.0-rc.13: - version "3.0.0-rc.13" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.0-rc.13.tgz#b3aa1c3e8a5122ce7b5a02e003dbac3d83987eee" - integrity sha512-xCW8EAVSMdU7z+3BWBFV9hO36Tg6vN25fYN6agC6/z/3JlAyo0hVqQtqmGaDAHVlO110rPowfkGIWqStPhTdcw== +vue@^3.2.47: + version "3.2.47" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.47.tgz#3eb736cbc606fc87038dbba6a154707c8a34cff0" + integrity sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ== dependencies: - "@vue/compiler-dom" "3.0.0-rc.13" - "@vue/runtime-dom" "3.0.0-rc.13" - "@vue/shared" "3.0.0-rc.13" + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-sfc" "3.2.47" + "@vue/runtime-dom" "3.2.47" + "@vue/server-renderer" "3.2.47" + "@vue/shared" "3.2.47"