Git Product home page Git Product logo

wxml's Introduction

WXML

🌇WXML parser and serializer.

Build Status NPM Version NPM Downloads MIT License Standard Version Codecov DOI

Install

yarn add @vivaxy/wxml or npm i @vivaxy/wxml --save

Usage

import * as wxml from '@vivaxy/wxml';
const parsed = wxml.parse('<view></view>');
wxml.traverse(parsed, function visitor(node, parent) {
  const type = node.type;
  const parentNode = node.parentNode;

  if (type === wxml.NODE_TYPES.ELEMENT) {
    // handle element node
    const tagName = node.tagName;
    const attributes = node.attributes; // an object represents the attributes
    const childNodes = node.childNodes;
    const selfClosing = node.selfClosing; // if a node is self closing, like `<tag />`
  } else if (type === wxml.NODE_TYPES.TEXT) {
    // handle text node
    const textContent = node.textContent;
  } else if (type === wxml.NODE_TYPES.COMMENT) {
    // handle comment node
    const comment = node.comment;
  }
});
const serialized = wxml.serialize(parsed);

API

parse

(input: string) => AST

traverse

(node: Node, visitor: (node: Node, parent: Node) => void) => void

serialize

(node: Node) => string

wxml's People

Contributors

dependabot[bot] avatar renovate-bot avatar vivaxy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

wxml's Issues

标签的属性中包含json字符串数据时解析有误

const wxml = require("@vivaxy/wxml");
function dealwith(inputCode) {
    const parsed = wxml.parse(inputCode);
    wxml.traverse(parsed, function visitor(node) {
        console.log(node);
    });
    return wxml.serialize(parsed);
}

const test1 = dealwith(`
<view data-route="{{ {'name': 'user-info'} }}"></view>
<view class="icon-box" data-route='{\"name\": \"user-info\"}' ></view>
`);
console.log("test1:", test1);

实际输出结果:

正确<view data-route="{{ {'name': 'user-info'} }}"></view>
不正确<view class="icon-box" data-route="{"name": "user-info"}"></view>

期望输出结果:

<view data-route="{{ {'name': 'user-info'} }}"></view>
<view class="icon-box" data-route='{\"name\": \"user-info\"}' ></view>

从结果看,转义符被干掉了,单引号会被转成双引号,希望这块不被处理

[bug] 属性值解析不正确

版本:2.0.0
场景: 封装关了一个路由小程序组件,需要传入一个 路由配置对象
测试用例:

const wxml = require("@vivaxy/wxml");

function dealwith(inputCode) {
  const parsed = wxml.parse(inputCode);
  wxml.traverse(parsed, function visitor(node) {
    // 什么都不做
    console.log(node);
    // 这里打印的值是:见下图A
  });
  return wxml.serialize(parsed);
}

const test1 = dealwith(`
<router-link to="{{ { name: "pagenam", query: { id: 123 } } }}"></router-link>
`);
console.log("test1:", test1);

/*
期望输出:
<router-link to="{{ { name: "pagenam", query: { id: 123 } } }}"></router-link>
实际输出:
<router-link 123 to="{{ { name: " pagenam", query: { id: } }}"></router-link>

如果输入的id是如下字符串类型,则输出无问题:
<router-link to="{{ { name: "pagenam", query: { id: '123' } } }}"></router-link>
*/

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.