2025/2/8第一次更新

This commit is contained in:
爱吃咸鱼小猫咪
2025-02-08 18:50:38 +08:00
commit d7af560866
26519 changed files with 5046029 additions and 0 deletions
@@ -0,0 +1,11 @@
import { type CompilerError, type SourceLocation } from '@vue/compiler-core';
export declare const enum NVueErrorCodes {
X_V_SHOW = 0,
X_V_MODEL_DYNAMIC_TYPE = 1,
X_V_MODEL_AND_V_BIND = 2
}
interface NVueCompilerError extends CompilerError {
code: NVueErrorCodes;
}
export declare function createNVueCompilerError(code: NVueErrorCodes, loc?: SourceLocation, additionalMessage?: string): NVueCompilerError;
export {};
@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNVueCompilerError = void 0;
const compiler_core_1 = require("@vue/compiler-core");
const NVueErrorMessages = {
[0 /* NVueErrorCodes.X_V_SHOW */]: 'nvue: v-show is not supported',
[1 /* NVueErrorCodes.X_V_MODEL_DYNAMIC_TYPE */]: 'nvue: v-model with :type="" is not supported',
[2 /* NVueErrorCodes.X_V_MODEL_AND_V_BIND */]: 'nvue: v-model with v-bind is not supported',
};
function createNVueCompilerError(code, loc, additionalMessage) {
return (0, compiler_core_1.createCompilerError)(code, loc, NVueErrorMessages, additionalMessage);
}
exports.createNVueCompilerError = createNVueCompilerError;
@@ -0,0 +1,2 @@
import { type NodeTransform } from '@vue/compiler-core';
export declare const transformAppendAsTree: NodeTransform;
@@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformAppendAsTree = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const compiler_core_1 = require("@vue/compiler-core");
const unitaryTags = [
'cell',
'header',
'cell-slot',
'recycle-list',
'text',
'u-text',
];
const transformAppendAsTree = (node, _) => {
if (!(0, uni_cli_shared_1.isElementNode)(node)) {
return;
}
// append => appendAsTree: true
const appendProp = (0, compiler_core_1.findProp)(node, 'append');
if (appendProp) {
(0, uni_cli_shared_1.renameProp)('appendAsTree', appendProp);
return;
}
if (!unitaryTags.includes(node.tag)) {
return;
}
node.props.push((0, uni_cli_shared_1.createBindDirectiveNode)('appendAsTree', 'true'));
};
exports.transformAppendAsTree = transformAppendAsTree;
@@ -0,0 +1,8 @@
import type { NodeTransform } from '@vue/compiler-core';
/**
* 将内置组件属性调整为驼峰
* @param node
* @param context
* @returns
*/
export declare const transformAttrs: NodeTransform;
@@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformAttrs = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const uni_shared_1 = require("@dcloudio/uni-shared");
const shared_1 = require("@vue/shared");
/**
* 将内置组件属性调整为驼峰
* @param node
* @param context
* @returns
*/
const transformAttrs = (node, context) => {
if (!(0, uni_cli_shared_1.isElementNode)(node)) {
return;
}
if (!(0, uni_shared_1.isAppNVueNativeTag)(node.tag)) {
return;
}
node.props.forEach((prop) => {
if ((0, uni_cli_shared_1.isDirectiveNode)(prop)) {
const { arg } = prop;
if (arg && (0, uni_cli_shared_1.isSimpleExpressionNode)(arg)) {
arg.content = normalizePropName(arg.content);
}
}
else {
prop.name = normalizePropName(prop.name);
}
});
};
exports.transformAttrs = transformAttrs;
function normalizePropName(name) {
if (name.startsWith('data-')) {
return name;
}
return (0, shared_1.camelize)(name);
}
@@ -0,0 +1,7 @@
import { type NodeTransform, type RootNode } from '@vue/compiler-core';
export declare const transformRenderWhole: NodeTransform;
/**
* 仅当根节点只有一个,标签在白名单,且开发者未主动配置的情况下,才补充
* @param node
*/
export declare function addRenderWhole(node: RootNode): void;
@@ -0,0 +1,50 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addRenderWhole = exports.transformRenderWhole = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const compiler_core_1 = require("@vue/compiler-core");
const transformRenderWhole = (node, _) => {
if (!(0, uni_cli_shared_1.isElementNode)(node)) {
return;
}
const prop = (0, compiler_core_1.findProp)(node, 'render-whole');
if (!prop) {
return;
}
// render-whole => append
(0, uni_cli_shared_1.renameProp)('append', prop);
};
exports.transformRenderWhole = transformRenderWhole;
//
const RENDER_WHOLE_TAGS = [
'view',
'scroll-view',
'swiper',
'match-media',
'movable-area',
'movable-view',
'cover-view',
'cover-image',
'form',
'picker',
'picker-view',
'navigator',
'map',
];
/**
* 仅当根节点只有一个,标签在白名单,且开发者未主动配置的情况下,才补充
* @param node
*/
function addRenderWhole(node) {
if (node.children.length === 1) {
const element = node.children[0];
if ((0, uni_cli_shared_1.isElementNode)(element) && RENDER_WHOLE_TAGS.includes(element.tag)) {
if (!(0, compiler_core_1.findProp)(element, 'render-whole') &&
!(0, compiler_core_1.findProp)(element, 'append') &&
!(0, compiler_core_1.findProp)(element, 'appendAsTree')) {
element.props.push((0, uni_cli_shared_1.createBindDirectiveNode)('render-whole', (0, compiler_core_1.createSimpleExpression)('true')));
}
}
}
}
exports.addRenderWhole = addRenderWhole;
@@ -0,0 +1,2 @@
import { type NodeTransform } from '@vue/compiler-core';
export declare const transformRootNode: NodeTransform;
@@ -0,0 +1,76 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformRootNode = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const compiler_core_1 = require("@vue/compiler-core");
const transformRenderWhole_1 = require("./transformRenderWhole");
const pagesJson_1 = require("../../plugins/pagesJson");
const SCROLLER_COMPONENTS = [
'list',
'scroller',
'scroll-view',
'waterfall',
'recycle-list',
];
const transformRootNode = (node, context) => {
if (node.type !== compiler_core_1.NodeTypes.ROOT) {
return;
}
const pageOptions = (0, pagesJson_1.parseNVuePageOptions)((0, uni_cli_shared_1.normalizePath)(context.filename));
if (!pageOptions) {
// 非页面组件,自动为根节点补充 render-whole
return (0, transformRenderWhole_1.addRenderWhole)(node);
}
const { disableScroll, scrollIndicator } = pageOptions;
// 禁用滚动,或已包含滚动元素
if (disableScroll || hasScrollerElement(node)) {
return wrapperByView(node);
}
return wrapperByScrollView(node, { scrollIndicator });
};
exports.transformRootNode = transformRootNode;
function hasScrollerElement(node) {
return node.children.some((child) => {
if (child.type === compiler_core_1.NodeTypes.ELEMENT) {
return SCROLLER_COMPONENTS.includes(child.tag);
}
});
}
function wrapperByScrollView(node, { scrollIndicator }) {
node.children = [
createElement('scroll-view', createScrollViewProps({ scrollIndicator }), node.children),
];
}
const trueExpr = (0, compiler_core_1.createSimpleExpression)('true');
const falseExpr = (0, compiler_core_1.createSimpleExpression)('false');
function createScrollViewProps({ scrollIndicator, }) {
return [
(0, uni_cli_shared_1.createBindDirectiveNode)('scrollY', trueExpr),
(0, uni_cli_shared_1.createBindDirectiveNode)('showScrollbar', scrollIndicator === 'none' ? falseExpr : trueExpr),
(0, uni_cli_shared_1.createBindDirectiveNode)('enableBackToTop', trueExpr),
(0, uni_cli_shared_1.createAttributeNode)('bubble', 'true'),
(0, uni_cli_shared_1.createBindDirectiveNode)('style', `{flexDirection:'column'}`),
];
}
/**
* 目前暂不支持多节点,故发现多节点时,自动补充一个 view 根节点
* @param node
*/
function wrapperByView(node) {
if (node.children.length > 1) {
node.children = [createElement('view', [], node.children)];
}
}
function createElement(tag, props, children) {
return {
type: compiler_core_1.NodeTypes.ELEMENT,
ns: 0,
tag,
isSelfClosing: false,
props,
children,
tagType: compiler_core_1.ElementTypes.ELEMENT,
codegenNode: undefined,
loc: compiler_core_1.locStub,
};
}
@@ -0,0 +1,2 @@
import { type NodeTransform } from '@vue/compiler-core';
export declare const transformText: NodeTransform;
@@ -0,0 +1,100 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformText = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const compiler_core_1 = require("@vue/compiler-core");
function isTextNode({ tag }) {
return tag === 'text' || tag === 'u-text' || tag === 'button';
}
function isTextElement(node) {
return node.type === compiler_core_1.NodeTypes.ELEMENT && node.tag === 'text';
}
function isText(node) {
const { type } = node;
return (type === compiler_core_1.NodeTypes.TEXT ||
type === compiler_core_1.NodeTypes.TEXT_CALL ||
type === compiler_core_1.NodeTypes.INTERPOLATION ||
type === compiler_core_1.NodeTypes.COMPOUND_EXPRESSION);
}
const transformText = (node, _) => {
if (!(0, uni_cli_shared_1.isElementNode)(node)) {
return;
}
if (isTextNode(node)) {
return;
}
const { children } = node;
if (!children.length) {
return;
}
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (isTextElement(child)) {
parseText(child);
}
let currentContainer = undefined;
if (isText(child)) {
if (!currentContainer) {
currentContainer = children[i] = createText(node, child);
}
for (let j = i + 1; j < children.length; j++) {
const next = children[j];
if (isText(next)) {
// 合并相邻的文本节点
currentContainer.children.push(next);
children.splice(j, 1);
j--;
}
else {
currentContainer = undefined;
break;
}
}
}
}
};
exports.transformText = transformText;
/*
1. 转换 \\n 为 \n
2. u-text 下只能有一个文本节点(不支持 children),需要移除子组件并合并文本
*/
function parseText(node) {
if (node.children.length) {
let firstTextChild;
for (let i = 0; i < node.children.length; i++) {
const child = node.children[i];
if (isText(child) && typeof child.content === 'string') {
if (!firstTextChild) {
firstTextChild = child;
firstTextChild.content = firstTextChild.content.replace(/\\n/g, '\n');
}
else {
;
firstTextChild.content += child.content.replace(/\\n/g, '\n');
node.children.splice(i, 1);
i--;
}
}
else if (child.type === 1 || child.type === 3) {
node.children.splice(i, 1);
i--;
}
else {
firstTextChild = null;
}
}
}
}
function createText(parent, node) {
return {
tag: 'u-text',
type: compiler_core_1.NodeTypes.ELEMENT,
tagType: compiler_core_1.ElementTypes.ELEMENT,
props: [],
isSelfClosing: false,
children: [node],
codegenNode: undefined,
ns: parent.ns,
loc: node.loc,
};
}
@@ -0,0 +1,2 @@
import { type NodeTransform } from '@vue/compiler-core';
export declare const transformVideo: NodeTransform;
@@ -0,0 +1,40 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformVideo = void 0;
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const compiler_core_1 = require("@vue/compiler-core");
function isVideo(node) {
return node.tag === 'video' || node.tag === 'u-video';
}
const transformVideo = (node, _) => {
if (!(0, uni_cli_shared_1.isElementNode)(node)) {
return;
}
if (!isVideo(node)) {
return;
}
if (!node.children.length) {
return;
}
const firstChild = node.children[0];
if ((0, uni_cli_shared_1.isElementNode)(firstChild) && firstChild.tag === 'u-scalable') {
return;
}
node.children = [createScalable(node)];
};
exports.transformVideo = transformVideo;
function createScalable(node) {
return {
tag: 'u-scalable',
type: compiler_core_1.NodeTypes.ELEMENT,
tagType: compiler_core_1.ElementTypes.ELEMENT,
props: [
(0, uni_cli_shared_1.createBindDirectiveNode)('style', (0, compiler_core_1.createSimpleExpression)('{position:"absolute",left:"0",right:"0",top:"0",bottom:"0"}')),
],
isSelfClosing: true,
children: node.children,
codegenNode: undefined,
ns: node.ns,
loc: node.loc,
};
}
@@ -0,0 +1,2 @@
import { type DirectiveTransform } from '@vue/compiler-core';
export declare const transformModel: DirectiveTransform;
@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformModel = void 0;
const compiler_core_1 = require("@vue/compiler-core");
const shared_1 = require("@vue/shared");
const tags = ['u-input', 'u-textarea'];
const transformModel = (dir, node, context) => {
const result = (0, compiler_core_1.transformModel)(dir, node, context);
// 将 u-input,u-textarea 的 onUpdate:modelValue 事件转换为 onInput
if (tags.includes(node.tag) && result.props.length >= 2) {
const key = result.props[1].key;
let value = result.props[1].value;
if (value.type === compiler_core_1.NodeTypes.JS_CACHE_EXPRESSION) {
value = value.value;
}
if ((0, compiler_core_1.isStaticExp)(key) &&
key.content === 'onUpdate:modelValue' &&
value.type === compiler_core_1.NodeTypes.COMPOUND_EXPRESSION) {
key.content = 'onInput';
// 替换 $event 为 $event.detail.value
value.children = value.children.map((child) => {
if ((0, shared_1.isString)(child)) {
return child.replace(/=\s\$event/g, `= $event.detail.value`);
}
return child;
});
}
}
return result;
};
exports.transformModel = transformModel;
@@ -0,0 +1,2 @@
import type { DirectiveTransform } from '@vue/compiler-core';
export declare const transformShow: DirectiveTransform;
@@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformShow = void 0;
const errors_1 = require("./errors");
const transformShow = (dir, node, context) => {
context.onError((0, errors_1.createNVueCompilerError)(0 /* NVueErrorCodes.X_V_SHOW */, dir.loc));
return {
props: [],
};
};
exports.transformShow = transformShow;