From c8c54bfe42e8a43d8cc78beaaa2e214eed6fec3e Mon Sep 17 00:00:00 2001 From: houhaoyu Date: Wed, 22 Dec 2021 16:43:20 +0800 Subject: [PATCH 1/3] houhaoyu@huawei.com update code from wagner Signed-off-by: houhaoyu Change-Id: Ifb5b7217c735239977c0a1b7e70f4e39eef3c03b --- OAT.xml | 64 +- ace-loader/package.json | 3 +- ace-loader/plugin/codegen/index.js | 2892 ++++++++--------- .../plugin/templater/component_validator.js | 5 +- ace-loader/src/genAbc-plugin.js | 6 +- ace-loader/test/lite/expected/attribute.js | 30 +- ace-loader/test/lite/expected/bubble.js | 30 +- ace-loader/test/lite/expected/class.js | 30 +- ace-loader/test/lite/expected/event.js | 30 +- ace-loader/test/lite/expected/expression.js | 30 +- ace-loader/test/lite/expected/forDirective.js | 30 +- ace-loader/test/lite/expected/ifDirective.js | 30 +- ace-loader/test/lite/expected/inlineStyle.js | 30 +- .../test/rich/testcase/pages/class/class.js | 30 +- .../testcase/pages/commonAttr/commonAttr.js | 30 +- .../test/rich/testcase/pages/event/event.js | 30 +- .../testcase/pages/expression/expression.js | 30 +- .../pages/exteriorStyle/exteriorStyle.js | 30 +- .../pages/forDirective/forDirective.js | 30 +- .../testcase/pages/ifDirective/ifDirective.js | 30 +- .../testcase/pages/importCSS/importCSS.js | 30 +- .../testcase/pages/inlineStyle/inlineStyle.js | 30 +- .../testcase/pages/mediaQuery/mediaQuery.js | 30 +- .../testcase/pages/privateAttr/privateAttr.js | 30 +- .../pages/uncommonAttr/uncommonAttr.js | 30 +- ace-loader/webpack.rich.config.js | 8 +- 26 files changed, 1794 insertions(+), 1784 deletions(-) diff --git a/OAT.xml b/OAT.xml index 5e5aa03..08501c3 100644 --- a/OAT.xml +++ b/OAT.xml @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/ace-loader/package.json b/ace-loader/package.json index f996f74..7d26eba 100644 --- a/ace-loader/package.json +++ b/ace-loader/package.json @@ -12,7 +12,8 @@ "Rich" ], "scripts": { - "build": "", + "build": "./node_modules/.bin/babel ./third_party/weex-loader/src ./src --out-dir lib && node ./module-source.js ./lib && node ./uglify-source.js ./lib", + "richtest": "cd test/rich/testcase && webpack --config ../../../webpack.rich.config.js && mocha ../test.js", "rich": "cd sample/rich && webpack --config ../../webpack.rich.config.js", "lite": "cd sample/lite && webpack --config ../../webpack.lite.config.js", "card": "cd sample/card && webpack --config ../../webpack.rich.config.js", diff --git a/ace-loader/plugin/codegen/index.js b/ace-loader/plugin/codegen/index.js index 7561159..bc06873 100644 --- a/ace-loader/plugin/codegen/index.js +++ b/ace-loader/plugin/codegen/index.js @@ -1,1447 +1,1447 @@ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ 784: -/***/ ((__unused_webpack_module, exports) => { - - -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.errorMap = void 0; -exports.errorMap = new Map([ - ["fileError", "Visual file is damaged"], - ["versionError", "Version number of visual file does not match"], - ["modelError", "Visual model in visual file is damaged"], - ["codegenError", "Codegen hml and css failed"], -]); - - -/***/ }), - -/***/ 117: -/***/ ((__unused_webpack_module, exports) => { - - -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ASTNode = void 0; -class ASTNode { - accept(v) { - return v.visit(this); - } -} -exports.ASTNode = ASTNode; - - -/***/ }), - -/***/ 862: -/***/ ((__unused_webpack_module, exports) => { - - -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Cache = void 0; -// There is no way pass value by reference with JS and TS, but object -// This Cache is used to store output code temporarily -class Cache { - /** - * @description: constructor for Cache - * @param INDENT the IDENT string you want to use, such as 4 spaces - */ - constructor(INDENT) { - this.value = ""; - this.indent = 0; - this.flag = true; - this.INDENT = INDENT; - } - /** - * @description: when flag is true, there should be some indents - * @return void - */ - indentOn() { - this.flag = true; - } - /** - * @description: when flag is false, there should be no indents - * @return void - */ - indentOff() { - this.flag = false; - } - /** - * @description: increase indent - * @return void - */ - incIndent() { - this.indent++; - } - /** - * @description: decrease indent - * @return void - */ - decIndent() { - this.indent--; - } - /** - * @description: check whether indent is LT 0 - * @return boolean value representing whether indent is LT 0 - */ - checkIndent() { - return this.indent < 0; - } - /** - * @description: get indent - * @return indents - */ - getIndents() { - if (this.flag) { - let indents = ""; - for (let i = 0; i < this.indent; i++) { - indents += this.INDENT; - } - return indents; - } - else { - return ""; - } - } - /** - * @description: concat indents and HML/CSS code - * @param strings means HML/CSS code - * @return HML/CSS code after indents are set - */ - concat(...strings) { - this.value += this.getIndents(); - this.value = this.value.concat(...strings); - return String(this.value); - } - /** - * @description: concat indents and HML/CSS code - * @return HML/CSS code - */ - toString() { - return this.value; - } -} -exports.Cache = Cache; - - -/***/ }), - -/***/ 243: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Style = exports.Tag = void 0; -const ASTNode_1 = __webpack_require__(117); -class Tag extends ASTNode_1.ASTNode { - /** - * @description: constructor for Tag - * @param tagName is name of component - * @param attributes is attributes of component - * @param content is child elements or innerHtml of component - */ - constructor(tagName, attributes, content) { - super(); - this.tagName = tagName; - this.attributes = attributes; - this.content = content; - } -} -exports.Tag = Tag; -class Style extends ASTNode_1.ASTNode { - /** - * @description: constructor for Style - * @param kind distinguishes id and class - * @param name is name of id or class - * @param content is style name and value of component - */ - constructor(kind, name, content, mediaQuery) { - super(); - this.mediaQuery = undefined; - this.kind = kind; - this.name = name; - this.content = content; - this.mediaQuery = mediaQuery; - } -} -exports.Style = Style; - - -/***/ }), - -/***/ 573: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ASTNodeGenerator = void 0; -const AST_1 = __webpack_require__(243); -const Token_1 = __webpack_require__(334); -class ASTNodeGenerator { - /** - * @description: constructor for BridgeVisitor - * @param reference is cache for Harmony FA code - */ - constructor(reference) { - this.cache = reference; - } - /** - * @description: visitor mode dispatcher - * @param t Node in AST - */ - visit(t) { - if (t instanceof AST_1.Tag) { - this.genTag(t); - } - else if (t instanceof AST_1.Style) { - this.genStyle(t); - } - } - /** - * @description: code generator - * @param ref is cache for code - * @return ast node generator - */ - static getMethodGen(ref) { - if (ASTNodeGenerator.instance === undefined) { - ASTNodeGenerator.instance = new ASTNodeGenerator(ref); - } - else { - ASTNodeGenerator.instance.setCache(ref); - } - return ASTNodeGenerator.instance; - } - /** - * @description: cache for code - * @param ref is cache for code - * @return void - */ - setCache(ref) { - this.cache = ref; - } - /** - * @description: parse Tag in AST and generate code for Tag in cache - * @param t Tag in AST - * @return void - */ - genTag(t) { - this.cache.concat(Token_1.TokenClass.TAG_START, t.tagName); - this.cache.indentOff(); - t.attributes.forEach((value, key) => { - let valueBK = ""; - for (const char of value) { - valueBK += (char === "\"" ? """ : (char === "\n" ? " " : char)); - } - this.cache.concat(Token_1.TokenClass.SPACE, key, Token_1.TokenClass.ASSIGN, Token_1.TokenClass.LQUOTE, valueBK, Token_1.TokenClass.RQUOTE); - }); - if (t.content === null) { - this.cache.concat(Token_1.TokenClass.EMPTY_TAG_END); - } - else { - this.cache.concat(Token_1.TokenClass.TAG_END); - if (typeof t.content === "string") { - let contentBK = ""; - for (const char of t.content) { - contentBK += (char === "<" ? "<" : char); - } - this.cache.concat(contentBK); - } - else if (t.content.length !== 0) { - this.cache.concat(Token_1.TokenClass.NEW_LINE); - this.cache.indentOn(); - this.cache.incIndent(); - t.content.forEach((tag) => { - tag.accept(this); - this.cache.indentOff(); - this.cache.concat(Token_1.TokenClass.NEW_LINE); - this.cache.indentOn(); - }); - this.cache.decIndent(); - this.cache.indentOn(); - } - this.cache.concat(Token_1.TokenClass.END_TAG_START, t.tagName, Token_1.TokenClass.TAG_END); - } - } - /** - * @description: parse Style in AST and generate code for Style in cache - * @param s Style in AST - * @return void - */ - genStyle(s) { - if (s.mediaQuery !== undefined) { - this.cache.concat("@media"); - this.cache.indentOff(); - this.cache.concat(Token_1.TokenClass.SPACE, s.mediaQuery, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); - this.cache.indentOn(); - this.cache.incIndent(); - } - if (s.kind === "IDStyle") { - this.cache.concat(Token_1.TokenClass.ID_STYLE_START); - this.cache.indentOff(); - } - this.cache.concat(s.name, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); - this.cache.indentOn(); - this.cache.incIndent(); - s.content.forEach((value, key) => { - this.cache.concat(key, Token_1.TokenClass.COLON, Token_1.TokenClass.SPACE, value, Token_1.TokenClass.SEMICOLON, Token_1.TokenClass.NEW_LINE); - }); - this.cache.decIndent(); - this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); - if (s.mediaQuery !== undefined) { - this.cache.decIndent(); - this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); - } - this.cache.concat(Token_1.TokenClass.NEW_LINE); - } -} -exports.ASTNodeGenerator = ASTNodeGenerator; -ASTNodeGenerator.instance = undefined; - - -/***/ }), - -/***/ 844: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CSSBridge = exports.HMLBridge = void 0; -const AST_1 = __webpack_require__(243); -const PropertySet_1 = __webpack_require__(571); -class HMLBridge { - constructor() { - this.errors = 0; - } - /** - * @description: generate error message - * @param msg is error message to show up in console - */ - error(msg) { - console.error("Code generating error: " + msg); - this.errors += 1; - } - /** - * @description: get error number - * @return error number - */ - getErrorCount() { - return this.errors; - } - /** - * @description: visitor guidance method for contents, - * sort out incoming type and guide to matching code generator - * @param visualModel is a object with Model or Container or CharUI primitive types to be generated - * @return a code tree representing input object - */ - visit(visualModel) { - const attributes = new Map([["id", visualModel.id]]); - let content = ""; - for (let [key, val] of visualModel.property) { - if (PropertySet_1.isAttribute(key)) { - if (typeof val !== "string") { - val = JSON.stringify(val); - } - attributes.set(key, val); - } - else if (PropertySet_1.isContent(key)) { - content = val; - } - } - if (visualModel.type === "list") { - attributes.set("itemscale", "false"); - } - if (visualModel.children.length > 0) { - content = []; - for (const visualChild of visualModel.children) { - content.push(visualChild.accept(this)); - } - } - return new AST_1.Tag(visualModel.type, attributes, content); - } -} -exports.HMLBridge = HMLBridge; -class CSSBridge { - constructor() { - this.errors = 0; - this.styles = []; - } - /** - * @description: generate error message - * @param msg is error message to show up in console - */ - error(msg) { - console.error("Code generating error: " + msg); - this.errors += 1; - } - /** - * @description: get error number - * @return error number - */ - getErrorCount() { - return this.errors; - } - /** - * @description: code generator for ID Style, which is CSS type in AST in IR - * @param visualModel is a object with CSS type to be generated - * @return a code tree representing Harmony FA CSS code - */ - genIDStyle(visualModel) { - var _a; - const getStyleMap = (property) => { - const styles = new Map(); - for (const prop of PropertySet_1.styleSet) { - if (property.has(prop) && PropertySet_1.isStyle(prop)) { - styles.set(prop, property.get(prop)); - } - } - return styles; - }; - const styles = getStyleMap(visualModel.property); - if (styles.size > 0) { - this.styles.push(new AST_1.Style("IDStyle", visualModel.id, styles)); - } - ((_a = visualModel.mediaProperty) !== null && _a !== void 0 ? _a : new Map()).forEach((value, key) => { - const queryStyles = getStyleMap(value); - if (queryStyles.size > 0) { - this.styles.push(new AST_1.Style("IDStyle", visualModel.id, queryStyles, key)); - } - }); - for (const visualChild of visualModel.children) { - visualChild.accept(this); - } - } - /** - * @description: visitor guidance method for contents, - * sort out incoming type and guide to matching code generator - * @param obj is a object with Model or Container or CharUI primitive types to be generated - * @return a code tree representing input object - */ - visit(obj) { - this.genIDStyle(obj); - return this.styles; - } -} -exports.CSSBridge = CSSBridge; - - -/***/ }), - -/***/ 55: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.genFACSS = exports.genFAHML = void 0; -const ASTNodeVisitor_1 = __webpack_require__(573); -const Cache_1 = __webpack_require__(862); -/** - * @description: generate HML - * @param t is Tag in AST - * @return HML code - */ -function genFAHML(t) { - const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); - t.accept(generator); - return generator.cache.toString(); -} -exports.genFAHML = genFAHML; -/** - * @description: generate CSS - * @param t is Style in AST - * @return CSS code - */ -function genFACSS(t) { - const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); - t.forEach((value) => { - value.accept(generator); - }); - return generator.cache.toString(); -} -exports.genFACSS = genFACSS; - - -/***/ }), - -/***/ 571: -/***/ ((__unused_webpack_module, exports) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isEvent = exports.isData = exports.isUnknown = exports.isContent = exports.isAttribute = exports.isStyle = exports.styleSet = void 0; -// Unlike the property list in ComponentList, this one is only used to tell a property is a style or an attribute -const SizeStyle = ["width", "height", "min-width", "min-height", "max-width", "max-height"]; -const FlexStyle = ["flex", "flex-grow", "flex-shrink", "flex-basis"]; -const BackgroundImageStyle = ["background", "background-image", "background-size", "background-position", "background-repeat"]; -const BackgroundStyle = ["background-color", ...BackgroundImageStyle]; -const PositionStyle = ["position", "display", "top", "right", "bottom", "left"]; -const PaddingStyle = ["padding", "padding-start", "padding-end", "padding-top", "padding-right", "padding-bottom", "padding-left"]; -const MarginStyle = ["margin", "margin-start", "margin-end", "margin-top", "margin-right", "margin-bottom", "margin-left"]; -const BorderStyle = ["border-width", "border-style", "border-color", "border-radius", "border-top-width", - "border-top-style", "border-top-color", "border-top-left-radius", "border-right-width", - "border-right-style", "border-right-color", "border-top-right-radius", "border-bottom-width", "border-bottom-style", - "border-bottom-color", "border-bottom-right-radius", "border-left-width", "border-left-style", "border-left-color", - "border-bottom-left-radius"]; -const gridStyle = ["grid-template-columns", "grid-template-rows", "grid-row-start", "grid-row-end", - "grid-column-start", "grid-column-end", "grid-gap", "grid-columns-gap", "grid-rows-gap"]; -const DisplayStyle = ["display", "opacity", "visibility"]; -const AtomicLayoutStyle = ["display-index", "flex-weight", "aspect-ratio"]; -const commonStyle = [...SizeStyle, ...PaddingStyle, ...MarginStyle, ...BorderStyle, ...BackgroundStyle, ...DisplayStyle, - ...FlexStyle, ...PositionStyle, ...AtomicLayoutStyle]; -const FlexSizeStyle = ["flex-wrap", "justify-content", "align-items", "align-content"]; -const FontStyle = ["font-size", "font-family", "font-style", "font-weight"]; -const divStyle = ["flex-direction", ...FlexSizeStyle]; -const textStyle = ["text-align", "line-height", "text-decoration", "letter-spacing", "max-lines", "text-overflow", - "allow-scale", "min-font-size", "max-font-size", "font-size-step", "prefer-font-sizes", ...FontStyle]; -const imageStyle = ["object-fit", "match-text-direction", "fit-original-size"]; -const dividerStyle = ["stroke-width", "line-cap"]; -const spanStyle = ["allow-scale", "text-decoration", "color", ...FontStyle]; -const buttonStyle = ["text-color", "allow-scale", "icon-width", "icon-height", "radius", ...FontStyle]; -const switchStyle = ["texton-color", "textoff-color", "text-padding", "allow-scale", ...FontStyle]; -const inputStyle = ["font-size", "font-family", "font-weight", "color", "placeholder-color", "allow-scale"]; -const refreshStyle = ["progress-color"]; -const chartStyle = ["stroke-width", "radius", "start-angle", "total-angle", "center-x", "center-y", "colors", "weights"]; -const swiperStyle = ["indicator-color", "indicator-selected-color", "indicator-size", "indicator-top", "indicator-right", - "indicator-bottom", "indicator-left"]; -const pickerStyle = ["column-height", "text-color", "allow-scale", "letter-spacing", "text-decoration", "line-height", "opacity", - ...FontStyle]; -const sliderStyle = ["color", "selected-color", "block-color"]; -const listStyle = ["flex-direction", "columns", "item-extent", "fade-color"]; -const listItemStyle = ["column-span"]; -const progressStyle = ["color", "stroke-width", "background-color", "secondary-color", "scale-width", "scale-number", - "start-angle", "total-angle", "center-x", "center-y", "radius"]; -exports.styleSet = new Set([ - ...commonStyle, - ...divStyle, - ...textStyle, - ...imageStyle, - ...spanStyle, - ...inputStyle, - ...buttonStyle, - ...switchStyle, - ...refreshStyle, - ...dividerStyle, - ...chartStyle, - ...pickerStyle, - ...sliderStyle, - ...swiperStyle, - ...listStyle, - ...listItemStyle, - ...progressStyle, - ...gridStyle, -]); -const commonAttribute = ["id", "ref", "disabled", "focusable", "data", "if", "for"]; -const imageAttribute = ["src", "alt"]; -const buttonAttribute = ["type", "value", "icon", "waiting"]; -const switchAttribute = ["checked", "showtext", "texton", "textoff"]; -const inputAttribute = ["type", "checked", "name", "value", "placeholder", "maxlength", "enterkeytype", "headericon"]; -const refreshAttribute = ["offset", "refreshing", "type", "lasttime", "friction"]; -const optionAttribute = ["value"]; -const chartAttribute = ["percent", "datasets", "options"]; -const swiperAttribute = ["index", "autoplay", "interval", "indicator", "digital", "indicatordisabled", "loop", "duration", "vertical"]; -const pickerAttribute = ["range", "selected", "start", "end", "lunar", "lunarSwitch", "columns", "hours", "containSecond"]; -const sliderAttribute = ["min", "max", "step", "showtips", "showsteps", "mode"]; -const menuAttribute = ["target", "title"]; -const clockAttribute = ["clockconfig", "showdigit", "hourswest"]; -const dividerAttribute = ["vertical"]; -const listAttribute = ["scrollpage", "cachedcount", "scrollbar", "scrolleffect", "shapemode", "indexer", "itemscale", - "itemcenter", "updateeffect", "scrollvibrate", "initialindex", "initialoffset"]; -const listItemAttribute = ["type", "primary", "section", "sticky", "stickyradius", "clickeffect"]; -const progressAttribute = ["type", "percent", "secondarypercent", "clockwise"]; -const commonEvent = ["ontouchstart", "ontouchmove", "ontouchcancel", "ontouchend", "onclick", "onlongpress", "onfocus", - "onblur", "onkey", "onswipe"]; -const imageEvent = ["oncomplete", "onerror"]; -const selectEvent = ["onchange"]; -const inputEvent = ["onchange", "onenterkeyclick"]; -const refreshEvent = ["onrefresh", "onpulldown"]; -const listEvent = ["onindexerchange", "onscroll", "onscrollbottom", "onscrolltop", "onscrollend", - "onscrolltouchup", "onrequestitem"]; -const listItemEvent = ["onsticky"]; -const swiperEvent = ["change", "onrotation"]; -const menuEvent = ["onselected", "oncancel"]; -const pickerEvent = ["oncolumnchange"]; -const dataSet = new Set([ - ...commonAttribute, - ...imageAttribute, - ...buttonAttribute, - ...refreshAttribute, - ...inputAttribute, - ...switchAttribute, - ...optionAttribute, - ...chartAttribute, - ...pickerAttribute, - ...sliderAttribute, - ...dividerAttribute, - ...listAttribute, - ...listItemAttribute, - ...swiperAttribute, - ...progressAttribute, - ...menuAttribute, - ...clockAttribute, -]); -const eventSet = new Set([ - ...commonEvent, - ...imageEvent, - ...inputEvent, - ...selectEvent, - ...refreshEvent, - ...swiperEvent, - ...listEvent, - ...listItemEvent, - ...menuEvent, - ...pickerEvent, -]); -function isStyle(s) { - return exports.styleSet.has(s); -} -exports.isStyle = isStyle; -function isAttribute(s) { - return dataSet.has(s) || eventSet.has(s); -} -exports.isAttribute = isAttribute; -function isContent(s) { - return s === "content"; -} -exports.isContent = isContent; -function isUnknown(s) { - return !isStyle(s) && !isAttribute(s); -} -exports.isUnknown = isUnknown; -function isData(s) { - return dataSet.has(s); -} -exports.isData = isData; -function isEvent(s) { - return eventSet.has(s); -} -exports.isEvent = isEvent; - - -/***/ }), - -/***/ 334: -/***/ ((__unused_webpack_module, exports) => { - - -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TokenClass = void 0; -var TokenClass; -(function (TokenClass) { - TokenClass[TokenClass["IDENTIFIER"] = 0] = "IDENTIFIER"; - // literals - TokenClass[TokenClass["STRING_LITERAL"] = 1] = "STRING_LITERAL"; - TokenClass[TokenClass["NUMBER"] = 2] = "NUMBER"; - TokenClass[TokenClass["CHARACTER"] = 3] = "CHARACTER"; - // special tokens - TokenClass[TokenClass["EOF"] = 4] = "EOF"; - TokenClass[TokenClass["INVALID"] = 5] = "INVALID"; - TokenClass["EMPTY_DATA"] = "empty"; - TokenClass["ASSIGN"] = "="; - // Escape character - TokenClass["NEW_LINE"] = "\n"; - TokenClass["CARRIAGE_RETURN"] = "\r"; - TokenClass["INDENT"] = " "; - // delimiters - TokenClass["SPACE"] = " "; - TokenClass["LQUOTE"] = "\""; - TokenClass["RQUOTE"] = "\""; - TokenClass["TAG_START"] = "<"; - TokenClass["TAG_END"] = ">"; - TokenClass["EMPTY_TAG_END"] = "/>"; - TokenClass["END_TAG_START"] = " { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TagTypeMap = void 0; -/** - *

Semantic Model

- * This is the Domain Specific Model for FA - * - * @author LowCode Group - * @version 1.0 - * @since 2020-08-27 - */ -const BaseSchema = { - id: "id", - tagName: "text", - attributes: "kv", - idStyle: "kv", - type: "kind", - accept: "accept", -}; -const BaseStyle = { - kind: "kind", - content: "kv", - accept: "accept", -}; -exports.TagTypeMap = new Map([ - ["button", "TextContent"], - ["span", "TextContent"], - ["divider", "TextContent"], - ["picker", "TextContent"], - ["option", "TextContent"], - ["clock", "TextContent"], - ["image", "Base"], - ["input", "Base"], - ["chart", "Base"], - ["slider", "Base"], - ["progress", "Base"], - ["text", "Text"], - ["div", "Container"], - ["list", "Container"], - ["list-item", "Container"], - ["list-item-group", "Container"], - ["refresh", "Container"], - ["dialog", "Container"], - ["stack", "Container"], - ["menu", "Container"], -]); - - -/***/ }), - -/***/ 207: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.formManager = void 0; -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -const Instance_1 = __webpack_require__(891); -const FormModel_1 = __webpack_require__(945); -exports.formManager = { - /** - * - * remove a key-value in data node - * @param key the entry to remove - */ - removeData(key) { - this.getFormModel().data.delete(key); - }, - /** - * - * add a key-value - * @param data - */ - addData(data) { - if (data instanceof Map) { - data.forEach((value, key) => { - this.getFormModel().data.set(key, value); - }); - } - else { - Object.keys(data).forEach(key => { - this.getFormModel().data.set(key, data[key]); - }); - } - }, - /** - * update all the data - * @param data - */ - updateAllData(data) { - this.getFormModel().data.clear(); - this.addData(data); - }, - /** - * - * add an action in action node - * @param actionName - * @param actionType - * @param params - * @param want want params - */ - addAction(actionName, actionType, params, want) { - const paramMap = new Map(); - if (params != null) { - Object.keys(params).forEach(key => { - paramMap.set(key, params[key]); - }); - } - const wantMap = new Map(); - if (want != null) { - Object.keys(want).forEach(key => { - wantMap.set(key, want[key]); - }); - } - this.getFormModel().actions.set(actionName, new FormModel_1.FormAction(actionType, paramMap, wantMap)); - }, - /** - * update all the actions - * @param map: the new actions to be updated - */ - updateAllActions(map) { - this.getFormModel().actions.clear(); - map.forEach((value, key) => { - const params = this.objectToMap(value.params); - const action = new FormModel_1.FormAction(value.actionType, params); - this.getFormModel().actions.set(key, action); - }); - }, - /** - * - * remove an action - * @param actionName - */ - removeAction(actionName) { - this.getFormModel().actions.delete(actionName); - }, - /** - * - * add params in an action - * @param actionName - * @param params - */ - addActionParams(actionName, params) { - var _a, _b; - const action = (_a = this.getFormModel().actions.get(actionName)) !== null && _a !== void 0 ? _a : new FormModel_1.FormAction(actionName); - const actionParams = (_b = action.params) !== null && _b !== void 0 ? _b : new Map(); - Object.keys(params).forEach(key => { - actionParams.set(key, params[key]); - }); - action.params = actionParams; - }, - /** - * - * remove params in an action - * @param actionName - * @param paramKey entry to remove - */ - removeActionParam(actionName, paramKey) { - var _a; - const action = this.getFormModel().actions.get(actionName); - (_a = action === null || action === void 0 ? void 0 : action.params) === null || _a === void 0 ? void 0 : _a.delete(paramKey); - }, - /** - * get the whole node - */ - getFormModel() { - return Instance_1.getInstance().formData; - }, - /** - * codegen formModel to json - */ - codegenToJson: function () { - const model = Instance_1.getInstance().formData; - const data = this.mapToObject(model.data); - const retObj = { actions: {}, data: {} }; - retObj.data = data; - model.actions.forEach((value, key) => { - retObj.actions[key] = {}; - retObj.actions[key].action = value.action; - if (value.params instanceof Map && value.params.size > 0) { - retObj.actions[key].params = this.mapToObject(value.params); - } - if (value.want instanceof Map && value.want.size > 0) { - retObj.actions[key].want = this.mapToObject(value.want); - } - }); - return JSON.stringify(retObj, null, 4); - }, - /** - * clear all datas and actions in model - */ - clear() { - Instance_1.getInstance().formData.data.clear(); - Instance_1.getInstance().formData.actions.clear(); - }, - /** - * - * convert a map to an object - * @param sourceMap - */ - mapToObject(sourceMap) { - if (sourceMap === undefined) { - return {}; - } - return Array.from(sourceMap.entries()).reduce((main, [key, value]) => (Object.assign(Object.assign({}, main), { [key]: value })), {}); - }, - /** - * convert an object to map - */ - objectToMap(sourceObj) { - const map = new Map(); - Object.keys(sourceObj).forEach((value, index) => { - map.set(value, sourceObj[value]); - }); - return map; - }, -}; - - -/***/ }), - -/***/ 945: -/***/ ((__unused_webpack_module, exports) => { - - -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.FormAction = exports.FormModel = void 0; -class FormModel { - constructor() { - this.data = new Map(); - this.actions = new Map(); - } -} -exports.FormModel = FormModel; -class FormAction { - constructor(action, params, want) { - this.action = action; - this.params = params; - this.want = want; - } -} -exports.FormAction = FormAction; - - -/***/ }), - -/***/ 509: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.deserializeForVersion1 = exports.rootToVisualContent = exports.visualToRootContent = exports.serializeForVersion1 = void 0; -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -const Instance_1 = __webpack_require__(891); -const VisualModel_1 = __webpack_require__(933); -const PropertySet_1 = __webpack_require__(571); -const AST_1 = __webpack_require__(282); -const FormModel_1 = __webpack_require__(945); -const Serialization_1 = __webpack_require__(977); -// map for extra data. key: name of extra data; value: extra data -const extraData = new Map(); -/** - * save old voisual model(version 1) - * @return {string} - */ -function serializeForVersion1(model) { - extraData.set("textMap", new Map()); - const content = convertToVersion1AST(model !== null && model !== void 0 ? model : Instance_1.getInstance().visualModel); - return JSON.stringify({ - VisualVersion: "1", - content: JSON.stringify(content), - extraData: JSON.stringify(convert(extraData)), - }); -} -exports.serializeForVersion1 = serializeForVersion1; -/** - * convert visual files to root files - * - * @param visualInput source input content - */ -function visualToRootContent(visualInput) { - try { - const instance = JSON.parse(visualInput, Serialization_1.reviver); - return serializeForVersion1(instance.visualModel); - } - catch (e) { - console.error("convert visual model to root model failed"); - } - return visualInput; -} -exports.visualToRootContent = visualToRootContent; -/** - * convert root files to visual files - * @param rootInput input source content - */ -function rootToVisualContent(rootInput) { - const visualFile = JSON.parse(rootInput); - const rootModel = JSON.parse(visualFile.content); - let extraData = "[\"$$map\",[\"textMap\",[\"$$map\"]]]"; - if (typeof visualFile.extraData === "string") { - extraData = JSON.parse(visualFile.extraData); - } - const visualModel = convertFromVersion1AST(rootModel, recover(extraData)); - if (!visualModel.property.has("flex-direction")) { - visualModel.property.set("flex-direction", "column"); - } - return JSON.stringify({ - document: { VisualVersion: "12", type: "FA" }, - visualModel: visualModel, - formData: new FormModel_1.FormModel(), - }, Serialization_1.replacer); -} -exports.rootToVisualContent = rootToVisualContent; -/** - * convert visualModel version12 to version1 - * @param visualModel - * @return {HmlNode} - */ -function convertToVersion1AST(visualModel) { - const attributes = Array.from(visualModel.property).filter(value => PropertySet_1.isAttribute(value[0])); - attributes.push(["id", visualModel.id]); - const idStyle = Array.from(visualModel.property).filter(value => PropertySet_1.isStyle(value[0])); - let type = AST_1.TagTypeMap.get(visualModel.type); - if (type === undefined) { - type = "Base"; - } - let content = visualModel.property.has("content") - ? visualModel.property.get("content") : []; - if (visualModel.children.length > 0) { - if (typeof content === "string") { - const textMap = extraData.get("textMap"); - if (textMap instanceof Map) { - textMap.set(visualModel.id, content); - } - } - content = visualModel.children.map(value => convertToVersion1AST(value)); - } - return { - id: visualModel.id, - tagName: visualModel.type, - attributes: attributes, - idStyle: idStyle, - type: type, - content: content, - }; -} -/** - * read old voisual model(version 1) - * @param input - */ -function deserializeForVersion1(input) { - try { - const visualFile = JSON.parse(input); - const rootModel = JSON.parse(visualFile.content); - let extraData = "[\"$$map\",[\"textMap\",[\"$$map\"]]]"; - if (typeof visualFile.extraData === "string") { - extraData = JSON.parse(visualFile.extraData); - } - Instance_1.getInstance().visualModel = convertFromVersion1AST(rootModel, recover(extraData)); - if (!Instance_1.getInstance().visualModel.property.has("flex-direction")) { - Instance_1.getInstance().visualModel.property.set("flex-direction", "column"); - } - } - catch (e) { - console.error("convert error"); - } -} -exports.deserializeForVersion1 = deserializeForVersion1; -/** - * convert visualModel version1 to version12 - * @param node - * @return {VisualModel} - */ -function convertFromVersion1AST(node, extraData) { - let textContent; - if (extraData instanceof Map) { - const textMap = extraData.get("textMap"); - if (textMap instanceof Map) { - textContent = textMap.get(node.id); - } - } - const res = new VisualModel_1.VisualModel({ - id: node.id, - type: node.tagName, - property: new Map([...node.attributes, ...node.idStyle]), - }); - if (typeof textContent === "string") { - res.property.set("content", textContent); - } - res.property.delete("id"); - if (typeof node.content === "string") { - res.property.set("content", node.content); - } - if (Array.isArray(node.content)) { - res.children = node.content.map(child => convertFromVersion1AST(child, extraData)); - } - return res; -} -/** - * @description: recover extraData array - * @param {string} input extraData array - * @return {DataType} extraData - */ -function recover(input) { - if (input instanceof Array && input.length > 0) { - if (input[0] === "$$map") { - input.shift(); - const res = new Map(); - for (const [key, value] of input) { - res.set(key, recover(value)); - } - return res; - } - } - return input; -} -/** - * @description: convert input extraData to array - * @param {string} input extraData - * @return {any} extraData array - */ -function convert(input) { - if (input instanceof Map) { - const res = ["$$map"]; - for (const [key, value] of input) { - res.push([key, convert(value)]); - } - return res; - } - return input; -} - - -/***/ }), - -/***/ 891: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.setInstance = exports.getInstance = void 0; -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -const VisualModel_1 = __webpack_require__(933); -const FormModel_1 = __webpack_require__(945); -const instance = { - document: { VisualVersion: "12", type: "FA" }, - visualModel: new VisualModel_1.VisualModel({ type: "div", id: "wrapper" }), - formData: new FormModel_1.FormModel(), -}; -/** - * instance is unique during the entire web page lifecycle - */ -function getInstance() { - return instance; -} -exports.getInstance = getInstance; -/** - * replace instance - * @param ins - */ -function setInstance(ins) { - for (const key in instance) { - if (Object.prototype.hasOwnProperty.call(ins, key)) { - instance[key] = ins[key]; - } - } -} -exports.setInstance = setInstance; - - -/***/ }), - -/***/ 977: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.reviver = exports.replacer = exports.deserialize = exports.serialize = void 0; -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -const VisualModel_1 = __webpack_require__(933); -const Instance_1 = __webpack_require__(891); -const Compatibility_1 = __webpack_require__(509); -/** - * @description: convert JsonModel to Json - * @return model in json format - */ -function serialize(version, input) { - if (version === 1) { - return Compatibility_1.serializeForVersion1(input); - } - return JSON.stringify(input !== null && input !== void 0 ? input : Instance_1.getInstance(), replacer); -} -exports.serialize = serialize; -/** - * @description: convert Json to JsonModel - * @return model in json format - */ -function deserialize(json) { - if (JSON.parse(json).VisualVersion === "1") { - return Compatibility_1.deserializeForVersion1(json); - } - const ins = JSON.parse(json, reviver); - Instance_1.setInstance(ins); -} -exports.deserialize = deserialize; -/** - * json replacer, turn any class into string - * @param key - * @param value - */ -function replacer(key, value) { - if (value instanceof Map) { - return { - dataType: "Map", - value: Object.fromEntries(value.entries()), - }; - } - else if (value instanceof Set) { - return { - dataType: "Set", - value: Array.from(value.entries()), - }; - } - else if (value instanceof VisualModel_1.VisualModel) { - const visualObj = new VisualModel_1.VisualModel({ type: "none" }); - const res = {}; - for (const visualKey in visualObj) { - if (Object.prototype.hasOwnProperty.call(value, visualKey)) { - res[visualKey] = value[visualKey]; - } - } - return { - dataType: "VisualModel", - value: res, - }; - } - else { - return value; - } -} -exports.replacer = replacer; -/** - * json reviver, true magic, replace plain json to classes - * @param key - * @param value - */ -function reviver(key, value) { - if (typeof value === "object" && value !== null && value !== undefined) { - if (value.dataType === "Map") { - return new Map(Object.entries(value.value)); - } - else if (value.dataType === "Set") { - return new Set(value.value); - } - else if (value.dataType === "VisualModel") { - const res = new VisualModel_1.VisualModel({ type: "" }); - Object.assign(res, value.value); - value = res; - } - } - return value; -} -exports.reviver = reviver; - - -/***/ }), - -/***/ 933: -/***/ ((__unused_webpack_module, exports) => { - - -/* - * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.VisualModel = void 0; -// sometimes the type of VisualModel would be add a suffix to distinguish origin component of GrapesJs -// e.g. button-visual -const typeSuffix = "-visual"; -class VisualModel { - constructor(obj) { - this.mediaProperty = undefined; - this.property = (obj.property !== undefined) ? obj.property : new Map(); - this.children = (obj.children !== undefined) ? obj.children : []; - if (obj.type === "wrapper") { - this.id = "wrapper"; - this.type = "div"; - return; - } - if (obj.type.endsWith(typeSuffix)) { - obj.type = obj.type.substring(0, obj.type.length - typeSuffix.length); - } - this.id = (obj.id !== undefined) ? obj.id : ""; - this.type = obj.type; - } - accept(v) { - return v.visit(this); - } -} -exports.VisualModel = VisualModel; - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -var exports = __webpack_exports__; - -/** - * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. - */ -Object.defineProperty(exports, "__esModule", ({ value: true })); -const errorMap_1 = __webpack_require__(784); -const Instance_1 = __webpack_require__(891); -const Serialization_1 = __webpack_require__(977); -const BridgeVisitor_1 = __webpack_require__(844); -const HmlCssCodeGenerator_1 = __webpack_require__(55); -const FormManager_1 = __webpack_require__(207); -const visualVersion = 12; -/** - * @description: codegen hml and css according to code in visual file - * @param source is code in visual file - * @return object of hmlCSS, errorType and errorMessage - */ -function genHmlAndCss(source) { - const retObj = { - hmlCss: { - hml: "", - css: "", - json: "", - }, - errorType: "", - errorMessage: "", - }; - try { - // parse source code in visual file - Serialization_1.deserialize(source); - const destVisualVersion = Instance_1.getInstance().document.VisualVersion; - const regex = /^([1-9]+[0-9]*)$/; - if (destVisualVersion === undefined) { - retObj.errorType = "versionError"; - } - else { - const expression = destVisualVersion.match(regex); - if (expression === null || parseInt(expression[1]) > visualVersion) { - retObj.errorType = "versionError"; - } - } - try { - const model = Instance_1.getInstance().visualModel; - const hmlCss = emitFA(model); - if (hmlCss.hml === "error" || hmlCss.css === "error") { - retObj.errorType = "codegenError"; - } - retObj.hmlCss = hmlCss; - if (Instance_1.getInstance().document.type === "FORM") { - retObj.hmlCss.json = FormManager_1.formManager.codegenToJson(); - } - } - catch (e) { - retObj.errorType = "modelError"; - } - } - catch (e) { - retObj.errorType = "fileError"; - } - if (retObj.errorType !== "") { - retObj.errorMessage = errorMap_1.errorMap.get(retObj.errorType); - retObj.hmlCss.hml = ""; - retObj.hmlCss.css = ""; - } - return retObj; -} -/** - * @description: output hml and css source code of the model - */ -function emitFA(rootModel) { - const hmlCss = { - hml: "", - css: "", - json: "", - }; - // generate hml - const hmlVisitor = new BridgeVisitor_1.HMLBridge(); - const ast = rootModel.accept(hmlVisitor); - const hmlRes = HmlCssCodeGenerator_1.genFAHML(ast); - if (hmlVisitor.getErrorCount() > 0) { - hmlCss.hml = "error"; - } - else { - hmlCss.hml = hmlRes; - } - // generate css - const cssVisitor = new BridgeVisitor_1.CSSBridge(); - const styles = rootModel.accept(cssVisitor); - const cssRes = HmlCssCodeGenerator_1.genFACSS(styles); - if (cssVisitor.getErrorCount() > 0) { - hmlCss.css = "error"; - } - else { - hmlCss.css = cssRes; - } - return hmlCss; -} -exports.genHmlAndCss = genHmlAndCss; - -})(); - -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 784: +/***/ ((__unused_webpack_module, exports) => { + + +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.errorMap = void 0; +exports.errorMap = new Map([ + ["fileError", "Visual file is damaged"], + ["versionError", "Version number of visual file does not match"], + ["modelError", "Visual model in visual file is damaged"], + ["codegenError", "Codegen hml and css failed"], +]); + + +/***/ }), + +/***/ 117: +/***/ ((__unused_webpack_module, exports) => { + + +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ASTNode = void 0; +class ASTNode { + accept(v) { + return v.visit(this); + } +} +exports.ASTNode = ASTNode; + + +/***/ }), + +/***/ 862: +/***/ ((__unused_webpack_module, exports) => { + + +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Cache = void 0; +// There is no way pass value by reference with JS and TS, but object +// This Cache is used to store output code temporarily +class Cache { + /** + * @description: constructor for Cache + * @param INDENT the IDENT string you want to use, such as 4 spaces + */ + constructor(INDENT) { + this.value = ""; + this.indent = 0; + this.flag = true; + this.INDENT = INDENT; + } + /** + * @description: when flag is true, there should be some indents + * @return void + */ + indentOn() { + this.flag = true; + } + /** + * @description: when flag is false, there should be no indents + * @return void + */ + indentOff() { + this.flag = false; + } + /** + * @description: increase indent + * @return void + */ + incIndent() { + this.indent++; + } + /** + * @description: decrease indent + * @return void + */ + decIndent() { + this.indent--; + } + /** + * @description: check whether indent is LT 0 + * @return boolean value representing whether indent is LT 0 + */ + checkIndent() { + return this.indent < 0; + } + /** + * @description: get indent + * @return indents + */ + getIndents() { + if (this.flag) { + let indents = ""; + for (let i = 0; i < this.indent; i++) { + indents += this.INDENT; + } + return indents; + } + else { + return ""; + } + } + /** + * @description: concat indents and HML/CSS code + * @param strings means HML/CSS code + * @return HML/CSS code after indents are set + */ + concat(...strings) { + this.value += this.getIndents(); + this.value = this.value.concat(...strings); + return String(this.value); + } + /** + * @description: concat indents and HML/CSS code + * @return HML/CSS code + */ + toString() { + return this.value; + } +} +exports.Cache = Cache; + + +/***/ }), + +/***/ 243: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Style = exports.Tag = void 0; +const ASTNode_1 = __webpack_require__(117); +class Tag extends ASTNode_1.ASTNode { + /** + * @description: constructor for Tag + * @param tagName is name of component + * @param attributes is attributes of component + * @param content is child elements or innerHtml of component + */ + constructor(tagName, attributes, content) { + super(); + this.tagName = tagName; + this.attributes = attributes; + this.content = content; + } +} +exports.Tag = Tag; +class Style extends ASTNode_1.ASTNode { + /** + * @description: constructor for Style + * @param kind distinguishes id and class + * @param name is name of id or class + * @param content is style name and value of component + */ + constructor(kind, name, content, mediaQuery) { + super(); + this.mediaQuery = undefined; + this.kind = kind; + this.name = name; + this.content = content; + this.mediaQuery = mediaQuery; + } +} +exports.Style = Style; + + +/***/ }), + +/***/ 573: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ASTNodeGenerator = void 0; +const AST_1 = __webpack_require__(243); +const Token_1 = __webpack_require__(334); +class ASTNodeGenerator { + /** + * @description: constructor for BridgeVisitor + * @param reference is cache for Harmony FA code + */ + constructor(reference) { + this.cache = reference; + } + /** + * @description: visitor mode dispatcher + * @param t Node in AST + */ + visit(t) { + if (t instanceof AST_1.Tag) { + this.genTag(t); + } + else if (t instanceof AST_1.Style) { + this.genStyle(t); + } + } + /** + * @description: code generator + * @param ref is cache for code + * @return ast node generator + */ + static getMethodGen(ref) { + if (ASTNodeGenerator.instance === undefined) { + ASTNodeGenerator.instance = new ASTNodeGenerator(ref); + } + else { + ASTNodeGenerator.instance.setCache(ref); + } + return ASTNodeGenerator.instance; + } + /** + * @description: cache for code + * @param ref is cache for code + * @return void + */ + setCache(ref) { + this.cache = ref; + } + /** + * @description: parse Tag in AST and generate code for Tag in cache + * @param t Tag in AST + * @return void + */ + genTag(t) { + this.cache.concat(Token_1.TokenClass.TAG_START, t.tagName); + this.cache.indentOff(); + t.attributes.forEach((value, key) => { + let valueBK = ""; + for (const char of value) { + valueBK += (char === "\"" ? """ : (char === "\n" ? " " : char)); + } + this.cache.concat(Token_1.TokenClass.SPACE, key, Token_1.TokenClass.ASSIGN, Token_1.TokenClass.LQUOTE, valueBK, Token_1.TokenClass.RQUOTE); + }); + if (t.content === null) { + this.cache.concat(Token_1.TokenClass.EMPTY_TAG_END); + } + else { + this.cache.concat(Token_1.TokenClass.TAG_END); + if (typeof t.content === "string") { + let contentBK = ""; + for (const char of t.content) { + contentBK += (char === "<" ? "<" : char); + } + this.cache.concat(contentBK); + } + else if (t.content.length !== 0) { + this.cache.concat(Token_1.TokenClass.NEW_LINE); + this.cache.indentOn(); + this.cache.incIndent(); + t.content.forEach((tag) => { + tag.accept(this); + this.cache.indentOff(); + this.cache.concat(Token_1.TokenClass.NEW_LINE); + this.cache.indentOn(); + }); + this.cache.decIndent(); + this.cache.indentOn(); + } + this.cache.concat(Token_1.TokenClass.END_TAG_START, t.tagName, Token_1.TokenClass.TAG_END); + } + } + /** + * @description: parse Style in AST and generate code for Style in cache + * @param s Style in AST + * @return void + */ + genStyle(s) { + if (s.mediaQuery !== undefined) { + this.cache.concat("@media"); + this.cache.indentOff(); + this.cache.concat(Token_1.TokenClass.SPACE, s.mediaQuery, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); + this.cache.indentOn(); + this.cache.incIndent(); + } + if (s.kind === "IDStyle") { + this.cache.concat(Token_1.TokenClass.ID_STYLE_START); + this.cache.indentOff(); + } + this.cache.concat(s.name, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); + this.cache.indentOn(); + this.cache.incIndent(); + s.content.forEach((value, key) => { + this.cache.concat(key, Token_1.TokenClass.COLON, Token_1.TokenClass.SPACE, value, Token_1.TokenClass.SEMICOLON, Token_1.TokenClass.NEW_LINE); + }); + this.cache.decIndent(); + this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); + if (s.mediaQuery !== undefined) { + this.cache.decIndent(); + this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); + } + this.cache.concat(Token_1.TokenClass.NEW_LINE); + } +} +exports.ASTNodeGenerator = ASTNodeGenerator; +ASTNodeGenerator.instance = undefined; + + +/***/ }), + +/***/ 844: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CSSBridge = exports.HMLBridge = void 0; +const AST_1 = __webpack_require__(243); +const PropertySet_1 = __webpack_require__(571); +class HMLBridge { + constructor() { + this.errors = 0; + } + /** + * @description: generate error message + * @param msg is error message to show up in console + */ + error(msg) { + console.error("Code generating error: " + msg); + this.errors += 1; + } + /** + * @description: get error number + * @return error number + */ + getErrorCount() { + return this.errors; + } + /** + * @description: visitor guidance method for contents, + * sort out incoming type and guide to matching code generator + * @param visualModel is a object with Model or Container or CharUI primitive types to be generated + * @return a code tree representing input object + */ + visit(visualModel) { + const attributes = new Map([["id", visualModel.id]]); + let content = ""; + for (let [key, val] of visualModel.property) { + if (PropertySet_1.isAttribute(key)) { + if (typeof val !== "string") { + val = JSON.stringify(val); + } + attributes.set(key, val); + } + else if (PropertySet_1.isContent(key)) { + content = val; + } + } + if (visualModel.type === "list") { + attributes.set("itemscale", "false"); + } + if (visualModel.children.length > 0) { + content = []; + for (const visualChild of visualModel.children) { + content.push(visualChild.accept(this)); + } + } + return new AST_1.Tag(visualModel.type, attributes, content); + } +} +exports.HMLBridge = HMLBridge; +class CSSBridge { + constructor() { + this.errors = 0; + this.styles = []; + } + /** + * @description: generate error message + * @param msg is error message to show up in console + */ + error(msg) { + console.error("Code generating error: " + msg); + this.errors += 1; + } + /** + * @description: get error number + * @return error number + */ + getErrorCount() { + return this.errors; + } + /** + * @description: code generator for ID Style, which is CSS type in AST in IR + * @param visualModel is a object with CSS type to be generated + * @return a code tree representing Harmony FA CSS code + */ + genIDStyle(visualModel) { + var _a; + const getStyleMap = (property) => { + const styles = new Map(); + for (const prop of PropertySet_1.styleSet) { + if (property.has(prop) && PropertySet_1.isStyle(prop)) { + styles.set(prop, property.get(prop)); + } + } + return styles; + }; + const styles = getStyleMap(visualModel.property); + if (styles.size > 0) { + this.styles.push(new AST_1.Style("IDStyle", visualModel.id, styles)); + } + ((_a = visualModel.mediaProperty) !== null && _a !== void 0 ? _a : new Map()).forEach((value, key) => { + const queryStyles = getStyleMap(value); + if (queryStyles.size > 0) { + this.styles.push(new AST_1.Style("IDStyle", visualModel.id, queryStyles, key)); + } + }); + for (const visualChild of visualModel.children) { + visualChild.accept(this); + } + } + /** + * @description: visitor guidance method for contents, + * sort out incoming type and guide to matching code generator + * @param obj is a object with Model or Container or CharUI primitive types to be generated + * @return a code tree representing input object + */ + visit(obj) { + this.genIDStyle(obj); + return this.styles; + } +} +exports.CSSBridge = CSSBridge; + + +/***/ }), + +/***/ 55: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.genFACSS = exports.genFAHML = void 0; +const ASTNodeVisitor_1 = __webpack_require__(573); +const Cache_1 = __webpack_require__(862); +/** + * @description: generate HML + * @param t is Tag in AST + * @return HML code + */ +function genFAHML(t) { + const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); + t.accept(generator); + return generator.cache.toString(); +} +exports.genFAHML = genFAHML; +/** + * @description: generate CSS + * @param t is Style in AST + * @return CSS code + */ +function genFACSS(t) { + const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); + t.forEach((value) => { + value.accept(generator); + }); + return generator.cache.toString(); +} +exports.genFACSS = genFACSS; + + +/***/ }), + +/***/ 571: +/***/ ((__unused_webpack_module, exports) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isEvent = exports.isData = exports.isUnknown = exports.isContent = exports.isAttribute = exports.isStyle = exports.styleSet = void 0; +// Unlike the property list in ComponentList, this one is only used to tell a property is a style or an attribute +const SizeStyle = ["width", "height", "min-width", "min-height", "max-width", "max-height"]; +const FlexStyle = ["flex", "flex-grow", "flex-shrink", "flex-basis"]; +const BackgroundImageStyle = ["background", "background-image", "background-size", "background-position", "background-repeat"]; +const BackgroundStyle = ["background-color", ...BackgroundImageStyle]; +const PositionStyle = ["position", "display", "top", "right", "bottom", "left"]; +const PaddingStyle = ["padding", "padding-start", "padding-end", "padding-top", "padding-right", "padding-bottom", "padding-left"]; +const MarginStyle = ["margin", "margin-start", "margin-end", "margin-top", "margin-right", "margin-bottom", "margin-left"]; +const BorderStyle = ["border-width", "border-style", "border-color", "border-radius", "border-top-width", + "border-top-style", "border-top-color", "border-top-left-radius", "border-right-width", + "border-right-style", "border-right-color", "border-top-right-radius", "border-bottom-width", "border-bottom-style", + "border-bottom-color", "border-bottom-right-radius", "border-left-width", "border-left-style", "border-left-color", + "border-bottom-left-radius"]; +const gridStyle = ["grid-template-columns", "grid-template-rows", "grid-row-start", "grid-row-end", + "grid-column-start", "grid-column-end", "grid-gap", "grid-columns-gap", "grid-rows-gap"]; +const DisplayStyle = ["display", "opacity", "visibility"]; +const AtomicLayoutStyle = ["display-index", "flex-weight", "aspect-ratio"]; +const commonStyle = [...SizeStyle, ...PaddingStyle, ...MarginStyle, ...BorderStyle, ...BackgroundStyle, ...DisplayStyle, + ...FlexStyle, ...PositionStyle, ...AtomicLayoutStyle]; +const FlexSizeStyle = ["flex-wrap", "justify-content", "align-items", "align-content"]; +const FontStyle = ["font-size", "font-family", "font-style", "font-weight"]; +const divStyle = ["flex-direction", ...FlexSizeStyle]; +const textStyle = ["text-align", "line-height", "text-decoration", "letter-spacing", "max-lines", "text-overflow", + "allow-scale", "min-font-size", "max-font-size", "font-size-step", "prefer-font-sizes", ...FontStyle]; +const imageStyle = ["object-fit", "match-text-direction", "fit-original-size"]; +const dividerStyle = ["stroke-width", "line-cap"]; +const spanStyle = ["allow-scale", "text-decoration", "color", ...FontStyle]; +const buttonStyle = ["text-color", "allow-scale", "icon-width", "icon-height", "radius", ...FontStyle]; +const switchStyle = ["texton-color", "textoff-color", "text-padding", "allow-scale", ...FontStyle]; +const inputStyle = ["font-size", "font-family", "font-weight", "color", "placeholder-color", "allow-scale"]; +const refreshStyle = ["progress-color"]; +const chartStyle = ["stroke-width", "radius", "start-angle", "total-angle", "center-x", "center-y", "colors", "weights"]; +const swiperStyle = ["indicator-color", "indicator-selected-color", "indicator-size", "indicator-top", "indicator-right", + "indicator-bottom", "indicator-left"]; +const pickerStyle = ["column-height", "text-color", "allow-scale", "letter-spacing", "text-decoration", "line-height", "opacity", + ...FontStyle]; +const sliderStyle = ["color", "selected-color", "block-color"]; +const listStyle = ["flex-direction", "columns", "item-extent", "fade-color"]; +const listItemStyle = ["column-span"]; +const progressStyle = ["color", "stroke-width", "background-color", "secondary-color", "scale-width", "scale-number", + "start-angle", "total-angle", "center-x", "center-y", "radius"]; +exports.styleSet = new Set([ + ...commonStyle, + ...divStyle, + ...textStyle, + ...imageStyle, + ...spanStyle, + ...inputStyle, + ...buttonStyle, + ...switchStyle, + ...refreshStyle, + ...dividerStyle, + ...chartStyle, + ...pickerStyle, + ...sliderStyle, + ...swiperStyle, + ...listStyle, + ...listItemStyle, + ...progressStyle, + ...gridStyle, +]); +const commonAttribute = ["id", "ref", "disabled", "focusable", "data", "if", "for"]; +const imageAttribute = ["src", "alt"]; +const buttonAttribute = ["type", "value", "icon", "waiting"]; +const switchAttribute = ["checked", "showtext", "texton", "textoff"]; +const inputAttribute = ["type", "checked", "name", "value", "placeholder", "maxlength", "enterkeytype", "headericon"]; +const refreshAttribute = ["offset", "refreshing", "type", "lasttime", "friction"]; +const optionAttribute = ["value"]; +const chartAttribute = ["percent", "datasets", "options"]; +const swiperAttribute = ["index", "autoplay", "interval", "indicator", "digital", "indicatordisabled", "loop", "duration", "vertical"]; +const pickerAttribute = ["range", "selected", "start", "end", "lunar", "lunarSwitch", "columns", "hours", "containSecond"]; +const sliderAttribute = ["min", "max", "step", "showtips", "showsteps", "mode"]; +const menuAttribute = ["target", "title"]; +const clockAttribute = ["clockconfig", "showdigit", "hourswest"]; +const dividerAttribute = ["vertical"]; +const listAttribute = ["scrollpage", "cachedcount", "scrollbar", "scrolleffect", "shapemode", "indexer", "itemscale", + "itemcenter", "updateeffect", "scrollvibrate", "initialindex", "initialoffset"]; +const listItemAttribute = ["type", "primary", "section", "sticky", "stickyradius", "clickeffect"]; +const progressAttribute = ["type", "percent", "secondarypercent", "clockwise"]; +const commonEvent = ["ontouchstart", "ontouchmove", "ontouchcancel", "ontouchend", "onclick", "onlongpress", "onfocus", + "onblur", "onkey", "onswipe"]; +const imageEvent = ["oncomplete", "onerror"]; +const selectEvent = ["onchange"]; +const inputEvent = ["onchange", "onenterkeyclick"]; +const refreshEvent = ["onrefresh", "onpulldown"]; +const listEvent = ["onindexerchange", "onscroll", "onscrollbottom", "onscrolltop", "onscrollend", + "onscrolltouchup", "onrequestitem"]; +const listItemEvent = ["onsticky"]; +const swiperEvent = ["change", "onrotation"]; +const menuEvent = ["onselected", "oncancel"]; +const pickerEvent = ["oncolumnchange"]; +const dataSet = new Set([ + ...commonAttribute, + ...imageAttribute, + ...buttonAttribute, + ...refreshAttribute, + ...inputAttribute, + ...switchAttribute, + ...optionAttribute, + ...chartAttribute, + ...pickerAttribute, + ...sliderAttribute, + ...dividerAttribute, + ...listAttribute, + ...listItemAttribute, + ...swiperAttribute, + ...progressAttribute, + ...menuAttribute, + ...clockAttribute, +]); +const eventSet = new Set([ + ...commonEvent, + ...imageEvent, + ...inputEvent, + ...selectEvent, + ...refreshEvent, + ...swiperEvent, + ...listEvent, + ...listItemEvent, + ...menuEvent, + ...pickerEvent, +]); +function isStyle(s) { + return exports.styleSet.has(s); +} +exports.isStyle = isStyle; +function isAttribute(s) { + return dataSet.has(s) || eventSet.has(s); +} +exports.isAttribute = isAttribute; +function isContent(s) { + return s === "content"; +} +exports.isContent = isContent; +function isUnknown(s) { + return !isStyle(s) && !isAttribute(s); +} +exports.isUnknown = isUnknown; +function isData(s) { + return dataSet.has(s); +} +exports.isData = isData; +function isEvent(s) { + return eventSet.has(s); +} +exports.isEvent = isEvent; + + +/***/ }), + +/***/ 334: +/***/ ((__unused_webpack_module, exports) => { + + +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TokenClass = void 0; +var TokenClass; +(function (TokenClass) { + TokenClass[TokenClass["IDENTIFIER"] = 0] = "IDENTIFIER"; + // literals + TokenClass[TokenClass["STRING_LITERAL"] = 1] = "STRING_LITERAL"; + TokenClass[TokenClass["NUMBER"] = 2] = "NUMBER"; + TokenClass[TokenClass["CHARACTER"] = 3] = "CHARACTER"; + // special tokens + TokenClass[TokenClass["EOF"] = 4] = "EOF"; + TokenClass[TokenClass["INVALID"] = 5] = "INVALID"; + TokenClass["EMPTY_DATA"] = "empty"; + TokenClass["ASSIGN"] = "="; + // Escape character + TokenClass["NEW_LINE"] = "\n"; + TokenClass["CARRIAGE_RETURN"] = "\r"; + TokenClass["INDENT"] = " "; + // delimiters + TokenClass["SPACE"] = " "; + TokenClass["LQUOTE"] = "\""; + TokenClass["RQUOTE"] = "\""; + TokenClass["TAG_START"] = "<"; + TokenClass["TAG_END"] = ">"; + TokenClass["EMPTY_TAG_END"] = "/>"; + TokenClass["END_TAG_START"] = " { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TagTypeMap = void 0; +/** + *

Semantic Model

+ * This is the Domain Specific Model for FA + * + * @author LowCode Group + * @version 1.0 + * @since 2020-08-27 + */ +const BaseSchema = { + id: "id", + tagName: "text", + attributes: "kv", + idStyle: "kv", + type: "kind", + accept: "accept", +}; +const BaseStyle = { + kind: "kind", + content: "kv", + accept: "accept", +}; +exports.TagTypeMap = new Map([ + ["button", "TextContent"], + ["span", "TextContent"], + ["divider", "TextContent"], + ["picker", "TextContent"], + ["option", "TextContent"], + ["clock", "TextContent"], + ["image", "Base"], + ["input", "Base"], + ["chart", "Base"], + ["slider", "Base"], + ["progress", "Base"], + ["text", "Text"], + ["div", "Container"], + ["list", "Container"], + ["list-item", "Container"], + ["list-item-group", "Container"], + ["refresh", "Container"], + ["dialog", "Container"], + ["stack", "Container"], + ["menu", "Container"], +]); + + +/***/ }), + +/***/ 207: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.formManager = void 0; +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +const Instance_1 = __webpack_require__(891); +const FormModel_1 = __webpack_require__(945); +exports.formManager = { + /** + * + * remove a key-value in data node + * @param key the entry to remove + */ + removeData(key) { + this.getFormModel().data.delete(key); + }, + /** + * + * add a key-value + * @param data + */ + addData(data) { + if (data instanceof Map) { + data.forEach((value, key) => { + this.getFormModel().data.set(key, value); + }); + } + else { + Object.keys(data).forEach(key => { + this.getFormModel().data.set(key, data[key]); + }); + } + }, + /** + * update all the data + * @param data + */ + updateAllData(data) { + this.getFormModel().data.clear(); + this.addData(data); + }, + /** + * + * add an action in action node + * @param actionName + * @param actionType + * @param params + * @param want want params + */ + addAction(actionName, actionType, params, want) { + const paramMap = new Map(); + if (params != null) { + Object.keys(params).forEach(key => { + paramMap.set(key, params[key]); + }); + } + const wantMap = new Map(); + if (want != null) { + Object.keys(want).forEach(key => { + wantMap.set(key, want[key]); + }); + } + this.getFormModel().actions.set(actionName, new FormModel_1.FormAction(actionType, paramMap, wantMap)); + }, + /** + * update all the actions + * @param map: the new actions to be updated + */ + updateAllActions(map) { + this.getFormModel().actions.clear(); + map.forEach((value, key) => { + const params = this.objectToMap(value.params); + const action = new FormModel_1.FormAction(value.actionType, params); + this.getFormModel().actions.set(key, action); + }); + }, + /** + * + * remove an action + * @param actionName + */ + removeAction(actionName) { + this.getFormModel().actions.delete(actionName); + }, + /** + * + * add params in an action + * @param actionName + * @param params + */ + addActionParams(actionName, params) { + var _a, _b; + const action = (_a = this.getFormModel().actions.get(actionName)) !== null && _a !== void 0 ? _a : new FormModel_1.FormAction(actionName); + const actionParams = (_b = action.params) !== null && _b !== void 0 ? _b : new Map(); + Object.keys(params).forEach(key => { + actionParams.set(key, params[key]); + }); + action.params = actionParams; + }, + /** + * + * remove params in an action + * @param actionName + * @param paramKey entry to remove + */ + removeActionParam(actionName, paramKey) { + var _a; + const action = this.getFormModel().actions.get(actionName); + (_a = action === null || action === void 0 ? void 0 : action.params) === null || _a === void 0 ? void 0 : _a.delete(paramKey); + }, + /** + * get the whole node + */ + getFormModel() { + return Instance_1.getInstance().formData; + }, + /** + * codegen formModel to json + */ + codegenToJson: function () { + const model = Instance_1.getInstance().formData; + const data = this.mapToObject(model.data); + const retObj = { actions: {}, data: {} }; + retObj.data = data; + model.actions.forEach((value, key) => { + retObj.actions[key] = {}; + retObj.actions[key].action = value.action; + if (value.params instanceof Map && value.params.size > 0) { + retObj.actions[key].params = this.mapToObject(value.params); + } + if (value.want instanceof Map && value.want.size > 0) { + retObj.actions[key].want = this.mapToObject(value.want); + } + }); + return JSON.stringify(retObj, null, 4); + }, + /** + * clear all datas and actions in model + */ + clear() { + Instance_1.getInstance().formData.data.clear(); + Instance_1.getInstance().formData.actions.clear(); + }, + /** + * + * convert a map to an object + * @param sourceMap + */ + mapToObject(sourceMap) { + if (sourceMap === undefined) { + return {}; + } + return Array.from(sourceMap.entries()).reduce((main, [key, value]) => (Object.assign(Object.assign({}, main), { [key]: value })), {}); + }, + /** + * convert an object to map + */ + objectToMap(sourceObj) { + const map = new Map(); + Object.keys(sourceObj).forEach((value, index) => { + map.set(value, sourceObj[value]); + }); + return map; + }, +}; + + +/***/ }), + +/***/ 945: +/***/ ((__unused_webpack_module, exports) => { + + +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.FormAction = exports.FormModel = void 0; +class FormModel { + constructor() { + this.data = new Map(); + this.actions = new Map(); + } +} +exports.FormModel = FormModel; +class FormAction { + constructor(action, params, want) { + this.action = action; + this.params = params; + this.want = want; + } +} +exports.FormAction = FormAction; + + +/***/ }), + +/***/ 509: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.deserializeForVersion1 = exports.rootToVisualContent = exports.visualToRootContent = exports.serializeForVersion1 = void 0; +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +const Instance_1 = __webpack_require__(891); +const VisualModel_1 = __webpack_require__(933); +const PropertySet_1 = __webpack_require__(571); +const AST_1 = __webpack_require__(282); +const FormModel_1 = __webpack_require__(945); +const Serialization_1 = __webpack_require__(977); +// map for extra data. key: name of extra data; value: extra data +const extraData = new Map(); +/** + * save old voisual model(version 1) + * @return {string} + */ +function serializeForVersion1(model) { + extraData.set("textMap", new Map()); + const content = convertToVersion1AST(model !== null && model !== void 0 ? model : Instance_1.getInstance().visualModel); + return JSON.stringify({ + VisualVersion: "1", + content: JSON.stringify(content), + extraData: JSON.stringify(convert(extraData)), + }); +} +exports.serializeForVersion1 = serializeForVersion1; +/** + * convert visual files to root files + * + * @param visualInput source input content + */ +function visualToRootContent(visualInput) { + try { + const instance = JSON.parse(visualInput, Serialization_1.reviver); + return serializeForVersion1(instance.visualModel); + } + catch (e) { + console.error("convert visual model to root model failed"); + } + return visualInput; +} +exports.visualToRootContent = visualToRootContent; +/** + * convert root files to visual files + * @param rootInput input source content + */ +function rootToVisualContent(rootInput) { + const visualFile = JSON.parse(rootInput); + const rootModel = JSON.parse(visualFile.content); + let extraData = "[\"$$map\",[\"textMap\",[\"$$map\"]]]"; + if (typeof visualFile.extraData === "string") { + extraData = JSON.parse(visualFile.extraData); + } + const visualModel = convertFromVersion1AST(rootModel, recover(extraData)); + if (!visualModel.property.has("flex-direction")) { + visualModel.property.set("flex-direction", "column"); + } + return JSON.stringify({ + document: { VisualVersion: "12", type: "FA" }, + visualModel: visualModel, + formData: new FormModel_1.FormModel(), + }, Serialization_1.replacer); +} +exports.rootToVisualContent = rootToVisualContent; +/** + * convert visualModel version12 to version1 + * @param visualModel + * @return {HmlNode} + */ +function convertToVersion1AST(visualModel) { + const attributes = Array.from(visualModel.property).filter(value => PropertySet_1.isAttribute(value[0])); + attributes.push(["id", visualModel.id]); + const idStyle = Array.from(visualModel.property).filter(value => PropertySet_1.isStyle(value[0])); + let type = AST_1.TagTypeMap.get(visualModel.type); + if (type === undefined) { + type = "Base"; + } + let content = visualModel.property.has("content") + ? visualModel.property.get("content") : []; + if (visualModel.children.length > 0) { + if (typeof content === "string") { + const textMap = extraData.get("textMap"); + if (textMap instanceof Map) { + textMap.set(visualModel.id, content); + } + } + content = visualModel.children.map(value => convertToVersion1AST(value)); + } + return { + id: visualModel.id, + tagName: visualModel.type, + attributes: attributes, + idStyle: idStyle, + type: type, + content: content, + }; +} +/** + * read old voisual model(version 1) + * @param input + */ +function deserializeForVersion1(input) { + try { + const visualFile = JSON.parse(input); + const rootModel = JSON.parse(visualFile.content); + let extraData = "[\"$$map\",[\"textMap\",[\"$$map\"]]]"; + if (typeof visualFile.extraData === "string") { + extraData = JSON.parse(visualFile.extraData); + } + Instance_1.getInstance().visualModel = convertFromVersion1AST(rootModel, recover(extraData)); + if (!Instance_1.getInstance().visualModel.property.has("flex-direction")) { + Instance_1.getInstance().visualModel.property.set("flex-direction", "column"); + } + } + catch (e) { + console.error("convert error"); + } +} +exports.deserializeForVersion1 = deserializeForVersion1; +/** + * convert visualModel version1 to version12 + * @param node + * @return {VisualModel} + */ +function convertFromVersion1AST(node, extraData) { + let textContent; + if (extraData instanceof Map) { + const textMap = extraData.get("textMap"); + if (textMap instanceof Map) { + textContent = textMap.get(node.id); + } + } + const res = new VisualModel_1.VisualModel({ + id: node.id, + type: node.tagName, + property: new Map([...node.attributes, ...node.idStyle]), + }); + if (typeof textContent === "string") { + res.property.set("content", textContent); + } + res.property.delete("id"); + if (typeof node.content === "string") { + res.property.set("content", node.content); + } + if (Array.isArray(node.content)) { + res.children = node.content.map(child => convertFromVersion1AST(child, extraData)); + } + return res; +} +/** + * @description: recover extraData array + * @param {string} input extraData array + * @return {DataType} extraData + */ +function recover(input) { + if (input instanceof Array && input.length > 0) { + if (input[0] === "$$map") { + input.shift(); + const res = new Map(); + for (const [key, value] of input) { + res.set(key, recover(value)); + } + return res; + } + } + return input; +} +/** + * @description: convert input extraData to array + * @param {string} input extraData + * @return {any} extraData array + */ +function convert(input) { + if (input instanceof Map) { + const res = ["$$map"]; + for (const [key, value] of input) { + res.push([key, convert(value)]); + } + return res; + } + return input; +} + + +/***/ }), + +/***/ 891: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.setInstance = exports.getInstance = void 0; +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +const VisualModel_1 = __webpack_require__(933); +const FormModel_1 = __webpack_require__(945); +const instance = { + document: { VisualVersion: "12", type: "FA" }, + visualModel: new VisualModel_1.VisualModel({ type: "div", id: "wrapper" }), + formData: new FormModel_1.FormModel(), +}; +/** + * instance is unique during the entire web page lifecycle + */ +function getInstance() { + return instance; +} +exports.getInstance = getInstance; +/** + * replace instance + * @param ins + */ +function setInstance(ins) { + for (const key in instance) { + if (Object.prototype.hasOwnProperty.call(ins, key)) { + instance[key] = ins[key]; + } + } +} +exports.setInstance = setInstance; + + +/***/ }), + +/***/ 977: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.reviver = exports.replacer = exports.deserialize = exports.serialize = void 0; +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +const VisualModel_1 = __webpack_require__(933); +const Instance_1 = __webpack_require__(891); +const Compatibility_1 = __webpack_require__(509); +/** + * @description: convert JsonModel to Json + * @return model in json format + */ +function serialize(version, input) { + if (version === 1) { + return Compatibility_1.serializeForVersion1(input); + } + return JSON.stringify(input !== null && input !== void 0 ? input : Instance_1.getInstance(), replacer); +} +exports.serialize = serialize; +/** + * @description: convert Json to JsonModel + * @return model in json format + */ +function deserialize(json) { + if (JSON.parse(json).VisualVersion === "1") { + return Compatibility_1.deserializeForVersion1(json); + } + const ins = JSON.parse(json, reviver); + Instance_1.setInstance(ins); +} +exports.deserialize = deserialize; +/** + * json replacer, turn any class into string + * @param key + * @param value + */ +function replacer(key, value) { + if (value instanceof Map) { + return { + dataType: "Map", + value: Object.fromEntries(value.entries()), + }; + } + else if (value instanceof Set) { + return { + dataType: "Set", + value: Array.from(value.entries()), + }; + } + else if (value instanceof VisualModel_1.VisualModel) { + const visualObj = new VisualModel_1.VisualModel({ type: "none" }); + const res = {}; + for (const visualKey in visualObj) { + if (Object.prototype.hasOwnProperty.call(value, visualKey)) { + res[visualKey] = value[visualKey]; + } + } + return { + dataType: "VisualModel", + value: res, + }; + } + else { + return value; + } +} +exports.replacer = replacer; +/** + * json reviver, true magic, replace plain json to classes + * @param key + * @param value + */ +function reviver(key, value) { + if (typeof value === "object" && value !== null && value !== undefined) { + if (value.dataType === "Map") { + return new Map(Object.entries(value.value)); + } + else if (value.dataType === "Set") { + return new Set(value.value); + } + else if (value.dataType === "VisualModel") { + const res = new VisualModel_1.VisualModel({ type: "" }); + Object.assign(res, value.value); + value = res; + } + } + return value; +} +exports.reviver = reviver; + + +/***/ }), + +/***/ 933: +/***/ ((__unused_webpack_module, exports) => { + + +/* + * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.VisualModel = void 0; +// sometimes the type of VisualModel would be add a suffix to distinguish origin component of GrapesJs +// e.g. button-visual +const typeSuffix = "-visual"; +class VisualModel { + constructor(obj) { + this.mediaProperty = undefined; + this.property = (obj.property !== undefined) ? obj.property : new Map(); + this.children = (obj.children !== undefined) ? obj.children : []; + if (obj.type === "wrapper") { + this.id = "wrapper"; + this.type = "div"; + return; + } + if (obj.type.endsWith(typeSuffix)) { + obj.type = obj.type.substring(0, obj.type.length - typeSuffix.length); + } + this.id = (obj.id !== undefined) ? obj.id : ""; + this.type = obj.type; + } + accept(v) { + return v.visit(this); + } +} +exports.VisualModel = VisualModel; + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +var exports = __webpack_exports__; + +/** + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +const errorMap_1 = __webpack_require__(784); +const Instance_1 = __webpack_require__(891); +const Serialization_1 = __webpack_require__(977); +const BridgeVisitor_1 = __webpack_require__(844); +const HmlCssCodeGenerator_1 = __webpack_require__(55); +const FormManager_1 = __webpack_require__(207); +const visualVersion = 12; +/** + * @description: codegen hml and css according to code in visual file + * @param source is code in visual file + * @return object of hmlCSS, errorType and errorMessage + */ +function genHmlAndCss(source) { + const retObj = { + hmlCss: { + hml: "", + css: "", + json: "", + }, + errorType: "", + errorMessage: "", + }; + try { + // parse source code in visual file + Serialization_1.deserialize(source); + const destVisualVersion = Instance_1.getInstance().document.VisualVersion; + const regex = /^([1-9]+[0-9]*)$/; + if (destVisualVersion === undefined) { + retObj.errorType = "versionError"; + } + else { + const expression = destVisualVersion.match(regex); + if (expression === null || parseInt(expression[1]) > visualVersion) { + retObj.errorType = "versionError"; + } + } + try { + const model = Instance_1.getInstance().visualModel; + const hmlCss = emitFA(model); + if (hmlCss.hml === "error" || hmlCss.css === "error") { + retObj.errorType = "codegenError"; + } + retObj.hmlCss = hmlCss; + if (Instance_1.getInstance().document.type === "FORM") { + retObj.hmlCss.json = FormManager_1.formManager.codegenToJson(); + } + } + catch (e) { + retObj.errorType = "modelError"; + } + } + catch (e) { + retObj.errorType = "fileError"; + } + if (retObj.errorType !== "") { + retObj.errorMessage = errorMap_1.errorMap.get(retObj.errorType); + retObj.hmlCss.hml = ""; + retObj.hmlCss.css = ""; + } + return retObj; +} +/** + * @description: output hml and css source code of the model + */ +function emitFA(rootModel) { + const hmlCss = { + hml: "", + css: "", + json: "", + }; + // generate hml + const hmlVisitor = new BridgeVisitor_1.HMLBridge(); + const ast = rootModel.accept(hmlVisitor); + const hmlRes = HmlCssCodeGenerator_1.genFAHML(ast); + if (hmlVisitor.getErrorCount() > 0) { + hmlCss.hml = "error"; + } + else { + hmlCss.hml = hmlRes; + } + // generate css + const cssVisitor = new BridgeVisitor_1.CSSBridge(); + const styles = rootModel.accept(cssVisitor); + const cssRes = HmlCssCodeGenerator_1.genFACSS(styles); + if (cssVisitor.getErrorCount() > 0) { + hmlCss.css = "error"; + } + else { + hmlCss.css = cssRes; + } + return hmlCss; +} +exports.genHmlAndCss = genHmlAndCss; + +})(); + +var __webpack_export_target__ = exports; +for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; +if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); +/******/ })() ; \ No newline at end of file diff --git a/ace-loader/plugin/templater/component_validator.js b/ace-loader/plugin/templater/component_validator.js index 26e6c07..92e435f 100644 --- a/ace-loader/plugin/templater/component_validator.js +++ b/ace-loader/plugin/templater/component_validator.js @@ -179,7 +179,10 @@ function validateTagName(domNode, out, relativePath) { const log = out.log const oneChildNode = ['dialog', 'popup', 'badge', 'list-item'] const logType = process.env.DEVICE_LEVEL === DEVICE_LEVEL.LITE ? 'ERROR' : 'WARNING' - let pos = domNode.__location || {} + let pos = domNode.__location || domNode.sourceCodeLocation ? { + line: domNode.sourceCodeLocation.startLine, + col: domNode.sourceCodeLocation.endLine + } : {} const elementNamesInFile = elementNames[relativePath] || [] // validate tag diff --git a/ace-loader/src/genAbc-plugin.js b/ace-loader/src/genAbc-plugin.js index e33a8c5..6d1eeb8 100644 --- a/ace-loader/src/genAbc-plugin.js +++ b/ace-loader/src/genAbc-plugin.js @@ -38,11 +38,13 @@ let isWin = false let isMac = false let isDebug = false let arkDir +let nodeJs class GenAbcPlugin { - constructor(output_, arkDir_, isDebug_) { + constructor(output_, arkDir_, nodeJs_, isDebug_) { output = output_ arkDir = arkDir_ + nodeJs = nodeJs_ isDebug = isDebug_ } apply(compiler) { @@ -114,7 +116,7 @@ function js2abcFirst(inputPath) { js2abc = path.join(arkDir, 'build-mac', 'src', 'index.js'); } - const cmd = `node --expose-gc "${js2abc}" "${inputPath}" ${param}`; + const cmd = `${nodeJs} --expose-gc "${js2abc}" "${inputPath}" ${param}`; try { process.execSync(cmd) console.info(cmd) diff --git a/ace-loader/test/lite/expected/attribute.js b/ace-loader/test/lite/expected/attribute.js index f670fa0..f33257d 100644 --- a/ace-loader/test/lite/expected/attribute.js +++ b/ace-loader/test/lite/expected/attribute.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_c('slider', {'attrs' : {'max' : 100}} ),_c('image'),_c('div', {'attrs' : {'key' : \"day\",'value' : \"hello\"}} ),_c('text', {'attrs' : {'value' : \"hello\"}} ),_c('text', {'attrs' : {'value' : function () {return _vm.num}}} )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/bubble.js b/ace-loader/test/lite/expected/bubble.js index 554eb78..afa0db6 100644 --- a/ace-loader/test/lite/expected/bubble.js +++ b/ace-loader/test/lite/expected/bubble.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', {'staticClass' : [\"container\"]} , [_c('div', {'onBubbleEvents' : {'click' : _vm.test1}} ),_c('div', {'onBubbleEvents' : {'click' : _vm.test2}} ),_c('div', {'onBubbleEvents' : {'click' : _vm.test3}} ),_c('div', {'catchBubbleEvents' : {'click' : _vm.test4}} ),_c('div', {'onBubbleEvents' : {'click' : _vm.test5}} ),_c('div', {'onBubbleEvents' : {'click' : _vm.test6}} ),_c('div', {'onBubbleEvents' : {'click' : _vm.test7}} ),_c('div', {'catchBubbleEvents' : {'click' : _vm.test8}} ),_c('div', {'onCaptureEvents' : {'click' : _vm.test9}} ),_c('div', {'onCaptureEvents' : {'click' : _vm.test10}} ),_c('div', {'onCaptureEvents' : {'click' : _vm.test11}} ),_c('div', {'catchCaptureEvents' : {'click' : _vm.test12}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe1},'catchCaptureEvents' : {'longpress' : _vm.longpress1}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe2},'onCaptureEvents' : {'longpress' : _vm.longpress2}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe3},'onCaptureEvents' : {'longpress' : _vm.longpress3}} ),_c('div', {'catchBubbleEvents' : {'swipe' : _vm.swipe4},'onCaptureEvents' : {'longpress' : _vm.longpress4}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe5},'catchBubbleEvents' : {'longpress' : _vm.longpress5}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe6,'longpress' : _vm.longpress6}} ),_c('div', {'onBubbleEvents' : {'swipe' : _vm.swipe7,'longpress' : _vm.longpress7}} ),_c('div', {'catchBubbleEvents' : {'swipe' : _vm.swipe8},'onBubbleEvents' : {'longpress' : _vm.longpress8}} ),_c('div', {'onCaptureEvents' : {'swipe' : _vm.swipe9},'catchBubbleEvents' : {'longpress' : _vm.longpress9}} ),_c('div', {'onCaptureEvents' : {'swipe' : _vm.swipe10},'onBubbleEvents' : {'longpress' : _vm.longpress10}} ),_c('div', {'onCaptureEvents' : {'swipe' : _vm.swipe11},'onBubbleEvents' : {'longpress' : _vm.longpress11}} ),_c('div', {'catchCaptureEvents' : {'swipe' : _vm.swipe12},'onBubbleEvents' : {'longpress' : _vm.longpress12}} )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/class.js b/ace-loader/test/lite/expected/class.js index 2721e6c..543513e 100644 --- a/ace-loader/test/lite/expected/class.js +++ b/ace-loader/test/lite/expected/class.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_c('div', {'staticClass' : [\"container\"]} ),_c('div', {'staticClass' : [\"container\",\"table\"]} )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/event.js b/ace-loader/test/lite/expected/event.js index ff75958..99ff8b1 100644 --- a/ace-loader/test/lite/expected/event.js +++ b/ace-loader/test/lite/expected/event.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_c('div', {'onBubbleEvents' : {'click' : _vm.test}} ),_c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(_vm.value,evt)}}} ),_c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(_vm.value,_vm.time,evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput('(',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput('(',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput(')',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput(')',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput('kk',_vm.value,'dd',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput(_vm.value,_vm.time,'(',evt)}}} ),_c('input', {'onBubbleEvents' : {'click' : function (evt) {_vm.handleInput('(',_vm.value,_vm.time,evt)}}} )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/expression.js b/ace-loader/test/lite/expected/expression.js index 9347aa1..1cad19d 100644 --- a/ace-loader/test/lite/expected/expression.js +++ b/ace-loader/test/lite/expected/expression.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_c('text', {'attrs' : {'value' : function () {return _vm.ti||_vm.subTitle}}} ),_c('text', {'attrs' : {'value' : function () {return _vm.ti&&_vm.subTitle}}} ),_c('div', {'attrs' : {'value' : function () {return _vm.isArrived==='arrived'&&_vm.isTravel===false}}} ),_c('div', {'attrs' : {'value' : function () {return _vm.isArrived==='arrived'||_vm.isTravel===false}}} ),_c('div', {'attrs' : {'value' : function () {return !_vm.flag}}} ),_c('div', {'attrs' : {'value' : function () {return !!_vm.flag}}} )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/forDirective.js b/ace-loader/test/lite/expected/forDirective.js index 50fc560..c7f4c57 100644 --- a/ace-loader/test/lite/expected/forDirective.js +++ b/ace-loader/test/lite/expected/forDirective.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_l((function () {return _vm.list}),function($item,$idx){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test($item,evt)}}} , [_c('text', {'attrs' : {'value' : function () {return ($idx) + decodeURI('.') + ($item.name)}}} )] )}),_c('div', [_l((function () {return _vm.list}),function(personItem,$idx){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test($idx,evt)}}} , [_c('text', {'attrs' : {'value' : function () {return ($idx) + decodeURI('-') + (personItem.name) + decodeURI('--') + (personItem.age)}}} )] )}),_c('image', {'attrs' : {'src' : function () {return _vm.personItem}}} )] ),_c('div', [_l((function () {return _vm.list}),function(personItem,personIndex){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(personItem,evt)}}} , [_c('text', {'attrs' : {'value' : function () {return (personIndex) + decodeURI('.') + (personItem.name)}}} )] )}),_c('swiper', {'attrs' : {'index' : function () {return _vm.personIndex},'loop' : function () {return _vm.personItem}}} )] ),_l((function () {return _vm.list}),function(personItem,personIndex){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(personItem,evt)}}} , [_l((function () {return _vm.menu}),function(item,index){return _c('div', [_c('text', {'attrs' : {'value' : function () {return (personItem.id) + decodeURI('--') + (item.name)}}} )] )})] )}),_l((function () {return _vm.list}),function(personItem,personIndex){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(personItem,evt)}}} , [_l((function () {return personItem}),function(item,index){return _c('div', [_c('text', {'attrs' : {'value' : function () {return (index) + decodeURI('--') + (item.name)}}} )] )})] )}),_l((function () {return _vm.list}),function(personItem,personIndex){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(personItem,evt)}}} , [_c('div', {'attrs' : {'value' : function () {return (personIndex) + decodeURI('.') + (personItem.name)}},'onBubbleEvents' : {'click' : personItem.click}} )] )}),_l((function () {return value.list}),function(index,value){return _c('div', {'onBubbleEvents' : {'click' : function (evt) {_vm.test(value,evt)}}} , [_c('div', {'attrs' : {'value' : function () {return value.info}},'onBubbleEvents' : {'click' : value.click}} )] )})] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/ifDirective.js b/ace-loader/test/lite/expected/ifDirective.js index 2d41dda..3966b83 100644 --- a/ace-loader/test/lite/expected/ifDirective.js +++ b/ace-loader/test/lite/expected/ifDirective.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_i((function () {return _vm.conditionVar===1}),function(){return _c('text', {'attrs' : {'value' : function () {return _vm.componentData.if}}} )}),_c('div', {'staticClass' : [\"item-content\"]} , [_i((function () {return _vm.conditionVar===1}),function(){return _c('text', {'attrs' : {'value' : function () {return _vm.componentData.if}}} )}),_i((function () {return _vm.conditionVar===2&&!(_vm.conditionVar===1)}),function(){return _c('text', {'attrs' : {'value' : function () {return _vm.componentData.elif}}} )}),_i((function () {return !(_vm.conditionVar===2)&&!(_vm.conditionVar===1)}),function(){return _c('text', {'attrs' : {'value' : function () {return _vm.componentData.else}}} )})] ),_i((function () {return _vm.showTest}),function(){return _c('div', [_l((function () {return _vm.list}),function($item,$idx){return _c('div', [_c('text', {'attrs' : {'value' : function () {return ($idx) + decodeURI('.') + ($item.name)}}} )] )})] )}),_l((function () {return _vm.list}),function($item,$idx){return _c('div', [_i((function () {return _vm.showTest}),function(){return _c('div', [_c('text', {'attrs' : {'value' : function () {return ($idx) + decodeURI('.') + ($item.name)}}} )] )})] )}),_l((function () {return _vm.list}),function(personItem,personIndex){return _c('div', [_i((function () {return personIndex==1}),function(){return _c('div', [_c('text', {'attrs' : {'value' : function () {return personItem.name}}} )] )})] )})] ) }"} \ No newline at end of file diff --git a/ace-loader/test/lite/expected/inlineStyle.js b/ace-loader/test/lite/expected/inlineStyle.js index ce11834..62d7b63 100644 --- a/ace-loader/test/lite/expected/inlineStyle.js +++ b/ace-loader/test/lite/expected/inlineStyle.js @@ -1,16 +1,16 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + {"render": "function (vm) { var _vm = vm || this; return _c('div', [_c('div', {'staticStyle' : {'width' : 10}, } ),_c('div', {'dynamicStyle' :{'height' : function () {return _vm.num}}} ),_c('text', {'staticStyle' : {'color' : 13047173}, } ),_c('div', {'staticStyle' : {'color' : 14745599}, } ),_c('div', {'staticStyle' : {'animationDelay' : \"900ms\"}, } ),_c('div', {'staticStyle' : {'animationDuration' : \"200ms\"}, } ),_c('div', {'staticStyle' : {'animationIterationCount' : \"infinite\"}, } ),_c('div', {'staticStyle' : {'animationIterationCount' : 1000}, } ),_c('div', {'staticStyle' : {'backgroundImage' : \"url(/common/img/xmad.jpg)\"}, } ),_c('div', {'staticStyle' : {'backgroundImage' : \"url(/common/img/map.jpg)\"}, } )] ) }"} \ No newline at end of file diff --git a/ace-loader/test/rich/testcase/pages/class/class.js b/ace-loader/test/rich/testcase/pages/class/class.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/class/class.js +++ b/ace-loader/test/rich/testcase/pages/class/class.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/commonAttr/commonAttr.js b/ace-loader/test/rich/testcase/pages/commonAttr/commonAttr.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/commonAttr/commonAttr.js +++ b/ace-loader/test/rich/testcase/pages/commonAttr/commonAttr.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/event/event.js b/ace-loader/test/rich/testcase/pages/event/event.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/event/event.js +++ b/ace-loader/test/rich/testcase/pages/event/event.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/expression/expression.js b/ace-loader/test/rich/testcase/pages/expression/expression.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/expression/expression.js +++ b/ace-loader/test/rich/testcase/pages/expression/expression.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/exteriorStyle/exteriorStyle.js b/ace-loader/test/rich/testcase/pages/exteriorStyle/exteriorStyle.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/exteriorStyle/exteriorStyle.js +++ b/ace-loader/test/rich/testcase/pages/exteriorStyle/exteriorStyle.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/forDirective/forDirective.js b/ace-loader/test/rich/testcase/pages/forDirective/forDirective.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/forDirective/forDirective.js +++ b/ace-loader/test/rich/testcase/pages/forDirective/forDirective.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/ifDirective/ifDirective.js b/ace-loader/test/rich/testcase/pages/ifDirective/ifDirective.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/ifDirective/ifDirective.js +++ b/ace-loader/test/rich/testcase/pages/ifDirective/ifDirective.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/importCSS/importCSS.js b/ace-loader/test/rich/testcase/pages/importCSS/importCSS.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/importCSS/importCSS.js +++ b/ace-loader/test/rich/testcase/pages/importCSS/importCSS.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/inlineStyle/inlineStyle.js b/ace-loader/test/rich/testcase/pages/inlineStyle/inlineStyle.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/inlineStyle/inlineStyle.js +++ b/ace-loader/test/rich/testcase/pages/inlineStyle/inlineStyle.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/mediaQuery/mediaQuery.js b/ace-loader/test/rich/testcase/pages/mediaQuery/mediaQuery.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/mediaQuery/mediaQuery.js +++ b/ace-loader/test/rich/testcase/pages/mediaQuery/mediaQuery.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/privateAttr/privateAttr.js b/ace-loader/test/rich/testcase/pages/privateAttr/privateAttr.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/privateAttr/privateAttr.js +++ b/ace-loader/test/rich/testcase/pages/privateAttr/privateAttr.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/test/rich/testcase/pages/uncommonAttr/uncommonAttr.js b/ace-loader/test/rich/testcase/pages/uncommonAttr/uncommonAttr.js index d8fdade..3c54728 100644 --- a/ace-loader/test/rich/testcase/pages/uncommonAttr/uncommonAttr.js +++ b/ace-loader/test/rich/testcase/pages/uncommonAttr/uncommonAttr.js @@ -1,15 +1,15 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + diff --git a/ace-loader/webpack.rich.config.js b/ace-loader/webpack.rich.config.js index 1d78e6d..4a6e0b3 100644 --- a/ace-loader/webpack.rich.config.js +++ b/ace-loader/webpack.rich.config.js @@ -253,10 +253,14 @@ module.exports = (env) => { config.plugins.push(new ModuleCollectionPlugin()) if (env.compilerType && env.compilerType === 'ark') { let arkDir = path.join(__dirname, 'bin', 'ark'); - if (env.arkFrontendDir) { + if (env.arkFrontendDir) { arkDir = env.arkFrontendDir; } - config.plugins.push(new GenAbcPlugin(process.env.buildPath, arkDir, + let nodeJs = 'node'; + if (env.nodeJs) { + nodeJs = env.nodeJs + } + config.plugins.push(new GenAbcPlugin(process.env.buildPath, arkDir, nodeJs, env.buildMode === 'debug')) } else { if (env.deviceType) { -- Gitee From ae4cbaf0f68f42e48ed65c4e94bee755419f5763 Mon Sep 17 00:00:00 2001 From: houhaoyu Date: Wed, 22 Dec 2021 16:53:32 +0800 Subject: [PATCH 2/3] houhaoyu@huawei.com change command Signed-off-by: houhaoyu Change-Id: Id4597b20b078178f9855b84f45bdebf2a945b5c0 --- ace-loader/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ace-loader/package.json b/ace-loader/package.json index 7d26eba..f996f74 100644 --- a/ace-loader/package.json +++ b/ace-loader/package.json @@ -12,8 +12,7 @@ "Rich" ], "scripts": { - "build": "./node_modules/.bin/babel ./third_party/weex-loader/src ./src --out-dir lib && node ./module-source.js ./lib && node ./uglify-source.js ./lib", - "richtest": "cd test/rich/testcase && webpack --config ../../../webpack.rich.config.js && mocha ../test.js", + "build": "", "rich": "cd sample/rich && webpack --config ../../webpack.rich.config.js", "lite": "cd sample/lite && webpack --config ../../webpack.lite.config.js", "card": "cd sample/card && webpack --config ../../webpack.rich.config.js", -- Gitee From 93fc7ac96594c9c06d641fe6b9270e0e528706ce Mon Sep 17 00:00:00 2001 From: houhaoyu Date: Wed, 22 Dec 2021 20:26:45 +0800 Subject: [PATCH 3/3] houhaoyu@huawei.com fix conflict Signed-off-by: houhaoyu Change-Id: I4986b8c65edd312e005fef8e9e318e8ed44158a8 --- BUILD.gn | 7 +- ace-loader/src/genAbc-plugin.js | 140 ++++++++++++++---------------- ace-loader/webpack.rich.config.js | 4 +- 3 files changed, 68 insertions(+), 83 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 4fc4d1f..86206bd 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -126,9 +126,8 @@ ohos_copy("previewer_copy") { module_install_name = "" } -ace_loader_dir = +ace_loader_ark_dir = get_label_info(":ace_loader", "target_out_dir") + "/ace_loader_ark" - ohos_copy("ace_loader_ark") { sources = ace_loader_sources outputs = [ target_out_dir + "/$target_name/{{source_file_part}}" ] @@ -142,13 +141,13 @@ ohos_copy("ace_loader_ark_hap") { ":build_ace_loader_library", ] sources = [ ace_loader_lib_dir ] - outputs = [ ace_loader_dir + "/lib" ] + outputs = [ ace_loader_ark_dir + "/lib" ] license_file = "//third_party/parse5/LICENSE" } ohos_copy("ace_loader_node_modules") { deps = [ ":ace_loader_ark_hap" ] sources = [ "//developtools/ace-js2bundle/ace-loader/node_modules" ] - outputs = [ ace_loader_dir + "/node_modules" ] + outputs = [ ace_loader_ark_dir + "/node_modules" ] license_file = "//third_party/parse5/LICENSE" } diff --git a/ace-loader/src/genAbc-plugin.js b/ace-loader/src/genAbc-plugin.js index 6d1eeb8..74fdfbc 100644 --- a/ace-loader/src/genAbc-plugin.js +++ b/ace-loader/src/genAbc-plugin.js @@ -13,9 +13,9 @@ * limitations under the License. */ -const fs = require('fs') -const path = require('path') -const process = require('child_process') +const fs = require('fs'); +const path = require('path'); +const process = require('child_process'); const forward = '(global.___mainEntry___ = function (globalObjects) {' + '\n' + ' var define = globalObjects.define;' + '\n' + @@ -30,52 +30,47 @@ const forward = '(global.___mainEntry___ = function (globalObjects) {' + '\n' + ' var Image = globalObjects.Image;' + '\n' + ' var OffscreenCanvas = globalObjects.OffscreenCanvas;' + '\n' + ' (function(global) {' + '\n' + - ' "use strict";' + '\n' -const last = '\n' + '})(this.__appProto__);' + '\n' + '})' -const firstFileEXT = '_.js' -let output -let isWin = false -let isMac = false -let isDebug = false -let arkDir -let nodeJs + ' "use strict";' + '\n'; +const last = '\n' + '})(this.__appProto__);' + '\n' + '})'; +const firstFileEXT = '_.js'; +let output; +let isWin = false; +let isMac = false; +let isDebug = false; +let arkDir; +let nodeJs; class GenAbcPlugin { constructor(output_, arkDir_, nodeJs_, isDebug_) { - output = output_ - arkDir = arkDir_ - nodeJs = nodeJs_ - isDebug = isDebug_ + output = output_; + arkDir = arkDir_; + nodeJs = nodeJs_; + isDebug = isDebug_; } apply(compiler) { if (fs.existsSync(path.resolve(arkDir, 'build-win'))) { - isWin = true - } else { - if (fs.existsSync(path.resolve(arkDir, 'build-mac'))) { - isMac = true - } else { - if (!fs.existsSync(path.resolve(arkDir, 'build'))) { - console.error('\u001b[31m', `find build fail`, '\u001b[39m') - return - } - } + isWin = true; + } else if (fs.existsSync(path.resolve(arkDir, 'build-mac'))) { + isMac = true; + } else if (!fs.existsSync(path.resolve(arkDir, 'build'))) { + return; } compiler.hooks.emit.tap('GenAbcPlugin', (compilation) => { - const assets = compilation.assets - const keys = Object.keys(assets) + const assets = compilation.assets; + const keys = Object.keys(assets); keys.forEach(key => { // choice *.js if (output && path.extname(key) === '.js') { - let newContent = assets[key].source() + let newContent = assets[key].source(); if (key.search('./workers/') !== 0 && key !== 'commons.js' && key !== 'vendors.js') { - newContent = forward + newContent + last + newContent = forward + newContent + last; } if (key === 'commons.js' || key === 'vendors.js') { - newContent = `\n\n\n\n\n\n\n\n\n\n\n\n\n\n` + newContent + newContent = `\n\n\n\n\n\n\n\n\n\n\n\n\n\n` + newContent; } const keyPath = key.replace(/\.js$/, firstFileEXT) - writeFileSync(newContent, path.resolve(output, keyPath), key) + writeFileSync(newContent, path.resolve(output, keyPath), key); } }) }) @@ -83,58 +78,49 @@ class GenAbcPlugin { } function writeFileSync(inputString, output, jsBundleFile) { - const parent = path.join(output, '..') - if (!(fs.existsSync(parent) && fs.statSync(parent).isDirectory())) { - mkDir(parent) - } - fs.writeFileSync(output, inputString) - if (fs.existsSync(output)) { - js2abcFirst(output) - } else { - console.error('\u001b[31m', `Failed to convert file ${jsBundleFile} to bin. ${output} is lost`, '\u001b[39m') - } + const parent = path.join(output, '..'); + if (!(fs.existsSync(parent) && fs.statSync(parent).isDirectory())) { + mkDir(parent); + } + fs.writeFileSync(output, inputString); + if (fs.existsSync(output)) { + js2abcFirst(output); + } } function mkDir(path_) { - const parent = path.join(path_, '..') - if (!(fs.existsSync(parent) && !fs.statSync(parent).isFile())) { - mkDir(parent) - } - fs.mkdirSync(path_) + const parent = path.join(path_, '..'); + if (!(fs.existsSync(parent) && !fs.statSync(parent).isFile())) { + mkDir(parent); + } + fs.mkdirSync(path_); } function js2abcFirst(inputPath) { - let param = '-r' - if (isDebug) { - param += ' --debug' - } + let param = '-r'; + if (isDebug) { + param += ' --debug'; + } - let js2abc = path.join(arkDir, 'build', 'src', 'index.js'); - if (isWin) { - js2abc = path.join(arkDir, 'build-win', 'src', 'index.js'); - } else if (isMac){ - js2abc = path.join(arkDir, 'build-mac', 'src', 'index.js'); - } + let js2abc = path.join(arkDir, 'build', 'src', 'index.js'); + if (isWin) { + js2abc = path.join(arkDir, 'build-win', 'src', 'index.js'); + } else if (isMac) { + js2abc = path.join(arkDir, 'build-mac', 'src', 'index.js'); + } - const cmd = `${nodeJs} --expose-gc "${js2abc}" "${inputPath}" ${param}`; - try { - process.execSync(cmd) - console.info(cmd) - } catch (e) { - console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc`, '\u001b[39m') - } - if (fs.existsSync(inputPath)) { - fs.unlinkSync(inputPath) - } else { - console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc. ${inputPath} is lost`, '\u001b[39m') - } - let abcFile = inputPath.replace(/\.js$/, '.abc'); - if (fs.existsSync(abcFile)) { - let abcFileNew = abcFile.replace(/\_.abc$/, '.abc'); - fs.renameSync(abcFile, abcFileNew) - } else { - console.error('\u001b[31m', `${abcFile} is lost`, '\u001b[39m') - } + const cmd = `${nodeJs} --expose-gc "${js2abc}" "${inputPath}" ${param}`; + process.execSync(cmd); + + if (fs.existsSync(inputPath)) { + fs.unlinkSync(inputPath); + } + + let abcFile = inputPath.replace(/\.js$/, '.abc'); + if (fs.existsSync(abcFile)) { + let abcFileNew = abcFile.replace(/\_.abc$/, '.abc'); + fs.renameSync(abcFile, abcFileNew); + } } -module.exports = GenAbcPlugin +module.exports = GenAbcPlugin; diff --git a/ace-loader/webpack.rich.config.js b/ace-loader/webpack.rich.config.js index 4a6e0b3..4ef644c 100644 --- a/ace-loader/webpack.rich.config.js +++ b/ace-loader/webpack.rich.config.js @@ -254,11 +254,11 @@ module.exports = (env) => { if (env.compilerType && env.compilerType === 'ark') { let arkDir = path.join(__dirname, 'bin', 'ark'); if (env.arkFrontendDir) { - arkDir = env.arkFrontendDir; + arkDir = env.arkFrontendDir; } let nodeJs = 'node'; if (env.nodeJs) { - nodeJs = env.nodeJs + nodeJs = env.nodeJs; } config.plugins.push(new GenAbcPlugin(process.env.buildPath, arkDir, nodeJs, env.buildMode === 'debug')) -- Gitee