更新
This commit is contained in:
+9
@@ -0,0 +1,9 @@
|
||||
import type { Plugin } from 'vite';
|
||||
export declare function initNVueNodeTransforms(): import("@vue/compiler-core").NodeTransform[];
|
||||
export declare function initNVueDirectiveTransforms(): {
|
||||
model: import("@vue/compiler-core").DirectiveTransform;
|
||||
show: import("@vue/compiler-core").DirectiveTransform;
|
||||
};
|
||||
export declare function uniAppNVuePlugin({ appService, }: {
|
||||
appService: boolean;
|
||||
}): Plugin;
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.uniAppNVuePlugin = exports.initNVueDirectiveTransforms = exports.initNVueNodeTransforms = void 0;
|
||||
const path_1 = __importDefault(require("path"));
|
||||
const picocolors_1 = __importDefault(require("picocolors"));
|
||||
const uni_shared_1 = require("@dcloudio/uni-shared");
|
||||
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||||
const uni_nvue_styler_1 = require("@dcloudio/uni-nvue-styler");
|
||||
const utils_1 = require("../../utils");
|
||||
// import { transformRenderWhole } from './transforms/transformRenderWhole'
|
||||
// import { transformAppendAsTree } from './transforms/transformAppendAsTree'
|
||||
const transformVideo_1 = require("./transforms/transformVideo");
|
||||
const transformText_1 = require("./transforms/transformText");
|
||||
const configResolved_1 = require("../../plugin/configResolved");
|
||||
const utils_2 = require("../utils");
|
||||
const transformRootNode_1 = require("./transforms/transformRootNode");
|
||||
const vModel_1 = require("./transforms/vModel");
|
||||
const vShow_1 = require("./transforms/vShow");
|
||||
const transformAttrs_1 = require("./transforms/transformAttrs");
|
||||
const pagesJson_1 = require("../plugins/pagesJson");
|
||||
const uTags = {
|
||||
text: 'u-text',
|
||||
image: 'u-image',
|
||||
input: 'u-input',
|
||||
textarea: 'u-textarea',
|
||||
video: 'u-video',
|
||||
'web-view': 'u-web-view',
|
||||
slider: 'u-slider',
|
||||
};
|
||||
function initNVueNodeTransforms() {
|
||||
// 优先级必须确保 renderWhole > appendAsTree
|
||||
return [
|
||||
transformRootNode_1.transformRootNode,
|
||||
(0, uni_cli_shared_1.createTransformTag)(uTags),
|
||||
transformAttrs_1.transformAttrs,
|
||||
transformText_1.transformText,
|
||||
transformVideo_1.transformVideo,
|
||||
uni_cli_shared_1.transformUTSComponent,
|
||||
// transformRenderWhole,
|
||||
// transformAppendAsTree,
|
||||
];
|
||||
}
|
||||
exports.initNVueNodeTransforms = initNVueNodeTransforms;
|
||||
function initNVueDirectiveTransforms() {
|
||||
return {
|
||||
model: vModel_1.transformModel,
|
||||
show: vShow_1.transformShow,
|
||||
};
|
||||
}
|
||||
exports.initNVueDirectiveTransforms = initNVueDirectiveTransforms;
|
||||
function uniAppNVuePlugin({ appService, }) {
|
||||
const inputDir = process.env.UNI_INPUT_DIR;
|
||||
const mainPath = (0, uni_cli_shared_1.resolveMainPathOnce)(inputDir);
|
||||
return {
|
||||
name: 'uni:app-nvue',
|
||||
config() {
|
||||
return {
|
||||
css: {
|
||||
postcss: {
|
||||
plugins: (0, uni_cli_shared_1.initPostcssPlugin)({
|
||||
uniApp: uni_shared_1.defaultNVueRpx2Unit,
|
||||
autoprefixer: false,
|
||||
}),
|
||||
},
|
||||
},
|
||||
build: {
|
||||
lib: {
|
||||
name: 'AppService',
|
||||
// 必须使用 lib 模式,否则会生成 preload 等代码
|
||||
fileName: appService ? 'app-service' : 'app',
|
||||
entry: mainPath,
|
||||
formats: [appService ? 'iife' : 'es'],
|
||||
},
|
||||
outDir: appService ? process.env.UNI_OUTPUT_DIR : (0, utils_1.nvueOutDir)(),
|
||||
rollupOptions: {
|
||||
external: (0, utils_2.external)(appService),
|
||||
output: {
|
||||
entryFileNames(chunk) {
|
||||
if (chunk.name === 'main' && chunk.isEntry) {
|
||||
return appService ? uni_cli_shared_1.APP_SERVICE_FILENAME : 'app.js';
|
||||
}
|
||||
return chunk.name + '.js';
|
||||
},
|
||||
chunkFileNames: createChunkFileNames(inputDir),
|
||||
plugins: [(0, uni_cli_shared_1.dynamicImportPolyfill)(true)],
|
||||
globals: (0, utils_2.globals)(appService),
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
configResolved: (0, configResolved_1.createConfigResolved)({
|
||||
createCssPostPlugin(config) {
|
||||
return {
|
||||
name: 'vite:css-post',
|
||||
buildStart() {
|
||||
// 用于覆盖原始插件方法
|
||||
// noop
|
||||
},
|
||||
async transform(source, filename) {
|
||||
if (!uni_cli_shared_1.cssLangRE.test(filename) || uni_cli_shared_1.commonjsProxyRE.test(filename)) {
|
||||
return;
|
||||
}
|
||||
const nvuePages = pagesJson_1.nvuePagesCache.get(config);
|
||||
if (!nvuePages || !Object.keys(nvuePages).length) {
|
||||
// 当前项目没有 nvue 文件
|
||||
return { code: `export default {}`, map: { mappings: '' } };
|
||||
}
|
||||
const { code, messages } = await (0, uni_nvue_styler_1.parse)(source, {
|
||||
filename,
|
||||
logLevel: 'WARNING',
|
||||
});
|
||||
messages.forEach((message) => {
|
||||
if (message.type === 'warning') {
|
||||
config.logger.warn(picocolors_1.default.yellow(`[plugin:vite:nvue-css] ${message.text}`));
|
||||
let msg = '';
|
||||
if (message.line && message.column) {
|
||||
msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(source, {
|
||||
line: message.line,
|
||||
column: message.column,
|
||||
})}\n`;
|
||||
}
|
||||
msg += `${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
|
||||
config.logger.warn(msg);
|
||||
}
|
||||
});
|
||||
return { code: `export default ${code}`, map: { mappings: '' } };
|
||||
},
|
||||
generateBundle() {
|
||||
// 用于覆盖原始插件方法
|
||||
// noop
|
||||
},
|
||||
};
|
||||
},
|
||||
}),
|
||||
};
|
||||
}
|
||||
exports.uniAppNVuePlugin = uniAppNVuePlugin;
|
||||
function createChunkFileNames(inputDir) {
|
||||
return function chunkFileNames(chunk) {
|
||||
if (chunk.isDynamicEntry && chunk.facadeModuleId) {
|
||||
const { filename } = (0, uni_cli_shared_1.parseVueRequest)(chunk.facadeModuleId);
|
||||
if (filename.endsWith('.nvue')) {
|
||||
return ((0, uni_cli_shared_1.removeExt)((0, uni_cli_shared_1.normalizePath)(path_1.default.relative(inputDir, filename))) + '.js');
|
||||
}
|
||||
}
|
||||
return '[name].js';
|
||||
};
|
||||
}
|
||||
Generated
Vendored
+11
@@ -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 {};
|
||||
Generated
Vendored
+13
@@ -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;
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type NodeTransform } from '@vue/compiler-core';
|
||||
export declare const transformAppendAsTree: NodeTransform;
|
||||
Generated
Vendored
+29
@@ -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;
|
||||
Generated
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
import type { NodeTransform } from '@vue/compiler-core';
|
||||
/**
|
||||
* 将内置组件属性调整为驼峰
|
||||
* @param node
|
||||
* @param context
|
||||
* @returns
|
||||
*/
|
||||
export declare const transformAttrs: NodeTransform;
|
||||
Generated
Vendored
+38
@@ -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);
|
||||
}
|
||||
Generated
Vendored
+7
@@ -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;
|
||||
TongjiUniApp/node_modules/@dcloudio/uni-app-vite/dist/nvue/plugin/transforms/transformRenderWhole.js
Generated
Vendored
+50
@@ -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;
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type NodeTransform } from '@vue/compiler-core';
|
||||
export declare const transformRootNode: NodeTransform;
|
||||
Generated
Vendored
+76
@@ -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,
|
||||
};
|
||||
}
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type NodeTransform } from '@vue/compiler-core';
|
||||
export declare const transformText: NodeTransform;
|
||||
Generated
Vendored
+100
@@ -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,
|
||||
};
|
||||
}
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type NodeTransform } from '@vue/compiler-core';
|
||||
export declare const transformVideo: NodeTransform;
|
||||
Generated
Vendored
+40
@@ -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,
|
||||
};
|
||||
}
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import { type DirectiveTransform } from '@vue/compiler-core';
|
||||
export declare const transformModel: DirectiveTransform;
|
||||
Generated
Vendored
+31
@@ -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;
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
import type { DirectiveTransform } from '@vue/compiler-core';
|
||||
export declare const transformShow: DirectiveTransform;
|
||||
Generated
Vendored
+11
@@ -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;
|
||||
Reference in New Issue
Block a user