Full Code of didi/chameleon for AI

master 3531c7444cc2 cached
1333 files
4.4 MB
1.2M tokens
2185 symbols
1 requests
Download .txt
Showing preview only (5,102K chars total). Download the full file or copy to clipboard to get everything.
Repository: didi/chameleon
Branch: master
Commit: 3531c7444cc2
Files: 1333
Total size: 4.4 MB

Directory structure:
gitextract_si943cgs/

├── .eslintrc.js
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.md
│       └── feature_request.md
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── commitlint.config.js
├── elevate/
│   └── cr.yml
├── lerna.json
├── package.json
├── packages/
│   ├── babel-plugin-chameleon-import/
│   │   ├── .editorconfig
│   │   ├── .eslintignore
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Plugin.js
│   │   │   └── index.js
│   │   └── test/
│   │       └── fixtures/
│   │           ├── array-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── as-arguments/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── as-arguments-identifier/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── binary-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── conditions/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-name/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-style-path/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-style-path-ignore/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── execute-direct/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── execute-member/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── export-import/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── expression-statement/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── file-name/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── import-alias/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── import-css/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── keep-named-import/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── material-ui/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── member-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── modules-false/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-libraries/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-libraries-hilojs/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-words/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── new-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── object-shorthand/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── property/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── react-element/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── react-toolbox/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── return/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── specifier-alias/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── use-multiple-times/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── variable-declarator/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           └── variable-scope/
│   │               ├── actual.js
│   │               └── expected.js
│   ├── chameleon-css-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── handler/
│   │   │   └── lines.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── parser/
│   │   │   ├── media.js
│   │   │   ├── miniapp.js
│   │   │   ├── web.js
│   │   │   └── weex.js
│   │   ├── postcss/
│   │   │   ├── add-alipay-class.js
│   │   │   ├── cpx.js
│   │   │   ├── weex-plus.js
│   │   │   └── weex.js
│   │   ├── proxy/
│   │   │   ├── proxyMiniapp.js
│   │   │   └── proxyWeb.js
│   │   ├── test/
│   │   │   ├── parser-test/
│   │   │   │   ├── media.test.js
│   │   │   │   ├── miniapp.test.js
│   │   │   │   ├── web.test.js
│   │   │   │   └── weex.test.js
│   │   │   ├── postcss-test/
│   │   │   │   └── weex-plus.test.js
│   │   │   ├── proxy-test/
│   │   │   │   ├── proxyMiniapp.test.js
│   │   │   │   └── proxyWeb.test.js
│   │   │   ├── transform/
│   │   │   │   └── weex.test.js
│   │   │   └── utils.test.js
│   │   ├── transform/
│   │   │   ├── color.js
│   │   │   └── weex.js
│   │   └── utils.js
│   ├── chameleon-dev-proxy/
│   │   ├── .gitignore
│   │   ├── index.js
│   │   └── package.json
│   ├── chameleon-errors-webpack-plugin/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── index.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── core/
│   │       │   ├── extractWebpackError.js
│   │       │   ├── formatErrors.js
│   │       │   └── transformErrors.js
│   │       ├── formatters/
│   │       │   ├── defaultError.js
│   │       │   ├── eslintError.js
│   │       │   └── moduleNotFound.js
│   │       ├── friendly-errors-plugin.js
│   │       ├── output.js
│   │       ├── transformers/
│   │       │   ├── babelSyntax.js
│   │       │   ├── esLintError.js
│   │       │   └── moduleNotFound.js
│   │       └── utils/
│   │           ├── colors.js
│   │           └── index.js
│   ├── chameleon-linter/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── cli.js
│   │   ├── checkers/
│   │   │   ├── index.js
│   │   │   ├── json.js
│   │   │   ├── script.js
│   │   │   ├── style.js
│   │   │   └── template/
│   │   │       ├── index.js
│   │   │       └── lib/
│   │   │           ├── js-ast-parser.js
│   │   │           ├── json-ast-parser.js
│   │   │           └── template-ast-parser/
│   │   │               ├── classes/
│   │   │               │   ├── customized-node.js
│   │   │               │   ├── rule-loader.js
│   │   │               │   └── suspicious-node.js
│   │   │               ├── index.js
│   │   │               ├── lib/
│   │   │               │   ├── ast-tree-traversal.js
│   │   │               │   ├── customized-node-dispatcher.js
│   │   │               │   └── suspicious-node-dispatcher.js
│   │   │               ├── options.js
│   │   │               ├── rules/
│   │   │               │   ├── component/
│   │   │               │   │   ├── attr.js
│   │   │               │   │   ├── cml-method-node.js
│   │   │               │   │   ├── cml-prop-node.js
│   │   │               │   │   ├── cml.js
│   │   │               │   │   ├── index.js
│   │   │               │   │   ├── vue-method-node.js
│   │   │               │   │   ├── vue-prop-node.js
│   │   │               │   │   └── vue.js
│   │   │               │   └── template/
│   │   │               │       ├── cml.js
│   │   │               │       ├── index.js
│   │   │               │       ├── method-node.js
│   │   │               │       ├── mustache-node.js
│   │   │               │       ├── vue-directive-node.js
│   │   │               │       └── vue.js
│   │   │               └── tools/
│   │   │                   ├── dash-to-camelcase.js
│   │   │                   ├── flat-array.js
│   │   │                   ├── get-offset-pos-from-text.js
│   │   │                   ├── get-props-from-object-expression.js
│   │   │                   ├── index.js
│   │   │                   ├── is-origin-component.js
│   │   │                   ├── is-suspicious-textnode.js
│   │   │                   ├── loop-scope-handler.js
│   │   │                   ├── parse-single-expression.js
│   │   │                   └── rule-filter-match.js
│   │   ├── classes/
│   │   │   └── message.js
│   │   ├── config/
│   │   │   ├── .cmllintrc
│   │   │   ├── built-in-components/
│   │   │   │   └── index.js
│   │   │   ├── common-events.json
│   │   │   ├── fakeComps/
│   │   │   │   └── index.js
│   │   │   ├── globalVars.js
│   │   │   ├── index.js
│   │   │   ├── parser-config.js
│   │   │   ├── tag-embed-rules.json
│   │   │   └── white-list/
│   │   │       ├── cml-white-list.js
│   │   │       ├── index.js
│   │   │       ├── vue-white-list.js
│   │   │       ├── web-white-list.js
│   │   │       ├── weex-white-list.js
│   │   │       └── wx-white-list.js
│   │   ├── docs/
│   │   │   ├── cml-file-specification.md
│   │   │   ├── components/
│   │   │   │   ├── buildin/
│   │   │   │   │   ├── button.md
│   │   │   │   │   ├── checkbox.md
│   │   │   │   │   ├── input.md
│   │   │   │   │   ├── list.md
│   │   │   │   │   ├── page.md
│   │   │   │   │   ├── radio.md
│   │   │   │   │   ├── richtext.md
│   │   │   │   │   ├── scroller.md
│   │   │   │   │   ├── switch.md
│   │   │   │   │   ├── textarea.md
│   │   │   │   │   └── video.md
│   │   │   │   └── chameleon-ui/
│   │   │   │       ├── c-actionsheet.md
│   │   │   │       ├── c-aside.md
│   │   │   │       ├── c-checkbox-group.md
│   │   │   │       ├── c-col.md
│   │   │   │       ├── c-container.md
│   │   │   │       ├── c-dialog.md
│   │   │   │       ├── c-foot.md
│   │   │   │       ├── c-form-item.md
│   │   │   │       ├── c-form.md
│   │   │   │       ├── c-head.md
│   │   │   │       ├── c-main.md
│   │   │   │       ├── c-picker-item.md
│   │   │   │       ├── c-picker-panel.md
│   │   │   │       ├── c-picker.md
│   │   │   │       ├── c-popup.md
│   │   │   │       ├── c-radio-group.md
│   │   │   │       ├── c-refresh.md
│   │   │   │       ├── c-row.md
│   │   │   │       ├── c-tab-pane-item.md
│   │   │   │       ├── c-tab-pane.md
│   │   │   │       ├── c-tabs-item.md
│   │   │   │       ├── c-tabs.md
│   │   │   │       ├── c-tip.md
│   │   │   │       └── c-toast.md
│   │   │   ├── directory-specification.md
│   │   │   ├── interface-specification.md
│   │   │   └── templates/
│   │   │       ├── template-functionalities.md
│   │   │       ├── template-internal.md
│   │   │       └── template.md
│   │   ├── file-spec.js
│   │   ├── file-structure.js
│   │   ├── index.js
│   │   ├── linters/
│   │   │   ├── index.js
│   │   │   ├── json.js
│   │   │   ├── script.js
│   │   │   ├── style.js
│   │   │   └── template.js
│   │   ├── package.json
│   │   ├── test/
│   │   │   ├── checker/
│   │   │   │   └── cml/
│   │   │   │       ├── json/
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   ├── nonstandard.interface
│   │   │   │       │   ├── nonstandard.weex.cml
│   │   │   │       │   ├── nonstandard.wx.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       └── script/
│   │   │   │           ├── global-variable/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           ├── include/
│   │   │   │           │   ├── include-interface-fail.interface
│   │   │   │           │   ├── include-src-cml-fail.interface
│   │   │   │           │   ├── include-src-cml-mis-prop-fail.interface
│   │   │   │           │   ├── include-src-js-class-name-fail.interface
│   │   │   │           │   ├── include-src-js-fail.interface
│   │   │   │           │   ├── include-src-js-mis-prop-fail.interface
│   │   │   │           │   ├── origin-comp-interface.interface
│   │   │   │           │   ├── origin-interface.interface
│   │   │   │           │   └── src/
│   │   │   │           │       ├── someplatform-mis-class.js
│   │   │   │           │       ├── someplatform-mis-prop.cml
│   │   │   │           │       └── someplatform-mis-prop.js
│   │   │   │           ├── interfaces/
│   │   │   │           │   └── prop-not-defined.interface
│   │   │   │           ├── no-global-variable/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           ├── nointerface/
│   │   │   │           │   └── nonstandard.wx.cml
│   │   │   │           ├── nonstandard.cml
│   │   │   │           ├── properties-methods/
│   │   │   │           │   ├── event-not-defined.interface
│   │   │   │           │   ├── event-not-defined.web.cml
│   │   │   │           │   ├── property-not-defined.interface
│   │   │   │           │   └── property-not-defined.wx.cml
│   │   │   │           ├── standard/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           └── standard.cml
│   │   │   ├── cml.test.js
│   │   │   ├── config.test.js
│   │   │   ├── core/
│   │   │   │   └── standard/
│   │   │   │       ├── chameleon.config.js
│   │   │   │       └── src/
│   │   │   │           ├── app/
│   │   │   │           │   └── app.cml
│   │   │   │           ├── router.config.json
│   │   │   │           └── store/
│   │   │   │               └── index.js
│   │   │   ├── core.test.js
│   │   │   ├── interface/
│   │   │   │   └── common.interface
│   │   │   ├── interface.test.js
│   │   │   ├── linter/
│   │   │   │   └── cml/
│   │   │   │       ├── cml/
│   │   │   │       │   ├── nointerface/
│   │   │   │       │   │   └── standard.web.cml
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   ├── standard/
│   │   │   │       │   │   ├── standard.interface
│   │   │   │       │   │   ├── standard.web.cml
│   │   │   │       │   │   ├── standard.weex.cml
│   │   │   │       │   │   └── standard.wx.cml
│   │   │   │       │   ├── standard.cml
│   │   │   │       │   └── syntaxError/
│   │   │   │       │       ├── standard.interface
│   │   │   │       │       ├── standard.web.cml
│   │   │   │       │       ├── standard.weex.cml
│   │   │   │       │       └── standard.wx.cml
│   │   │   │       ├── json/
│   │   │   │       │   ├── .cmllintrc
│   │   │   │       │   ├── no-bracket.cml
│   │   │   │       │   ├── no-comma.cml
│   │   │   │       │   ├── no-quotes.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       ├── script/
│   │   │   │       │   ├── nonstandard-arrow.cml
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       └── style/
│   │   │   │           ├── .cmllintrc
│   │   │   │           ├── nest.cml
│   │   │   │           ├── no-bracket.cml
│   │   │   │           ├── no-semicolon.cml
│   │   │   │           ├── no-standard-important.cml
│   │   │   │           ├── no-standard.stylus.cml
│   │   │   │           ├── standard.cml
│   │   │   │           └── standard.stylus.cml
│   │   │   ├── lintrc/
│   │   │   │   ├── nonstandard/
│   │   │   │   │   └── .cmllintrc
│   │   │   │   └── standard/
│   │   │   │       └── .cmllintrc
│   │   │   ├── template/
│   │   │   │   ├── checker/
│   │   │   │   │   ├── template-lib-class.test.js
│   │   │   │   │   ├── template-lib-export.test.js
│   │   │   │   │   ├── template-lib-js.test.js
│   │   │   │   │   ├── template-lib-json.test.js
│   │   │   │   │   ├── template-lib-template.test.js
│   │   │   │   │   └── template.test.js
│   │   │   │   ├── docs/
│   │   │   │   │   ├── check/
│   │   │   │   │   │   ├── fail/
│   │   │   │   │   │   │   ├── index-props-events-cml.cml
│   │   │   │   │   │   │   ├── index-props-events-vue.cml
│   │   │   │   │   │   │   ├── index-props-methods-polymorphic.cml
│   │   │   │   │   │   │   ├── index-props-methods-single.cml
│   │   │   │   │   │   │   ├── index-vars-events.cml
│   │   │   │   │   │   │   ├── index-vars-methods-cml.cml
│   │   │   │   │   │   │   └── index-vars-methods-vue.cml
│   │   │   │   │   │   └── success/
│   │   │   │   │   │       ├── index-lib-check-class.cml
│   │   │   │   │   │       ├── index-lib-check-export.cml
│   │   │   │   │   │       ├── index-lib-check-implements.cml
│   │   │   │   │   │       ├── index-lib-check-plugin.cml
│   │   │   │   │   │       ├── index-lib-check-vue-class.cml
│   │   │   │   │   │       ├── index-lib-js-class.cml
│   │   │   │   │   │       ├── index-lib-js-export.cml
│   │   │   │   │   │       ├── index-lib-json-polymorphic.cml
│   │   │   │   │   │       ├── index-lib-json-single.cml
│   │   │   │   │   │       ├── index-lib-template-cml.cml
│   │   │   │   │   │       └── index-lib-template-vue.cml
│   │   │   │   │   └── components/
│   │   │   │   │       ├── c-checkbox/
│   │   │   │   │       │   └── c-checkbox.cml
│   │   │   │   │       ├── radio/
│   │   │   │   │       │   └── radio.cml
│   │   │   │   │       ├── scroller/
│   │   │   │   │       │   ├── scroller.interface
│   │   │   │   │       │   ├── scroller.web.cml
│   │   │   │   │       │   ├── scroller.weex.cml
│   │   │   │   │       │   └── scroller.wx.cml
│   │   │   │   │       ├── show-component/
│   │   │   │   │       │   ├── scroller.interface
│   │   │   │   │       │   ├── scroller.web.cml
│   │   │   │   │       │   ├── scroller.weex.cml
│   │   │   │   │       │   └── scroller.wx.cml
│   │   │   │   │       └── single/
│   │   │   │   │           └── single.cml
│   │   │   │   └── linter/
│   │   │   │       ├── cases/
│   │   │   │       │   ├── fail/
│   │   │   │       │   │   ├── built-in-embed-rule-excludes-error.js
│   │   │   │       │   │   ├── built-in-embed-rule-includes-error.js
│   │   │   │       │   │   ├── built-in-props-error.js
│   │   │   │       │   │   ├── built-in-props-lang-vue-error.js
│   │   │   │       │   │   ├── directive-cml-error.js
│   │   │   │       │   │   ├── directive-vue-error.js
│   │   │   │       │   │   ├── index.js
│   │   │   │       │   │   ├── lang-error.js
│   │   │   │       │   │   ├── origin-component-cml-directive-forbiden-error.js
│   │   │   │       │   │   ├── origin-component-skip-rules-error.js
│   │   │   │       │   │   ├── platform-specific-tags-error.js
│   │   │   │       │   │   ├── template-tag-error.js
│   │   │   │       │   │   └── usingcomponent-ref-error.js
│   │   │   │       │   └── pass/
│   │   │   │       │       ├── built-in-embed-rule-excludes-pass.js
│   │   │   │       │       ├── built-in-embed-rule-includes-pass.js
│   │   │   │       │       ├── built-in-props-lang-vue-pass.js
│   │   │   │       │       ├── built-in-props-pass.js
│   │   │   │       │       ├── component-is-pass.js
│   │   │   │       │       ├── index.js
│   │   │   │       │       ├── lang-pass.js
│   │   │   │       │       ├── origin-component-skip-rules-pass.js
│   │   │   │       │       ├── platform-specific-tags-pass.js
│   │   │   │       │       ├── tag-close.js
│   │   │   │       │       └── usingcomponent-ref-pass.js
│   │   │   │       └── template.test.js
│   │   │   └── utils.test.js
│   │   └── utils.js
│   ├── chameleon-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .scripts/
│   │   │   └── version.js
│   │   ├── LICENSE
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── cml-compile/
│   │   │   │   ├── handle-platform-css.js
│   │   │   │   ├── json-handle.js
│   │   │   │   ├── runtime/
│   │   │   │   │   ├── app.js
│   │   │   │   │   ├── common/
│   │   │   │   │   │   └── util.js
│   │   │   │   │   ├── component.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── page.js
│   │   │   │   │   ├── web/
│   │   │   │   │   │   ├── app.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── page.js
│   │   │   │   │   │   └── util.js
│   │   │   │   │   ├── weex/
│   │   │   │   │   │   └── util.js
│   │   │   │   │   └── wx/
│   │   │   │   │       └── util.js
│   │   │   │   └── wxml-selector.js
│   │   │   ├── helpers.js
│   │   │   ├── index.js
│   │   │   ├── interface-check/
│   │   │   │   ├── check.js
│   │   │   │   └── getScriptCode.js
│   │   │   ├── load-icon.js
│   │   │   ├── loader.js
│   │   │   ├── loaderMethods.js
│   │   │   ├── miniapp-script.js
│   │   │   ├── parser.js
│   │   │   ├── runtime/
│   │   │   │   ├── check.js
│   │   │   │   └── component-normalizer.js
│   │   │   ├── selector.js
│   │   │   └── utils/
│   │   │       ├── normalize.js
│   │   │       ├── prehandle.js
│   │   │       └── try-require.js
│   │   └── test/
│   │       └── src/
│   │           ├── cml-compile.test/
│   │           │   └── runtime/
│   │           │       ├── all-properties.js
│   │           │       ├── common-utils.test.js
│   │           │       ├── web-utils.test.js
│   │           │       ├── weex-utils.test.js
│   │           │       └── wx-utils.test.js
│   │           ├── load-icon.test.js
│   │           ├── loader.test.js
│   │           ├── loaderMethods.test.js
│   │           ├── parser.cml
│   │           ├── parser.test.js
│   │           ├── project/
│   │           │   └── src/
│   │           │       ├── components/
│   │           │       │   └── coma.cml
│   │           │       └── pages/
│   │           │           └── pagea.cml
│   │           └── utils.test/
│   │               ├── normalize.test.js
│   │               ├── prehandle.test.js
│   │               └── try-require.test.js
│   ├── chameleon-miniapp-target/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── JsonpChunkTemplatePlugin.js
│   │       ├── JsonpHotUpdateChunkTemplatePlugin.js
│   │       ├── JsonpMainTemplatePlugin.js
│   │       ├── JsonpTemplatePlugin.js
│   │       └── index.js
│   ├── chameleon-mixins/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── alipay-mixins.js
│   │   ├── common.js
│   │   ├── miniapp-utils/
│   │   │   └── px2cpx.js
│   │   ├── package.json
│   │   ├── test/
│   │   │   ├── common.test.js
│   │   │   ├── utils.test.js
│   │   │   ├── web-mixins.test.js
│   │   │   ├── weex-mixins.test.js
│   │   │   └── wx-mixins.test.js
│   │   ├── utils.js
│   │   ├── web-mixins.js
│   │   ├── web-utils/
│   │   │   └── px2cpx.js
│   │   ├── weex-mixins.js
│   │   ├── wx-alipay-common-mixins.js
│   │   └── wx-mixins.js
│   ├── chameleon-template-parse/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── gulpfile.js
│   │   ├── index.html
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── common/
│   │   │   │   ├── cml-map.js
│   │   │   │   ├── process-template.js
│   │   │   │   └── utils.js
│   │   │   ├── compile-template-cml.js
│   │   │   ├── compile-template-vue.js
│   │   │   ├── index.js
│   │   │   └── parser/
│   │   │       ├── index.js
│   │   │       ├── parse-animation-tag.js
│   │   │       ├── parse-attribute.js
│   │   │       ├── parse-class.js
│   │   │       ├── parse-condition.js
│   │   │       ├── parse-directive.js
│   │   │       ├── parse-event.js
│   │   │       ├── parse-interation.js
│   │   │       ├── parse-ref.js
│   │   │       ├── parse-style.js
│   │   │       └── parse-vue2wx.js
│   │   ├── test/
│   │   │   ├── common/
│   │   │   │   ├── process-template.test.js
│   │   │   │   └── utils.test.js
│   │   │   ├── index.js
│   │   │   └── parser/
│   │   │       ├── cml.test.js
│   │   │       ├── index.cml.test.js
│   │   │       ├── index.vue.test.js
│   │   │       └── vue.test.js
│   │   └── webpack.config.js
│   ├── chameleon-templates/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── component/
│   │   │   ├── component/
│   │   │   │   └── index.cml
│   │   │   ├── interface-component/
│   │   │   │   ├── index.alipay.cml
│   │   │   │   ├── index.baidu.cml
│   │   │   │   ├── index.interface
│   │   │   │   ├── index.qq.cml
│   │   │   │   ├── index.tt.cml
│   │   │   │   ├── index.web.cml
│   │   │   │   ├── index.weex.cml
│   │   │   │   └── index.wx.cml
│   │   │   └── interface-js/
│   │   │       └── index.interface
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── page/
│   │   │   └── index.cml
│   │   ├── project/
│   │   │   ├── .gitignore
│   │   │   ├── chameleon.config.js
│   │   │   ├── mock/
│   │   │   │   ├── api/
│   │   │   │   │   └── index.js
│   │   │   │   └── template/
│   │   │   │       └── index.php
│   │   │   ├── package.json
│   │   │   └── src/
│   │   │       ├── app/
│   │   │       │   └── app.cml
│   │   │       ├── components/
│   │   │       │   └── demo-com/
│   │   │       │       └── demo-com.cml
│   │   │       ├── pages/
│   │   │       │   └── index/
│   │   │       │       └── index.cml
│   │   │       ├── router.config.json
│   │   │       └── store/
│   │   │           ├── actions.js
│   │   │           ├── getters.js
│   │   │           ├── index.js
│   │   │           ├── mutations.js
│   │   │           └── state.js
│   │   ├── server/
│   │   │   ├── fisdata/
│   │   │   │   ├── FISData.class.php
│   │   │   │   ├── Manager.class.php
│   │   │   │   ├── README.md
│   │   │   │   ├── TestData.class.php
│   │   │   │   ├── bookmark.js
│   │   │   │   ├── index.tpl
│   │   │   │   ├── libs/
│   │   │   │   │   ├── JsonPro/
│   │   │   │   │   │   ├── CommonHelper.php
│   │   │   │   │   │   ├── Demo.php
│   │   │   │   │   │   ├── adocParser.php
│   │   │   │   │   │   ├── genArray.php
│   │   │   │   │   │   ├── genCase.php
│   │   │   │   │   │   ├── genConf.php
│   │   │   │   │   │   ├── genFile.php
│   │   │   │   │   │   ├── genInterface.php
│   │   │   │   │   │   ├── genLog.php
│   │   │   │   │   │   └── genValue.php
│   │   │   │   │   └── Util.class.php
│   │   │   │   ├── package.json
│   │   │   │   └── plugin/
│   │   │   │       ├── ChameleonData.class.php
│   │   │   │       ├── FISADOCData.class.php
│   │   │   │       ├── FISJSONData.class.php
│   │   │   │       ├── FISPHPData.class.php
│   │   │   │       ├── gen_plugins.php.sh
│   │   │   │       └── plugins.php
│   │   │   ├── index.php
│   │   │   ├── rewrite/
│   │   │   │   ├── README.md
│   │   │   │   └── Rewrite.php
│   │   │   ├── smarty/
│   │   │   │   ├── Smarty.class.php
│   │   │   │   ├── SmartyBC.class.php
│   │   │   │   ├── debug.tpl
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── block.textformat.php
│   │   │   │   │   ├── function.counter.php
│   │   │   │   │   ├── function.cycle.php
│   │   │   │   │   ├── function.fetch.php
│   │   │   │   │   ├── function.html_checkboxes.php
│   │   │   │   │   ├── function.html_image.php
│   │   │   │   │   ├── function.html_options.php
│   │   │   │   │   ├── function.html_radios.php
│   │   │   │   │   ├── function.html_select_date.php
│   │   │   │   │   ├── function.html_select_time.php
│   │   │   │   │   ├── function.html_table.php
│   │   │   │   │   ├── function.mailto.php
│   │   │   │   │   ├── function.math.php
│   │   │   │   │   ├── modifier.capitalize.php
│   │   │   │   │   ├── modifier.date_format.php
│   │   │   │   │   ├── modifier.debug_print_var.php
│   │   │   │   │   ├── modifier.escape.php
│   │   │   │   │   ├── modifier.regex_replace.php
│   │   │   │   │   ├── modifier.replace.php
│   │   │   │   │   ├── modifier.spacify.php
│   │   │   │   │   ├── modifier.truncate.php
│   │   │   │   │   ├── modifiercompiler.cat.php
│   │   │   │   │   ├── modifiercompiler.count_characters.php
│   │   │   │   │   ├── modifiercompiler.count_paragraphs.php
│   │   │   │   │   ├── modifiercompiler.count_sentences.php
│   │   │   │   │   ├── modifiercompiler.count_words.php
│   │   │   │   │   ├── modifiercompiler.default.php
│   │   │   │   │   ├── modifiercompiler.escape.php
│   │   │   │   │   ├── modifiercompiler.from_charset.php
│   │   │   │   │   ├── modifiercompiler.indent.php
│   │   │   │   │   ├── modifiercompiler.lower.php
│   │   │   │   │   ├── modifiercompiler.noprint.php
│   │   │   │   │   ├── modifiercompiler.string_format.php
│   │   │   │   │   ├── modifiercompiler.strip.php
│   │   │   │   │   ├── modifiercompiler.strip_tags.php
│   │   │   │   │   ├── modifiercompiler.to_charset.php
│   │   │   │   │   ├── modifiercompiler.unescape.php
│   │   │   │   │   ├── modifiercompiler.upper.php
│   │   │   │   │   ├── modifiercompiler.wordwrap.php
│   │   │   │   │   ├── outputfilter.trimwhitespace.php
│   │   │   │   │   ├── shared.escape_special_chars.php
│   │   │   │   │   ├── shared.literal_compiler_param.php
│   │   │   │   │   ├── shared.make_timestamp.php
│   │   │   │   │   ├── shared.mb_str_replace.php
│   │   │   │   │   ├── shared.mb_unicode.php
│   │   │   │   │   ├── shared.mb_wordwrap.php
│   │   │   │   │   └── variablefilter.htmlspecialchars.php
│   │   │   │   └── sysplugins/
│   │   │   │       ├── smarty_cacheresource.php
│   │   │   │       ├── smarty_cacheresource_custom.php
│   │   │   │       ├── smarty_cacheresource_keyvaluestore.php
│   │   │   │       ├── smarty_config_source.php
│   │   │   │       ├── smarty_internal_cacheresource_file.php
│   │   │   │       ├── smarty_internal_compile_append.php
│   │   │   │       ├── smarty_internal_compile_assign.php
│   │   │   │       ├── smarty_internal_compile_block.php
│   │   │   │       ├── smarty_internal_compile_break.php
│   │   │   │       ├── smarty_internal_compile_call.php
│   │   │   │       ├── smarty_internal_compile_capture.php
│   │   │   │       ├── smarty_internal_compile_config_load.php
│   │   │   │       ├── smarty_internal_compile_continue.php
│   │   │   │       ├── smarty_internal_compile_debug.php
│   │   │   │       ├── smarty_internal_compile_eval.php
│   │   │   │       ├── smarty_internal_compile_extends.php
│   │   │   │       ├── smarty_internal_compile_for.php
│   │   │   │       ├── smarty_internal_compile_foreach.php
│   │   │   │       ├── smarty_internal_compile_function.php
│   │   │   │       ├── smarty_internal_compile_if.php
│   │   │   │       ├── smarty_internal_compile_include.php
│   │   │   │       ├── smarty_internal_compile_include_php.php
│   │   │   │       ├── smarty_internal_compile_insert.php
│   │   │   │       ├── smarty_internal_compile_ldelim.php
│   │   │   │       ├── smarty_internal_compile_nocache.php
│   │   │   │       ├── smarty_internal_compile_private_block_plugin.php
│   │   │   │       ├── smarty_internal_compile_private_function_plugin.php
│   │   │   │       ├── smarty_internal_compile_private_modifier.php
│   │   │   │       ├── smarty_internal_compile_private_object_block_function.php
│   │   │   │       ├── smarty_internal_compile_private_object_function.php
│   │   │   │       ├── smarty_internal_compile_private_print_expression.php
│   │   │   │       ├── smarty_internal_compile_private_registered_block.php
│   │   │   │       ├── smarty_internal_compile_private_registered_function.php
│   │   │   │       ├── smarty_internal_compile_private_special_variable.php
│   │   │   │       ├── smarty_internal_compile_rdelim.php
│   │   │   │       ├── smarty_internal_compile_section.php
│   │   │   │       ├── smarty_internal_compile_setfilter.php
│   │   │   │       ├── smarty_internal_compile_while.php
│   │   │   │       ├── smarty_internal_compilebase.php
│   │   │   │       ├── smarty_internal_config.php
│   │   │   │       ├── smarty_internal_config_file_compiler.php
│   │   │   │       ├── smarty_internal_configfilelexer.php
│   │   │   │       ├── smarty_internal_configfileparser.php
│   │   │   │       ├── smarty_internal_data.php
│   │   │   │       ├── smarty_internal_debug.php
│   │   │   │       ├── smarty_internal_filter_handler.php
│   │   │   │       ├── smarty_internal_function_call_handler.php
│   │   │   │       ├── smarty_internal_get_include_path.php
│   │   │   │       ├── smarty_internal_nocache_insert.php
│   │   │   │       ├── smarty_internal_parsetree.php
│   │   │   │       ├── smarty_internal_resource_eval.php
│   │   │   │       ├── smarty_internal_resource_extends.php
│   │   │   │       ├── smarty_internal_resource_file.php
│   │   │   │       ├── smarty_internal_resource_php.php
│   │   │   │       ├── smarty_internal_resource_registered.php
│   │   │   │       ├── smarty_internal_resource_stream.php
│   │   │   │       ├── smarty_internal_resource_string.php
│   │   │   │       ├── smarty_internal_smartytemplatecompiler.php
│   │   │   │       ├── smarty_internal_template.php
│   │   │   │       ├── smarty_internal_templatebase.php
│   │   │   │       ├── smarty_internal_templatecompilerbase.php
│   │   │   │       ├── smarty_internal_templatelexer.php
│   │   │   │       ├── smarty_internal_templateparser.php
│   │   │   │       ├── smarty_internal_utility.php
│   │   │   │       ├── smarty_internal_write_file.php
│   │   │   │       ├── smarty_resource.php
│   │   │   │       ├── smarty_resource_custom.php
│   │   │   │       ├── smarty_resource_recompiled.php
│   │   │   │       ├── smarty_resource_uncompiled.php
│   │   │   │       └── smarty_security.php
│   │   │   └── smarty.conf
│   │   └── todo-demo/
│   │       ├── .gitignore
│   │       ├── chameleon.config.js
│   │       ├── mock/
│   │       │   ├── api/
│   │       │   │   └── index.js
│   │       │   └── template/
│   │       │       └── index.php
│   │       ├── package.json
│   │       └── src/
│   │           ├── app/
│   │           │   └── app.cml
│   │           ├── components/
│   │           │   ├── c-checkbox/
│   │           │   │   └── c-checkbox.cml
│   │           │   └── c-todoitem/
│   │           │       └── c-todoitem.cml
│   │           ├── pages/
│   │           │   └── index/
│   │           │       └── index.cml
│   │           ├── router.config.json
│   │           └── store/
│   │               ├── action-types.js
│   │               ├── actions.js
│   │               ├── getter-types.js
│   │               ├── getters.js
│   │               ├── index/
│   │               │   ├── action-types.js
│   │               │   ├── actions.js
│   │               │   ├── getter-types.js
│   │               │   ├── getters.js
│   │               │   ├── mutation-types.js
│   │               │   ├── mutations.js
│   │               │   └── state.js
│   │               ├── index.js
│   │               ├── mutation-types.js
│   │               ├── mutations.js
│   │               ├── state.js
│   │               └── utils.js
│   ├── chameleon-tool/
│   │   ├── .babelrc
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── README.md
│   │   ├── chameleon.js
│   │   ├── commanders/
│   │   │   ├── alipay/
│   │   │   │   └── index.js
│   │   │   ├── baidu/
│   │   │   │   └── index.js
│   │   │   ├── build/
│   │   │   │   └── index.js
│   │   │   ├── dev/
│   │   │   │   └── index.js
│   │   │   ├── ext/
│   │   │   │   └── index.js
│   │   │   ├── extPlatform.js
│   │   │   ├── info/
│   │   │   │   └── index.js
│   │   │   ├── init/
│   │   │   │   ├── index.js
│   │   │   │   └── platform.json
│   │   │   ├── qq/
│   │   │   │   └── index.js
│   │   │   ├── server/
│   │   │   │   └── index.js
│   │   │   ├── tt/
│   │   │   │   └── index.js
│   │   │   ├── utils.js
│   │   │   ├── web/
│   │   │   │   ├── apiMiddleware.js
│   │   │   │   ├── dev-client.js
│   │   │   │   ├── dev-server.js
│   │   │   │   ├── dynamicApiMiddleware.js
│   │   │   │   ├── index.js
│   │   │   │   ├── liveload-dev-client.js
│   │   │   │   ├── php_cgi_middleware.js
│   │   │   │   ├── responseTime.js
│   │   │   │   └── web-socket.js
│   │   │   ├── weex/
│   │   │   │   ├── index.js
│   │   │   │   └── socket-server.js
│   │   │   └── wx/
│   │   │       └── index.js
│   │   ├── configs/
│   │   │   ├── cml-loader.conf.js
│   │   │   ├── component_export/
│   │   │   │   ├── dependencies.js
│   │   │   │   ├── export-loader.js
│   │   │   │   ├── exportPlugin.js
│   │   │   │   ├── getMiniAppExportConfig.js
│   │   │   │   ├── getWebExportConfig.js
│   │   │   │   ├── getWebExportConfig_new.js
│   │   │   │   ├── getWeexExportConfig.js
│   │   │   │   ├── getWeexExportConfig_new.js
│   │   │   │   ├── postcssPlugin.js
│   │   │   │   ├── utils.js
│   │   │   │   ├── webpack.web.config.js
│   │   │   │   └── webpack.weex.config.js
│   │   │   ├── config.js
│   │   │   ├── default/
│   │   │   │   ├── app.cml
│   │   │   │   ├── entry.js
│   │   │   │   ├── html_entry.html
│   │   │   │   ├── miniappPolyfill.js
│   │   │   │   ├── rem.js
│   │   │   │   ├── router.js
│   │   │   │   ├── smarty_entry.html
│   │   │   │   ├── weexPolyfill.js
│   │   │   │   └── weex_liveload_entry.js
│   │   │   ├── entryLoader.js
│   │   │   ├── getCommonConfig.js
│   │   │   ├── getMiniAppBuildConfig.js
│   │   │   ├── getMiniAppCommonConfig.js
│   │   │   ├── getMiniAppDevConfig.js
│   │   │   ├── getWebBuildConfig.js
│   │   │   ├── getWebCommonConfig.js
│   │   │   ├── getWebDevConfig.js
│   │   │   ├── getWebExportConfig.js
│   │   │   ├── getWeexBuildConfig.js
│   │   │   ├── getWeexCommonConfig.js
│   │   │   ├── getWeexDevConfig.js
│   │   │   ├── index.js
│   │   │   ├── mvvm/
│   │   │   │   ├── getExtendConfig.js
│   │   │   │   └── originSourceLoader.js
│   │   │   ├── plugins/
│   │   │   │   ├── CopyNpmPLugin.js
│   │   │   │   ├── miniAppBaseCssAdd.js
│   │   │   │   └── miniAppSubPkg.js
│   │   │   ├── postcss/
│   │   │   │   ├── alipay/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── baidu/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── export/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── extend/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── qq/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── tt/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── web/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── weex/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   └── wx/
│   │   │   │       └── .postcssrc.js
│   │   │   ├── preview-assets/
│   │   │   │   └── qrcode.js
│   │   │   ├── preview.html
│   │   │   ├── routerLoader.js
│   │   │   ├── utils.js
│   │   │   ├── web_empty.html
│   │   │   ├── web_global.css
│   │   │   ├── web_global.js
│   │   │   └── weex_liveload/
│   │   │       ├── WeexWebSocket.js
│   │   │       └── liveLoad.js
│   │   ├── lib/
│   │   │   ├── cli.js
│   │   │   ├── config.js
│   │   │   ├── index.js
│   │   │   ├── log.js
│   │   │   └── utils.js
│   │   ├── npm-shrinkwrap.json
│   │   ├── package.json
│   │   └── test/
│   │       ├── commander/
│   │       │   ├── index.cml
│   │       │   ├── index.interface
│   │       │   └── init.test.js
│   │       ├── configs/
│   │       │   └── utils.js
│   │       └── lib/
│   │           ├── cli.test.js
│   │           ├── config.test.js
│   │           ├── index.test.js
│   │           └── log.test.js
│   ├── chameleon-tool-utils/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   ├── lib/
│   │   │   │   └── splitParts.js
│   │   │   └── log.js
│   │   └── test/
│   │       ├── index.test.js
│   │       ├── log.test.js
│   │       └── testlib/
│   │           ├── alipay/
│   │           │   ├── alipay.axml
│   │           │   └── alipay.json
│   │           ├── baidu/
│   │           │   ├── baidu.json
│   │           │   └── baidu.swan
│   │           ├── cli/
│   │           │   └── config.js
│   │           ├── demo-project/
│   │           │   ├── .gitignore
│   │           │   ├── chameleon.config.js
│   │           │   ├── coma/
│   │           │   │   └── coma.interface
│   │           │   ├── comb/
│   │           │   │   └── comb.cml
│   │           │   ├── index.cml
│   │           │   ├── package.json
│   │           │   └── src/
│   │           │       ├── app/
│   │           │       │   └── app.cml
│   │           │       ├── components/
│   │           │       │   ├── com1/
│   │           │       │   │   └── com1.cml
│   │           │       │   ├── com2/
│   │           │       │   │   ├── com2.interface
│   │           │       │   │   ├── com2.web.cml
│   │           │       │   │   └── com2.wx.cml
│   │           │       │   └── com3/
│   │           │       │       └── com3.interface
│   │           │       ├── pages/
│   │           │       │   ├── pagea/
│   │           │       │   │   └── pagea.cml
│   │           │       │   └── pageb/
│   │           │       │       └── pageb.cml
│   │           │       └── router.config.json
│   │           ├── index.cml
│   │           ├── index.interface
│   │           └── wx/
│   │               ├── wx.json
│   │               └── wx.wxml
│   ├── chameleon-vue-precompiler/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── lib/
│   │   │   ├── index.js
│   │   │   └── precompiler/
│   │   │       ├── components/
│   │   │       │   ├── div.js
│   │   │       │   ├── index.js
│   │   │       │   └── span.js
│   │   │       ├── config.js
│   │   │       ├── hooks/
│   │   │       │   ├── events.js
│   │   │       │   ├── index.js
│   │   │       │   ├── style-binding.js
│   │   │       │   └── style.js
│   │   │       ├── index.js
│   │   │       ├── node/
│   │   │       │   └── tag.js
│   │   │       └── util/
│   │   │           ├── ast.js
│   │   │           └── index.js
│   │   └── package.json
│   ├── chameleon-webpack-plugin/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── chunkhash.js
│   │   │   ├── moduleId.js
│   │   │   └── utils.js
│   │   ├── package.json
│   │   └── test/
│   │       └── utils.test.js
│   ├── chameleon-weex-vue-loader/
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── gen-id.js
│   │   │   ├── loader.js
│   │   │   ├── normalize.js
│   │   │   ├── parser.js
│   │   │   ├── script-loader.js
│   │   │   ├── selector.js
│   │   │   ├── style-loader.js
│   │   │   ├── style-rewriter.js
│   │   │   ├── template-compiler.js
│   │   │   └── template-loader.js
│   │   └── package.json
│   ├── cml-component-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── cli.js
│   │   ├── config/
│   │   │   └── parse-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── entrance-flat.js
│   │   │   └── readme-builder.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── built-in-components/
│   │       │   │   ├── input/
│   │       │   │   │   ├── input.interface
│   │       │   │   │   ├── input.web.cml
│   │       │   │   │   ├── input.weex.cml
│   │       │   │   │   └── input.wx.cml
│   │       │   │   └── layout/
│   │       │   │       ├── aside/
│   │       │   │       │   └── aside.cml
│   │       │   │       ├── col/
│   │       │   │       │   └── col.cml
│   │       │   │       ├── container/
│   │       │   │       │   └── container.cml
│   │       │   │       └── foot/
│   │       │   │           └── foot.cml
│   │       │   ├── export-default.cml
│   │       │   └── index.interface
│   │       └── test.js
│   ├── cml-extract-css-webpack-plugin/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── dist/
│   │   │   ├── cjs.js
│   │   │   ├── helper.js
│   │   │   ├── index.js
│   │   │   ├── lib/
│   │   │   │   ├── ExtractTextPluginCompilation.js
│   │   │   │   ├── ExtractedModule.js
│   │   │   │   ├── OrderUndefinedError.js
│   │   │   │   └── helpers.js
│   │   │   └── loader.js
│   │   ├── package.json
│   │   ├── schema/
│   │   │   ├── loader.json
│   │   │   └── plugin.json
│   │   └── test/
│   │       └── index.js
│   ├── cml-htmllinter/
│   │   ├── AUTHORS
│   │   ├── HISTORY
│   │   ├── LICENSE
│   │   ├── docs/
│   │   │   └── gen_options.js
│   │   ├── gulpfile.js
│   │   ├── lib/
│   │   │   ├── config.js
│   │   │   ├── hook/
│   │   │   │   ├── index.js
│   │   │   │   ├── skip-empty-text.js
│   │   │   │   ├── skip-normal-tag.js
│   │   │   │   └── skip_origin_tag.js
│   │   │   ├── index.js
│   │   │   ├── inline_config.js
│   │   │   ├── issue.js
│   │   │   ├── knife/
│   │   │   │   ├── README.md
│   │   │   │   ├── apply_rules.js
│   │   │   │   ├── attr_parse.js
│   │   │   │   ├── boolean_attrs.js
│   │   │   │   ├── index.js
│   │   │   │   ├── is_cml_directives.js
│   │   │   │   ├── is_common_attrs.js
│   │   │   │   ├── is_common_events.js
│   │   │   │   ├── is_labeable.js
│   │   │   │   ├── is_origin_tag.js
│   │   │   │   ├── is_void_element.js
│   │   │   │   ├── lang_tag.js
│   │   │   │   ├── match_filter.js
│   │   │   │   ├── relative_line_col.js
│   │   │   │   ├── shred.js
│   │   │   │   └── tag_utils.js
│   │   │   ├── linter.js
│   │   │   ├── messages.js
│   │   │   ├── parser/
│   │   │   │   ├── dom_builder.js
│   │   │   │   └── index.js
│   │   │   ├── presets/
│   │   │   │   ├── accessibility.js
│   │   │   │   ├── default.js
│   │   │   │   ├── global.js
│   │   │   │   ├── index.js
│   │   │   │   └── validate.js
│   │   │   ├── process_option.js
│   │   │   ├── rules/
│   │   │   │   ├── attr-bans.js
│   │   │   │   ├── attr-name-style.js
│   │   │   │   ├── attr-new-line.js
│   │   │   │   ├── attr-no-dup.js
│   │   │   │   ├── attr-no-unsafe-char.js
│   │   │   │   ├── attr-order.js
│   │   │   │   ├── attr-quote-style.js
│   │   │   │   ├── attr-req-value.js
│   │   │   │   ├── attr-validate.js
│   │   │   │   ├── attr.js
│   │   │   │   ├── class-no-dup.js
│   │   │   │   ├── class-style.js
│   │   │   │   ├── class.js
│   │   │   │   ├── component-attr-check.js
│   │   │   │   ├── directive-cml-valid-value.js
│   │   │   │   ├── directive-cml.js
│   │   │   │   ├── directive-name-forbiden.js
│   │   │   │   ├── doctype-first.js
│   │   │   │   ├── doctype-html5.js
│   │   │   │   ├── dom.js
│   │   │   │   ├── fig-req-figcaption.js
│   │   │   │   ├── focusable-tabindex-style.js
│   │   │   │   ├── free-options.js
│   │   │   │   ├── head-req-title.js
│   │   │   │   ├── head-valid-content-model.js
│   │   │   │   ├── href-style.js
│   │   │   │   ├── html-valid-content-model.js
│   │   │   │   ├── id-class-no-ad.js
│   │   │   │   ├── id-no-dup.js
│   │   │   │   ├── id-style.js
│   │   │   │   ├── img-req-alt.js
│   │   │   │   ├── img-req-src.js
│   │   │   │   ├── indent-style.js
│   │   │   │   ├── index.js
│   │   │   │   ├── input-radio-req-name.js
│   │   │   │   ├── input-req-label.js
│   │   │   │   ├── label-req-for.js
│   │   │   │   ├── lang.js
│   │   │   │   ├── line-end-style.js
│   │   │   │   ├── line-max-len.js
│   │   │   │   ├── line-no-trailing-whitespace.js
│   │   │   │   ├── line.js
│   │   │   │   ├── link-req-noopener.js
│   │   │   │   ├── origin-tag-forbidden-directive.js
│   │   │   │   ├── origin-tag.js
│   │   │   │   ├── spec-char-escape.js
│   │   │   │   ├── table-req-caption.js
│   │   │   │   ├── table-req-header.js
│   │   │   │   ├── tag-bans.js
│   │   │   │   ├── tag-close.js
│   │   │   │   ├── tag-embed.js
│   │   │   │   ├── tag-name-lowercase.js
│   │   │   │   ├── tag-req-attr.js
│   │   │   │   ├── tag-white-list.js
│   │   │   │   ├── tag.js
│   │   │   │   ├── template-lang.js
│   │   │   │   ├── text-forbid-raw.js
│   │   │   │   ├── text.js
│   │   │   │   ├── title-max-len.js
│   │   │   │   ├── title-no-dup.js
│   │   │   │   └── title.js
│   │   │   └── tools/
│   │   │       ├── index.js
│   │   │       └── is_origin_component.js
│   │   ├── package.json
│   │   ├── repl.js
│   │   └── test/
│   │       ├── .eslintrc
│   │       ├── fixtures/
│   │       │   ├── .gitkeep
│   │       │   ├── const_rule.js
│   │       │   └── sanity.html
│   │       ├── functional/
│   │       │   ├── attr-bans.js
│   │       │   ├── attr-name-style.js
│   │       │   ├── attr-new-line.js
│   │       │   ├── attr-no-dup.js
│   │       │   ├── attr-no-unsafe-char.js
│   │       │   ├── attr-order.js
│   │       │   ├── attr-quote-style.js
│   │       │   ├── attr-req-value.js
│   │       │   ├── attr-validate.js
│   │       │   ├── class-no-dup.js
│   │       │   ├── class-style.js
│   │       │   ├── component-attr-check.js
│   │       │   ├── doctype-first.js
│   │       │   ├── doctype-html5.js
│   │       │   ├── fig-req-figcaption.js
│   │       │   ├── focusable-tabindex-style.js
│   │       │   ├── head-req-title.js
│   │       │   ├── head-valid-content-model.js
│   │       │   ├── href-style.js
│   │       │   ├── html-valid-content-model.js
│   │       │   ├── id-class-no-ad.js
│   │       │   ├── id-no-dup.js
│   │       │   ├── id-style.js
│   │       │   ├── img-req-alt.js
│   │       │   ├── img-req-src.js
│   │       │   ├── indent-delta.js
│   │       │   ├── indent-style.js
│   │       │   ├── input-radio-req-name.js
│   │       │   ├── input-req-label.js
│   │       │   ├── label-req-for.js
│   │       │   ├── lang.js
│   │       │   ├── line-end-style.js
│   │       │   ├── line-max-len.js
│   │       │   ├── line-no-trailing-whitespace.js
│   │       │   ├── link-req-noopener.js
│   │       │   ├── raw-ignore-regex.js
│   │       │   ├── runner.test.js
│   │       │   ├── spec-char-escape.js
│   │       │   ├── table-req-caption.js
│   │       │   ├── table-req-header.js
│   │       │   ├── tag-bans.js
│   │       │   ├── tag-name-lowercase.js
│   │       │   ├── tag-req-attr.js
│   │       │   ├── title-max-len.js
│   │       │   └── title-no-dup.js
│   │       └── unit/
│   │           ├── htmllint.js
│   │           ├── inline-config-html/
│   │           │   └── inline-all.html
│   │           ├── knife.apply_rules.js
│   │           ├── knife.is_labeable.js
│   │           ├── knife.relative_line_col.js
│   │           ├── linter.js
│   │           ├── messages.js
│   │           ├── parser.dom_builder.js
│   │           ├── parser.js
│   │           ├── raw-ignore-regex.js
│   │           ├── rules.doctype-first.js
│   │           ├── rules.focusable-tabindex-style.js
│   │           ├── rules.js
│   │           └── runner.test.js
│   ├── cml-interface-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── config/
│   │   │   └── babel-parser-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ast-tree-parser.js
│   │   │   └── file-reader.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── include-interface.interface
│   │       │   └── index.interface
│   │       └── test.js
│   ├── cml-js-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── config/
│   │   │   └── babel-parser-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── file-reader.js
│   │   │   └── visitors/
│   │   │       ├── containerPathVisitor.js
│   │   │       ├── exportPathVisitor.js
│   │   │       └── index.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── export-class.cml
│   │       │   └── export-default.cml
│   │       └── test.js
│   ├── cml-vue-loader/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── helpers.js
│   │   │   ├── loader.js
│   │   │   ├── parser.js
│   │   │   ├── runtime/
│   │   │   │   └── component-normalizer.js
│   │   │   ├── selector.js
│   │   │   ├── style-compiler/
│   │   │   │   ├── index.js
│   │   │   │   ├── load-postcss-config.js
│   │   │   │   └── plugins/
│   │   │   │       ├── scope-id.js
│   │   │   │       └── trim.js
│   │   │   ├── template-compiler/
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── transform-require.js
│   │   │   │   │   └── transform-srcset.js
│   │   │   │   ├── preprocessor.js
│   │   │   │   └── url-to-require.js
│   │   │   └── utils/
│   │   │       ├── normalize.js
│   │   │       ├── options-cache.js
│   │   │       └── try-require.js
│   │   └── package.json
│   ├── easy-chameleon/
│   │   ├── .babelrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── index.js
│   │   ├── config/
│   │   │   ├── getWebpackConfig.js
│   │   │   └── utils.js
│   │   ├── entry/
│   │   │   ├── web_global.css
│   │   │   └── web_global.js
│   │   ├── index.js
│   │   ├── npm-shrinkwrap.json
│   │   ├── package.json
│   │   └── postcss/
│   │       ├── web/
│   │       │   └── .postcssrc.js
│   │       ├── weex/
│   │       │   └── .postcssrc.js
│   │       └── wx/
│   │           └── .postcssrc.js
│   ├── interface-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   └── lib/
│   │   │       └── check.js
│   │   └── test/
│   │       └── lib.test/
│   │           ├── check.js
│   │           ├── check.test.js
│   │           ├── generator.test.js
│   │           └── interface.test
│   ├── mvvm-babel-generator/
│   │   ├── LICENSE
│   │   ├── lib/
│   │   │   ├── buffer.js
│   │   │   ├── generators/
│   │   │   │   ├── base.js
│   │   │   │   ├── classes.js
│   │   │   │   ├── expressions.js
│   │   │   │   ├── flow.js
│   │   │   │   ├── index.js
│   │   │   │   ├── jsx.js
│   │   │   │   ├── methods.js
│   │   │   │   ├── modules.js
│   │   │   │   ├── statements.js
│   │   │   │   ├── template-literals.js
│   │   │   │   ├── types.js
│   │   │   │   └── typescript.js
│   │   │   ├── index.js
│   │   │   ├── node/
│   │   │   │   ├── index.js
│   │   │   │   ├── parentheses.js
│   │   │   │   └── whitespace.js
│   │   │   ├── printer.js
│   │   │   └── source-map.js
│   │   └── package.json
│   ├── mvvm-babel-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .travis.yml
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── lib/
│   │   │   └── index.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── brace.js
│   │       └── testjsx.tpl
│   ├── mvvm-cml-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── helper.js
│   │   ├── index.js
│   │   ├── package.json
│   │   └── selector.js
│   ├── mvvm-file-loader/
│   │   ├── README.md
│   │   ├── dist/
│   │   │   ├── cjs.js
│   │   │   ├── index.js
│   │   │   └── options.json
│   │   └── package.json
│   ├── mvvm-interface-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── check.js
│   │   │   ├── getInterfaceCode.js
│   │   │   ├── getInterfaceCode_old.js
│   │   │   ├── getMethodCode.js
│   │   │   ├── getMethodCode_old.js
│   │   │   └── resolveRequire.js
│   │   ├── package.json
│   │   ├── runtime/
│   │   │   ├── checkWrapper.js
│   │   │   └── copyProto.js
│   │   └── test/
│   │       ├── check.test.js
│   │       ├── checkWrapper.test.js
│   │       ├── copyProto.test.js
│   │       ├── getInterfaceCode.test.js
│   │       ├── getMethodCode.test.js
│   │       └── lib/
│   │           └── components/
│   │               ├── coma/
│   │               │   ├── coma.alipay.cml
│   │               │   ├── coma.baidu.cml
│   │               │   ├── coma.interface
│   │               │   ├── coma.web.cml
│   │               │   ├── coma.weex.cml
│   │               │   └── coma.wx.cml
│   │               ├── comb/
│   │               │   ├── comb.baidu.cml
│   │               │   └── comb.interface
│   │               ├── demo-com/
│   │               │   └── demo-com.cml
│   │               ├── first/
│   │               │   ├── first.interface
│   │               │   └── test.js
│   │               ├── methodinclude.interface
│   │               ├── methodsrcerror.interface
│   │               ├── partsrcerror.interface
│   │               ├── ph-com/
│   │               │   ├── ph-com.alipay.cml
│   │               │   ├── ph-com.baidu.cml
│   │               │   ├── ph-com.interface
│   │               │   ├── ph-com.web.cml
│   │               │   ├── ph-com.weex.cml
│   │               │   └── ph-com.wx.cml
│   │               ├── second/
│   │               │   └── second.interface
│   │               ├── third/
│   │               │   ├── double.interface
│   │               │   ├── includea.interface
│   │               │   ├── includeb.interface
│   │               │   ├── multi.interface
│   │               │   ├── not.interface
│   │               │   └── third.interface
│   │               ├── third.interface
│   │               ├── thirdinterface.js
│   │               └── thirdmethod.js
│   ├── mvvm-miniapp-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── helper.js
│   │   ├── index.js
│   │   ├── package.json
│   │   └── selector.js
│   ├── mvvm-pack/
│   │   ├── .eslintrc
│   │   ├── cmlNode.js
│   │   ├── compiler.js
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── amd.js
│   │   │   ├── amdbootstrap.global.js
│   │   │   ├── amdbootstrap.module.js
│   │   │   ├── amdwrapper.js
│   │   │   └── handleScript.js
│   │   ├── log.js
│   │   ├── minimize/
│   │   │   ├── uglifycss.js
│   │   │   └── uglifyjs.js
│   │   ├── mvvmGraphPlugin.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── cmlNode.test.js
│   │       ├── demo-project/
│   │       │   ├── .gitignore
│   │       │   ├── chameleon.config.js
│   │       │   ├── coma/
│   │       │   │   └── coma.interface
│   │       │   ├── comb/
│   │       │   │   └── comb.cml
│   │       │   ├── index.cml
│   │       │   ├── package.json
│   │       │   └── src/
│   │       │       ├── app/
│   │       │       │   └── app.cml
│   │       │       ├── components/
│   │       │       │   ├── coma/
│   │       │       │   │   └── coma.cml
│   │       │       │   ├── comb/
│   │       │       │   │   ├── comb.interface
│   │       │       │   │   ├── comb.web.cml
│   │       │       │   │   └── comb.wx.cml
│   │       │       │   └── comc/
│   │       │       │       └── comc.interface
│   │       │       ├── pages/
│   │       │       │   ├── pagea/
│   │       │       │   │   └── pagea.cml
│   │       │       │   └── pageb/
│   │       │       │       └── pageb.cml
│   │       │       └── router.config.json
│   │       ├── demoPlugin.js
│   │       ├── lib/
│   │       │   ├── amd.test.js
│   │       │   ├── amdbootstrap.global.test.js
│   │       │   ├── amdbootstrap.module.test.js
│   │       │   ├── amdwrapper.test.js
│   │       │   ├── handleScript.node.js
│   │       │   └── handleScript.test.js
│   │       ├── log.test.js
│   │       ├── mvvmGraphPlugin.test.js
│   │       ├── test.wxml
│   │       ├── uglifycss.test.js
│   │       └── uglifyjs.test.js
│   ├── mvvm-style-loader/
│   │   ├── index.js
│   │   ├── lib.js
│   │   ├── package.json
│   │   └── test/
│   │       └── index.test.js
│   ├── mvvm-template-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   └── process-template.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── index.test.js
│   │       └── process-template.test.js
│   ├── runtime-check/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── getDefines.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── parsePlugins.js
│   │   └── test/
│   │       ├── index.test.js
│   │       └── interface.test
│   ├── url-loader/
│   │   ├── .babelrc
│   │   ├── .circleci/
│   │   │   └── config.yml
│   │   ├── .eslintignore
│   │   ├── .eslintrc
│   │   ├── .gitattributes
│   │   ├── .github/
│   │   │   ├── CODEOWNERS
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── ISSUE_TEMPLATE.md
│   │   │   └── PULL_REQUEST_TEMPLATE.md
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── codecov.yml
│   │   ├── commitlint.config.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── cjs.js
│   │       ├── index.js
│   │       ├── options.json
│   │       └── utils/
│   │           └── normalizeFallback.js
│   ├── webpack-check-plugin/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── check.js
│   │   │   └── tokensMap.js
│   │   ├── package.json
│   │   └── test/
│   │       └── check.test.js
│   └── webpack-liveload-middleware/
│       ├── .eslintrc
│       ├── .gitignore
│       ├── .npmignore
│       ├── LICENSE
│       ├── client.js
│       ├── helpers.js
│       ├── middleware.js
│       ├── package.json
│       └── test/
│           └── helpers.test.js
└── test/
    └── test.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.js
================================================
module.exports = {
    root:true,
    env: {
      browser: true,
      es6: true,
    },
    extends: [
      'standard',
    ],
    globals: {
      Atomics: 'readonly',
      SharedArrayBuffer: 'readonly'
    },
    parserOptions: {
      ecmaVersion: 2018,
      parser:'babel-eslint'
    },
    rules: {
      'semi':[2,'always']
    }
  }


================================================
FILE: .gitattributes
================================================
*.php linguist-language=JavaScript
*.interface linguist-language=JavaScript
*.cml linguist-language=JavaScript


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**bug描述**
描述出现的问题

**复现bug的步骤**
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**问题截图**


**编译环境信息**
 - chameleon-tool 版本:[e.g.0.1.0]
 - nodejs版本、npm版本:[node v8.11.4、npm 5.6.0]
 - 电脑操作系统: [e.g. macOS High Sierra 10.13.6]

**运行环境信息**
 - 端版本: [e.g. 微信小程序 7.0.3、weex 2.0、手机Safari浏览器 、PC Chrome浏览器 1.30]
 - 手机机型: [e.g. iPhone6 12.0]


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .gitignore
================================================
# Editor directories and files
.DS_Store
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
.vscode

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
/node_modules
/packages/*/node_modules

jspm_packages/

# Typescript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
coverage
.nyc_output
# ///////////////////////////



================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
  - "8.10.0"
before_script:
  - lerna bootstrap --ignore-scripts
  - cd packages/easy-chameleon && rm -rf node_modules &&  npm i && cd ../../
  - cd packages/chameleon-tool && rm -rf node_modules && npm i && cd ../../
script:
  - npm run coverage
after_script:
  - cat coverage/lcov.info | node_modules/.bin/codecov


================================================
FILE: CHANGELOG.md
================================================
## [1.0.8]

* 支持data-class 配置
chameleon.config.js 文件中配置

```javascript
wx:{ //alipay/baidu/...

  dev:{
    hasMiniAppCustomDataClass:true
  }
  build:{
    hasMiniAppCustomDataClass:true
  }

}
```
* 内置支持循环依赖检测
```javascript
optimize: {
  circularDependency: true// 默认引入自动检测循环引用的插件
}

```
## [1.0.8-alpha.1]

* 路由配置文件处理
* HtmlWebpackPlugin配置适配
* express本地服务配置
* 预览页面跳转以及二维码适配
* hash页面适配多路由: 需要修改preview页面跳转
* history页面适配多路由:需要修改本地express服务

## [1.0.8-alpha.0]
  * 支持chameleon-api-miniapp按需加载
  * 支持组件动态加载
  * 支持路由懒加载
  * 支持终端构建进度 processBar 可配置,默认关闭
  * 修复config.json生成的weex端信息缺失
  * 支持压缩模式下console信息可配置是否删除
  * chameleon-linter修复useingComponents中引入动态组件校验
  
## [1.0.6]

  * web端动态加载支持自定义chunk名称
  * 修复小程序端原生tabbar图标配置在windows上的Bug

  
## [1.0.6-alpha.6]

  * web端 dev模式下如何支持跨域
  * 构建过程警告信息支持配置是否输出,可以排查重复npm包的安装 
  * 压缩构建过程删除console

  * windows下 subProject 配置npmName的路径适配修复
  * 修复项目内安装cli通过npm脚本构建全局变量校验问题
## [1.0.6-alpha.5]
* 增加运行环境获取命令 cml info
* 提供构建进程和面板,优化开发体验
* 更新初始化项目依赖版本
* 支持weex多bundle构建自定义name


## [1.0.6-alpha.3]

* 初始化项目paltform默认值['web','weex','wx']三端
* 支持weex多bundle构建


## [1.0.6-alpha.2]

* 支付宝小程序编译组件包裹层id上移
* web、weex端router.config.json的编译方式增加name字段进行区分

## [1.0.6-alpha.1]

* 升级less编译器
* 支持原生组件样式引入对应平台样式文件不带后缀
* 支持路由多平台配置

## [1.0.5]

* 发布支持头条和小程序增强相关能力的正式版本
* 预览页面改版,支持预览页面搜索能力

## [1.0.5-alpha.2]

* 全局配置支持小程序云开发
* 支持小程序插件使用和插件开发
* 支持微信小程序sitemap配置
* 命令行内置支持头条小程序
* 支持头条小程序端语法校验


## [1.0.5-alpha.1]
 
  - 支持全局样式
  - 修复config.json缺少qq和扩展新端信息
  - 优化全局配置,支持性能优化配置项
  - 配置不引入基础样式,小程序端不生成对应样式文件
  - 修复语法校验中stylus、component 校验逻辑报错
## [1.0.4]
  - 支持mock文件更新实时重新编译
  - 支持分包页面依赖的js更新,打包结果重新编译
  - 优化dev模式内存占用
  - 修复分包模式下组件js抽离的时候重复对页面js抽离的操作

## [1.0.4-alpha.2]
  - 扩展新端增加内置环境变量 NODE_ENV
  - 支持模板多态语法

## [1.0.4-alpha.1]

  - 解决分包内组件js分包不彻底,优化包体积40%左右
  - 支持原生小程序组件的导入也是函数式的
  - 支持公用样式以文件的形式 @import

## [1.0.3]

- 发布1.0.3-alpha.0的正式版

## [1.0.3-alpha.0]
- Bugfixes
  - 区分web端click和tap事件,由原来的click和tap统一处理成tap,改为tap和click区别对待,如果要在pc端生效click事件,那么必须绑定click而非tap
  - 修复windows 上 app.json 中分包页面没有删除
  - 修复windows 上初始化项目无法运行
- Features
  - 扩展新端命令支持集成到chameleon-tool中
## [1.0.2]

 - 修改project tododemo的package.lock.json

## [1.0.0]

### Bugfixes
   - 修复alipay baidu qq 端引用原生组件的问题
   
## [0.4.1]
### Bugfixes
   - 修复内联事件对象 $event的匹配问题
   - 修复chameleon.config.js内部配置公用miniappConfig一个对象导致的对象合并不准确问题
## [0.4.1-alpha.1]
### Bugfixes
   - 修复window下分包加载的bug
   - 修复babel-loader无法在回调插件中重新配置的bug
## [0.4.1-alpha.0]

### Bug Fixes

- 修复 config.json文件中不生成extra
- 修复 -h 指令提示 -n 的情况

## [0.4.0]
### Features
- 灰度完成发正式版
  
## [0.4.0-alpha.2]
### Features
- 合并0.3.3 和 mvvm+ 版本的代码

## [0.4.0-mvvm.16]

### Bug Fixes
- 修复扩展新端运行时代码插入

## [0.4.0-mvvm.15]

### Bug Fixes
- 修复扩展新端代码中无法使用async函数

## [0.4.0-mvvm.13]

### Bug Fixes
- 修复扩展新端用户编译插件报错导致阻塞watch
- 修复扩展新端中不支持变量注入的bug

## [0.4.0-mvvm.12]

### Features
- 支持给扩展新端自定义loader传默认options

### Bug Fixes
- 修复多路由报错的bug

## [0.4.0-mvvm.11]
### Features
- 增加生成config.json文件的钩子
- 打包文件增量覆盖
- 新端插件中可以有默认配置
- 静态资源可以添加生成路径前缀

## [0.4.0-mvvm.10]
### Features
- 完善mvvm-pack单元测试
- 扩展新端compiler对象新增获取路由方法
- 扩展新端cml节点的extra字段添加引用组件

## [0.4.0-mvvm.9]
### Features
- 支持script类型节点 originSource字段获取节点babel前代码
- linter支持扩展多态协议的校验

## [0.4.0-mvvm.8]
### Bug Fixes
- 修复扩展新端在window上构建报错
## [0.4.0-mvvm.7]
### Features
- 支持扩展新端支持文件指纹与js和css压缩
- 对齐百度和微信小程序能力,支持 支付宝 web weex 在自定义组件上使用 tap touchstart touchend touchcancel原生事件直接触发

## [0.4.0-mvvm.6]
### Features
- 支持扩展新端对小程序原生组件支持

## [0.4.0-mvvm.1-0.4.0-mvvm.3]
### Features
- 增加 扩展新端功能
- 增加 web端组件导出支持externals参数进行运行时分离
- 增加 支持小程序配置原生tabbar

## [0.3.3]
### Features:
  - 组件导出依赖分离
  - 可通过命令行配置 preview 预览页是否打开
  - 合并qq小程序分支
  - web端原生origin click事件不处理成tap
  - 修改全局变量校验失效问题,同时增加 qq 全局变量名单。
  - 模板变量校验添加 LogicalExpression 处理逻辑表达式里的变量
  - 支持以组件、页面、子项目粒度配置是否注入默认样式
### Bug Fixes
  - 修改cover-view报未定义组件问题件
  - 修复引入zepto库后tap事件触发两次问题
## [0.3.3-alpha.6]
### Features
  - 组件导出依赖分离
  - 可通过命令行配置 preview 预览页是否打开
  
## [0.3.3-alpha.5]
### Features
  - 合并qq小程序分支
  - web端原生origin click事件不处理成tap
  
## [0.3.3-alpha.4]
### Features
  - 修改全局变量校验失效问题,同时增加 qq 全局变量名单。
  - 模板变量校验添加 LogicalExpression 处理逻辑表达式里的变量
### Bug Fixes
  - 修改cover-view报未定义组件问题件
  - 修复引入zepto库后tap事件触发两次问题
  
## [0.3.3-alpha.3]
### Features
  - 支持web weex可配置是否包裹组件

## [0.3.3-alpha.qq.1]
### Features
* 支持qq小程序
  旧项目支持qq小程序 需要修改的地方
  - 1 升级以下几个npm包版本
    "chameleon-api": "0.5.0-alpha.6",
    "chameleon-bridge": "0.2.0-alpha.5",
    "chameleon-runtime": "0.2.2-alpha.qq",
    "chameleon-store": "0.1.0-alpha.qq",
    "chameleon-ui-builtin": "0.2.11-alpha.qq",
    "cml-ui": "0.2.0-alpha.qq"
  - 2 chameleon.config.js中`platforms`字段添加`qq`
  - 
## [0.3.3-alpha.2]

### Bug Fixes 

* 修复 weex dev模式liveload失效
  老项目如果修复,还需要升级项目中两个npm包如下:
  - "chameleon-api": "0.4.17",
  - "chameleon-bridge": "0.1.10",
* weex babelPolyfill为true时 将添加整个@babel/polyfill修改为只添加几个polyfill方法<a href="https://github.com/didi/chameleon/blob/v0.3.x-alpha/packages/chameleon-tool/configs/default/miniappPolyfill.js">miniappPolyfill.js</a>
## [0.3.3-alpha.1]
  - 支持小程序分包加载
  - 修复windows 路径带有数字无法运行
  - 升级webpack-bundle-analyzer 解决安全漏洞警告
## [0.3.3-alpha.0]
- web/weex样式一致性加强
- 基础样式设置支持不导入
- 修复 vue 语法下 v-for bug
- 支持在cml组件上绑定原生事件,注意:需要升级chameleon-ui-builtin到0.2.10-alpha.4版本才支持
- 修复weex内联事件传汉字编译过慢;
- 支持组件上绑定多个内联事件传参的情况

## [0.3.2]

###  Bug Fixes
* 修复 web端模板错误

## [0.3.1] 
有bug

## [0.3.0]
0.3.0-alpha.9 灰度为正式版本

## [0.3.0-alpha.9](https://github.com/didi/chameleon/compare/v0.3.0-alpha.8...v0.3.0-alpha.9)

###  Bug Fixes
* 修复 cml build 命令 不配置web端也会进行web端构建的bug

###  0.3.0-alpha.8 灰度完成发布0.3.0版本


## [0.3.0-alpha.8](https://github.com/didi/chameleon/compare/v0.3.0-alpha.7...v0.3.0-alpha.8)

###  Bug Fixes
* 修复 全局安装chameleon-tool时的npm warn


## [0.3.0-alpha.7](https://github.com/didi/chameleon/compare/v0.3.0-alpha.6...v0.3.0-alpha.7)

###  Bug Fixes
* 修复 build 模式autoprefixer被删除
* 修复 chameleon.config.js 中的base配置优先级bug


### Features
* 增加了cmss.enableAutoPrefix 参数控制是否添加css的autoprefix


## [0.3.0-alpha.6](https://github.com/didi/chameleon/compare/v0.3.0-alpha.5...v0.3.0-alpha.6)

###  Bug Fixes
* 修复 cml wx build执行后报错


## [0.3.0-alpha.5](https://github.com/didi/chameleon/compare/v0.3.0-alpha.4...v0.3.0-alpha.5)

###  Bug Fixes
* 修复 cml weex build生成config.json 格式不正确


## [0.3.0-alpha.4](https://github.com/didi/chameleon/compare/v0.3.0-alpha.3...v0.3.0-alpha.4)

###  Bug Fixes
* 回退模板的chameleon-ui-builtin@0.2.1 到chameleon-ui-builtin@0.2.0, 因为image组件不兼容样式设置


## [0.3.0-alpha.3](https://github.com/didi/chameleon/compare/v0.3.0-alpha.2...v0.3.0-alpha.3)

### Features
* 升级初始化项目运行时依赖
* weex config.json中增加md5字段

### Bug Fixes
* 组件间css优先级问题

## [0.3.0-alpha.2](https://github.com/didi/chameleon/compare/v0.3.0-alpha.1...v0.3.0-alpha.2)

### Features
* 支持微信wxs 支付宝sjs 百度.filter.js的文件引用  [issues/67](https://github.com/didi/chameleon/issues/67)


## [0.3.0-alpha.1](https://github.com/didi/chameleon/compare/v0.2.0...v0.3.0-alpha.1)

### Bug Fixes
* preview页面iframe未撑开修复
* weex的 build模式jsbundle中存在本地路径

### Features
* 小程序的图片地址本地图片改网络图片
* 解决父级目录babel-loader问题
* build模式config.json的生成
* web端weex端 多态组件支持js格式的vue组件
* 小程序和weex也添加babelPolyfill的选项
* 校验不支持Promise类型定义
* 默认添加/components 别名
* 校验添加生命周期函数白名单
## [0.2.0](https://github.com/didi/chameleon/compare/v0.2.0-alpha.1...v0.2.0)

### Bug Fixes

- 默认开启全局变量校验,升级初始化项目中依赖符合全局变量校验
- linter校验支持component is的校验

## [0.2.0-alpha.1](https://github.com/didi/chameleon/compare/v0.2.0-alpha.0...v0.2.0-alpha.1)

### Bug Fixes

- 修复 js中import css文件导致构建停滞的bug

## [0.2.0-alpha.0](https://github.com/didi/chameleon/compare/v0.1.0-alpha.4...v0.2.0-alpha.0)

### Features

- 优化api多域名mock方式
- 组件间css优先级修复
- chameleon.config.js支持base配置
- cml和vue的语法支持事件冒泡
- vue语法下扩展了 v-on:click.stop="handleClick" 的形式来阻止冒泡
- wx端用户自定义组件不添加 cml-base class
- component is支持事件绑定以及component is上的属性解析
- 支持cml子项目放入node_module中引入
- 支持拷贝node_modules中的小程序子项目

### Bug Fixes

- 修复 组件间css优先级 使父组件可覆盖子组件样式

## [0.1.1](https://github.com/didi/chameleon/compare/v0.1.0-alpha.4...v0.1.1)

### Features

- init component命令提示文案
- init 多态组件中的json部分优化


## [0.1.0-alpha.4](https://github.com/didi/chameleon/compare/v0.1.0-alpha.3...v0.1.0-alpha.4)

### Features

- 终端提示英文化
- 样式隔离,模板包裹,特殊属性被包裹层继承
- 事件处理优化
- 动画和轮播图的模板解析支持
- chameleon-template-parse 单测完善到 90% 以上 增加对模板解析时候语法的校验
- mock多域名请求优化

### Bug Fixes

- 修复component is v-model c-model v-show c-show


## [0.1.0-alpha.3](https://github.com/didi/chameleon/compare/v0.1.0-alpha.2...v0.1.0-alpha.3)

### Bug Fixes

- **chameleon-tool** 修复 alpha版本cli兼容0.1.1版本的chameleon-api ([0deaa8d](https://github.com/didi/chameleon/commit/0deaa8df11f605fc08c1b71850379500ea3f38cc))


## [0.1.0-alpha.2](https://github.com/didi/chameleon/compare/v0.1.0-alpha.1...v0.1.0-alpha.2)

### Bug Fixes

- **chameleon-template-parse** 修复 c-show bug ([4c2c750](https://github.com/didi/chameleon/commit/4c2c7507f2aa906f0580ed59d056e91be7269a93))
- **chameleon-template-parse** 修复 component is bug ([4c2c750](https://github.com/didi/chameleon/commit/4c2c7507f2aa906f0580ed59d056e91be7269a93))
- **chameleon-loader** 修复 window上数字目录编译报错 ([f1b236d](https://github.com/didi/chameleon/commit/f1b236dfe602daf9dd476b9c6e33e980e3640dbc))
- **chameleon-mixins** 修复 百度小程序中动画bug ([ca41f54](https://github.com/didi/chameleon/commit/ca41f5460bc0098ce8b401e4b0fc2baad0ffc254))

## [0.1.0-alpha.1](https://github.com/didi/chameleon/compare/v0.0.12...v0.1.0-alpha.1)

### Features

- 支持百度小程序和支付宝小程序
- 支持mock多域名请求

## [0.0.16](https://github.com/didi/chameleon/compare/v0.0.15...v0.0.16)

### Bug Fixes
* 修复 小程序组件导出 样式文件压缩
* 回退 v0.3.0-alpha.0中引入微信预览模式白屏的问题

## [0.0.13](https://github.com/didi/chameleon/compare/b2aa4b...6dc5ff9#diff-b21d2ccb648a84e2a7348250c471cc2aL32)

### Bug Fixes

- **chameleon-templates** 修复默认初始化项目中的微信app.json默认配置([dc58180](https://github.com/didi/chameleon/commit/dc58180827327bbd966398c57602822992238c1f))

## [0.0.12](https://github.com/didi/chameleon/compare/v0.0.11...v0.0.12)

### Bug Fixes
- **chameleon-css-loader** 修复低版本浏览器todo demo白屏问题,fix [#3](https://github.com/didi/chameleon/issues/3) ([d565a29](https://github.com/didi/chameleon/commit/d565a292ccef56de5c283cce2debeaca5ee7d722))
- **chameleon-css-loader** 修复不处理第一个样式多态的问题([d565a29](https://github.com/didi/chameleon/commit/d565a292ccef56de5c283cce2debeaca5ee7d722))
- **chameleon-loader** 修复cml-ui中组件事件不代理的问题([21e0709](https://github.com/didi/chameleon/commit/21e0709353a2635f9055a79009b9d992dfb68f78))
- **chameleon-templates** 修复todo-demo图片损坏问题([de5b42d](https://github.com/didi/chameleon/commit/de5b42da50e5b7315ce1ad33b82c2e6ed94fe04a))
- **chameleon-templates** 升级初始化项目依赖版本,fix [#2](https://github.com/didi/chameleon/issues/2) ([75ba521](https://github.com/didi/chameleon/commit/75ba52111634f218a404ca85fe57e448f8ed880a))



================================================
FILE: LICENSE
================================================
                              Apache License

                        Version 2.0, January 2004

                     http://www.apache.org/licenses/




TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION




1. Definitions.




   "License" shall mean the terms and conditions for use, reproduction,

   and distribution as defined by Sections 1 through 9 of this document.




   "Licensor" shall mean the copyright owner or entity authorized by

   the copyright owner that is granting the License.




   "Legal Entity" shall mean the union of the acting entity and all

   other entities that control, are controlled by, or are under common

   control with that entity. For the purposes of this definition,

   "control" means (i) the power, direct or indirect, to cause the

   direction or management of such entity, whether by contract or

   otherwise, or (ii) ownership of fifty percent (50%) or more of the

   outstanding shares, or (iii) beneficial ownership of such entity.




   "You" (or "Your") shall mean an individual or Legal Entity

   exercising permissions granted by this License.




   "Source" form shall mean the preferred form for making modifications,

   including but not limited to software source code, documentation

   source, and configuration files.




   "Object" form shall mean any form resulting from mechanical

   transformation or translation of a Source form, including but

   not limited to compiled object code, generated documentation,

   and conversions to other media types.




   "Work" shall mean the work of authorship, whether in Source or

   Object form, made available under the License, as indicated by a

   copyright notice that is included in or attached to the work

   (an example is provided in the Appendix below).




   "Derivative Works" shall mean any work, whether in Source or Object

   form, that is based on (or derived from) the Work and for which the

   editorial revisions, annotations, elaborations, or other modifications

   represent, as a whole, an original work of authorship. For the purposes

   of this License, Derivative Works shall not include works that remain

   separable from, or merely link (or bind by name) to the interfaces of,

   the Work and Derivative Works thereof.




   "Contribution" shall mean any work of authorship, including

   the original version of the Work and any modifications or additions

   to that Work or Derivative Works thereof, that is intentionally

   submitted to Licensor for inclusion in the Work by the copyright owner

   or by an individual or Legal Entity authorized to submit on behalf of

   the copyright owner. For the purposes of this definition, "submitted"

   means any form of electronic, verbal, or written communication sent

   to the Licensor or its representatives, including but not limited to

   communication on electronic mailing lists, source code control systems,

   and issue tracking systems that are managed by, or on behalf of, the

   Licensor for the purpose of discussing and improving the Work, but

   excluding communication that is conspicuously marked or otherwise

   designated in writing by the copyright owner as "Not a Contribution."




   "Contributor" shall mean Licensor and any individual or Legal Entity

   on behalf of whom a Contribution has been received by Licensor and

   subsequently incorporated within the Work.




2. Grant of Copyright License. Subject to the terms and conditions of

   this License, each Contributor hereby grants to You a perpetual,

   worldwide, non-exclusive, no-charge, royalty-free, irrevocable

   copyright license to reproduce, prepare Derivative Works of,

   publicly display, publicly perform, sublicense, and distribute the

   Work and such Derivative Works in Source or Object form.




3. Grant of Patent License. Subject to the terms and conditions of

   this License, each Contributor hereby grants to You a perpetual,

   worldwide, non-exclusive, no-charge, royalty-free, irrevocable

   (except as stated in this section) patent license to make, have made,

   use, offer to sell, sell, import, and otherwise transfer the Work,

   where such license applies only to those patent claims licensable

   by such Contributor that are necessarily infringed by their

   Contribution(s) alone or by combination of their Contribution(s)

   with the Work to which such Contribution(s) was submitted. If You

   institute patent litigation against any entity (including a

   cross-claim or counterclaim in a lawsuit) alleging that the Work

   or a Contribution incorporated within the Work constitutes direct

   or contributory patent infringement, then any patent licenses

   granted to You under this License for that Work shall terminate

   as of the date such litigation is filed.




4. Redistribution. You may reproduce and distribute copies of the

   Work or Derivative Works thereof in any medium, with or without

   modifications, and in Source or Object form, provided that You

   meet the following conditions:




   (a) You must give any other recipients of the Work or

       Derivative Works a copy of this License; and




   (b) You must cause any modified files to carry prominent notices

       stating that You changed the files; and




   (c) You must retain, in the Source form of any Derivative Works

       that You distribute, all copyright, patent, trademark, and

       attribution notices from the Source form of the Work,

       excluding those notices that do not pertain to any part of

       the Derivative Works; and




   (d) If the Work includes a "NOTICE" text file as part of its

       distribution, then any Derivative Works that You distribute must

       include a readable copy of the attribution notices contained

       within such NOTICE file, excluding those notices that do not

       pertain to any part of the Derivative Works, in at least one

       of the following places: within a NOTICE text file distributed

       as part of the Derivative Works; within the Source form or

       documentation, if provided along with the Derivative Works; or,

       within a display generated by the Derivative Works, if and

       wherever such third-party notices normally appear. The contents

       of the NOTICE file are for informational purposes only and

       do not modify the License. You may add Your own attribution

       notices within Derivative Works that You distribute, alongside

       or as an addendum to the NOTICE text from the Work, provided

       that such additional attribution notices cannot be construed

       as modifying the License.




   You may add Your own copyright statement to Your modifications and

   may provide additional or different license terms and conditions

   for use, reproduction, or distribution of Your modifications, or

   for any such Derivative Works as a whole, provided Your use,

   reproduction, and distribution of the Work otherwise complies with

   the conditions stated in this License.




5. Submission of Contributions. Unless You explicitly state otherwise,

   any Contribution intentionally submitted for inclusion in the Work

   by You to the Licensor shall be under the terms and conditions of

   this License, without any additional terms or conditions.

   Notwithstanding the above, nothing herein shall supersede or modify

   the terms of any separate license agreement you may have executed

   with Licensor regarding such Contributions.




6. Trademarks. This License does not grant permission to use the trade

   names, trademarks, service marks, or product names of the Licensor,

   except as required for reasonable and customary use in describing the

   origin of the Work and reproducing the content of the NOTICE file.




7. Disclaimer of Warranty. Unless required by applicable law or

   agreed to in writing, Licensor provides the Work (and each

   Contributor provides its Contributions) on an "AS IS" BASIS,

   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

   implied, including, without limitation, any warranties or conditions

   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A

   PARTICULAR PURPOSE. You are solely responsible for determining the

   appropriateness of using or redistributing the Work and assume any

   risks associated with Your exercise of permissions under this License.




8. Limitation of Liability. In no event and under no legal theory,

   whether in tort (including negligence), contract, or otherwise,

   unless required by applicable law (such as deliberate and grossly

   negligent acts) or agreed to in writing, shall any Contributor be

   liable to You for damages, including any direct, indirect, special,

   incidental, or consequential damages of any character arising as a

   result of this License or out of the use or inability to use the

   Work (including but not limited to damages for loss of goodwill,

   work stoppage, computer failure or malfunction, or any and all

   other commercial damages or losses), even if such Contributor

   has been advised of the possibility of such damages.




9. Accepting Warranty or Additional Liability. While redistributing

   the Work or Derivative Works thereof, You may choose to offer,

   and charge a fee for, acceptance of support, warranty, indemnity,

   or other liability obligations and/or rights consistent with this

   License. However, in accepting such obligations, You may act only

   on Your own behalf and on Your sole responsibility, not on behalf

   of any other Contributor, and only if You agree to indemnify,

   defend, and hold each Contributor harmless for any liability

   incurred by, or claims asserted against, such Contributor by reason

   of your accepting any such warranty or additional liability.




END OF TERMS AND CONDITIONS




APPENDIX: How to apply the Apache License to your work.




   To apply the Apache License to your work, attach the following

   boilerplate notice, with the fields enclosed by brackets "{}"

   replaced with your own identifying information. (Don't include

   the brackets!)  The text should be enclosed in the appropriate

   comment syntax for the file format. We also recommend that a

   file or class name and description of purpose be included on the

   same "printed page" as the copyright notice for easier

   identification within third-party archives.




Copyright (C) 2017 Beijing Didi Infinity Technology and Development Co.,Ltd. All rights reserved.




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.


================================================
FILE: README.md
================================================


Chameleon [![Build Status](https://www.travis-ci.org/didi/chameleon.svg?branch=master)](https://www.travis-ci.org/didi/chameleon) [![license](https://img.shields.io/npm/l/chameleon-tool.svg?registry_uri=https%3A%2F%2Fregistry.npmjs.com&style=popout-square)](https://www.npmjs.com/package/chameleon-tool) [![version](https://img.shields.io/npm/v/chameleon-tool.svg?style=flat)](https://www.npmjs.com/package/chameleon-tool)

**Chameleon**/kəˈmiːlɪən/,简写`CML`,中文名`卡梅龙`;中文意思`变色龙`,意味着就像变色龙一样能适应不同环境的跨端整体解决方案。

[English Introduction](https://github.com/didi/chameleon/blob/gh-pages/doc/quick_start/readme-en.md) | 中文介绍

## 文档
[新官网文档](http://cml.didi.cn/)

[CML.JS.org](https://cml.js.org)

- [安装](https://CML.JS.org/doc/quick_start/quick_start.html)
- [快速上手](https://CML.JS.org/doc/quick_start/quick_start.html)
- [API 文档](https://CML.JS.org/doc/api/api.html)
- [组件文档](https://CML.JS.org/doc/component/component.html)
- [资源汇总 💰awesome-cml](https://github.com/chameleon-team/awesome-cml):依赖库、demo、完整应用示例、学习资源
- [后续规划](https://github.com/didi/chameleon/wiki/%E5%90%8E%E6%9C%9F%E8%A7%84%E5%88%92)
- [五分钟上手视频教程](https://mp.weixin.qq.com/s/3NY_pbqDVnbQSYQG_D2qiA)
- [青桔单车 chameleon 跨平台实践分享](https://mp.weixin.qq.com/s/N8PpxRHHtlIHVlemQ1Gepg)
- [谁在使用?](https://github.com/didi/chameleon/issues/131)

## 仓库更新说明

本仓库仅包含编译时代码,全部开源代码参见:https://github.com/chameleon-team

master为稳定版本,除了紧急 bug 修复,每份代码提交都有很严格的发布流程规范,会先在分支经历一段时间灰度期,确认稳定可用后才会合并到 master,
[进行中的项目分支介绍](https://github.com/didi/chameleon/wiki/%E8%BF%9B%E8%A1%8C%E4%B8%AD%E7%9A%84%E9%A1%B9%E7%9B%AE)

## CML 即 多端
支持平台:**web、微信小程序、支付宝小程序、百度小程序、[android(weex)](https://github.com/chameleon-team/chameleon-sdk-android)、[ios(weex)](https://github.com/chameleon-team/chameleon-sdk-ios)、qq 小程序、[字节跳动小程序](https://cml.js.org/doc/example/tt_miniapp.html)、[快应用](https://cml.js.org/doc/example/quickapp_miniapp.html)、持续更新中**

**一端所见即多端所见**——多端高度一致,无需关注各端文档。

> 基于多态协议不影响各端差异化灵活性
<a href="https://github.com/beatles-chameleon/cml-demo">
<img src="https://cml.js.org/doc/assets/efficient.gif" width="400px"/>
</a>


|                                                                 web                                                                  |                                                             微信小程序                                                             |                                                              native-weex                                                              |                                                               百度小程序                                                               |                                                              支付宝小程序                                                              |
| :----------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: |
| <a href="https://github.com/beatles-chameleon/cml-demo"><img src="https://cmljs.org/cml-demo/preview/web-1.jpg" width="200px"/> </a> | <a href="https://github.com/beatles-chameleon/cml-demo"><img src="https://cmljs.org/cml-demo/preview/wx-1.jpg" width="200px"/></a> | <a href="https://github.com/beatles-chameleon/cml-demo"><img src="https://cmljs.org/cml-demo/preview/weex-1.jpg" width="200px"/> </a> | <a href="https://github.com/beatles-chameleon/cml-demo"><img src="https://cmljs.org/cml-demo/preview/baidu-1.png" width="200px"/> </a> | <a href="https://github.com/beatles-chameleon/cml-demo"><img src="https://cmljs.org/cml-demo/preview/alipay-1.png" width="200px"/></a> |

## 背景

研发同学在端内既追求 h5 的灵活性,也要追求性能趋近于原生。
面对入口扩张,App 客户端、微信小程序、支付宝小程序、百度小程序、Android 厂商联盟快应用、其他类小程序,单一功能在各平台都要重复实现,开发和维护成本成倍增加。迫切需要维护一套代码可以构建多入口的解决方案,滴滴跨端解决方案 Chameleon 终于发布。真正专注于让一套代码运行多端。

## 设计理念

软件架构设计里面最基础的概念“拆分”和“合并”,拆分的意义是“分而治之”,将复杂问题拆分成单一问题解决,比如后端业务系统的”微服务化“设计;“合并”的意义是将同样的业务需求抽象收敛到一块,达成高效率高质量的目的,例如后端业务系统中的“中台服务”设计。

而 Chameleon 属于后者,通过定义统一的语言框架+[统一多态协议](http://cml.didi.cn/docs/poly.html),从多端(对应多个独立服务)业务中抽离出自成体系、连续性强、可维护强的“前端中台服务”。

<img src="https://cml.js.org/doc/assets/chameleon-idea.png" width="400px"/>

### 跨端目标

虽然不同各端环境千变万化,但万变不离其宗的是 MVVM 架构思想,**Chameleon 目标是让 MVVM 跨端环境大统一**。

![跨端目标](https://cml.js.org/doc/assets/mvvm4.png)


## 开发语言
代码示例
```html
<template>
  <view>
    <text>{{title}}</text><text>{{reversedTitle}}</text>
  </view>
</template>

<script>
class Index  {
  data = {
    title: "chameleon"
  }
  computed = {
    reversedTitle: function () {
      return this.title.split('').reverse().join('')
    }
  }
  mounted() {}
  destroyed() {}
}
export default new Index();
</script>
```
从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,同样道理,chameleon 中采用的是 CML + CMSS + JS。

[JS](https://CML.JS.org/doc/logic/logic.html)语法用于处理页面的逻辑层,与普通网页编程相比,本项目目标定义标准 MVVM 框架,拥有完整的生命周期,watch,computed,数据双向绑定等优秀的特性,能够快速提高开发速度、降低维护成本。

[CML](https://CML.JS.org/doc/view/cml.html)(Chameleon Markup Language)用于描述页面的结构,我们知道 HTML 是有一套标准的语义化标签,例如文本是`<span>` 按钮是`<button>`。CML 同样具有一套标准的标签,我们将标签定义为`组件`,CML 为用户提供了一系列[组件](https://CML.JS.org/doc/component/base/base.html)。同时 CML 中还支持<b>模板语法</b>,例如条件渲染、列表渲染,数据绑定等等。同时,CML 支持使用[类 VUE 语法](https://CML.JS.org/doc/view/vue.html),让你更快入手。

[CMSS](https://CML.JS.org/doc/view/cmss.html)(Chameleon Style Sheets)用于描述 CML 页面结构的样式语言,其具有大部分 CSS 的特性,并且还可以支持各种 css 的预处语言`less stylus`。

CML 采用与 Vue 一致的组件化方案、单文件组织方式、生命周期,同时数据响应能力对齐 Vue,数据管理能力对齐 Vuex,非常方便开发者上手、维护。

通过以上对于开发语言的介绍,相信你看到只要是有过网页编程知识的人都可以快速的上手chameleon的开发。

## 多端高度一致

深入到编程语言维度保障一致性,包括框架、生命周期、内置组件、事件通信、路由、界面布局、界面单位、组件作用域、组件通信等高度统一

## 丰富的组件

在用 CML 写页面时,chameleon 提供了[丰富的组件](https://CML.JS.org/doc/component/component.html)供开发者使用,内置的有`button switch radio checkbox`等组件,扩展的有`c-picker c-dialog c-loading`等等,覆盖了开发工作中常用的组件。

## 丰富的 API

为了方便开发者的高效开发,chameleon 提供了[丰富的 API 库](https://CML.JS.org/doc/api/api.html),发布为 npm 包`chameleon-api`,里面包括了网络请求、数据存储、地理位置、系统信息、动画等方法。

## 自由定制 API 和组件

基于强大的[多态协议](https://CML.JS.org/doc/framework/polymorphism/intro.html),可自由扩展任意 API 和组件,不强依赖框架的更新。各端原始项目中已积累大量组件,也能直接引入到跨端项目中使用。

基于强大的[多态协议](https://CML.JS.org/doc/framework/polymorphism/intro.html),充分隔离各端差异化实现,轻松维护一套代码实现跨多端

## [规范校验](http://cml.didi.cn/docs/introduction.html#%E6%99%BA%E8%83%BD%E8%A7%84%E8%8C%83%E6%A0%A1%E9%AA%8C)

代码规范校验,当出现不符合规范要求的代码时,编辑器会展示智能提示,不用挨个调试各端代码,同时命令行启动窗口也会提示代码的错误位置。

## 渐进式跨端

既想一套代码运行多端,又不用大刀阔斧的重构项目?不仅可以用 cml 开发页面,也可以将多端重用组件用 cml 开发,直接在原有项目里面调用。

## 先进前端开发体验

Chameleon 不仅仅是跨端解决方案。基于优秀的前端打包工具 Webpack,吸收了业内多年来积累的最有用的工程化设计,提供了前端基础开发脚手架命令工具,帮助端开发者从开发、联调、测试、上线等全流程高效的完成业务开发。

## 联系我们

[ChameleonCore@didiglobal.com](mailto:ChameleonCore@didiglobal.com)

## [Beatles Chameleon 团队](https://github.com/chameleon-team)

负责人:Conan

内部成员:透心凉、Sgoddon、动机不纯、Jalon、Jack、卡尺哈哈、change、Observer、Kevin、guoqingSmile、Mr.MY、JiM、lzc、名字待定、朱智恒、亭、龚磊、w55、小龙、不懂小彬、荣景超

## 特别鸣谢
[![zheyizhifeng](https://avatars3.githubusercontent.com/u/9592849?s=100&v=4)](https://github.com/zheyizhifeng)|[(头像空)](https://github.com/whuhenrylee)|[![broven](https://avatars0.githubusercontent.com/u/12854613?s=100&v=4)](https://github.com/broven/)|[(头像空)](https://github.com/Jeany/)
:---:|:---:|:---:|:---:
[zheyizhifeng(快应用)](https://github.com/zheyizhifeng)|[whuhenrylee(快应用)](https://github.com/whuhenrylee)|[broven(阿里影业)](https://github.com/broven/)|[Jeany(芒果 TV)](https://github.com/yaxiji/)

## 贡献者们
快应用官方研发团队、luyixin、z-mirror、夏夜焰火(百度)
[kingsleydon](https://github.com/kingsleydon)

## 微信 & QQ 交流群

**微信**<br />
<img width="150px" src="https://CML.JS.org/doc/assets/wx-qr-code.png" />

<br />

**QQ**<br />
<img width="150px" src="https://cmljs.org/doc/assets/qq2-qrcode.JPG" />


## 协议

Apache-2.0 license

Chameleon 基于 Apache-2.0 协议进行分发和使用,更多信息参见[协议文件](./LICENSE)。

## 友情链接

[DoraemonKit](https://github.com/didi/DoraemonKit) /'dɔ:ra:'emɔn/,简称DoKit, 一款功能齐全的客户端( iOS 、Android、微信小程序 )研发助手,你值得拥有。

[Mand Mobile](https://github.com/didi/mand-mobile) 一款优秀的面向金融场景的 移动端UI组件库。


[Cube-UI](https://github.com/didi/cube-ui)  基于 Vue.js 实现的精致移动端组件库。


================================================
FILE: commitlint.config.js
================================================
//git commit -m"feat: 新增功能"
//规范团队commit规范,参考commitlint-angular https://www.npmjs.com/package/@commitlint/config-angular
module.exports = {
  extends: ['@commitlint/config-angular'],
  rules: {
    'type-enum': [2, 'always', [
      "feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"
    ]],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never'],
  }
};

//[build, ci, docs, feat, fix, perf, refactor, revert, style, test]





================================================
FILE: elevate/cr.yml
================================================
# 鲲鹏接入教程:http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=111903894
# ---------refer用来标识此项目评审入口是OneExperience, 请勿改动--------- #
refer: OE
strategy: ownerOne
owners: wangmengjun
reviewers: 


================================================
FILE: lerna.json
================================================
{
  "packages": [
    "packages/*"
  ],
  "version": "1.0.8",
  "command": {
    "publish": {
      "allowBranch": "master",
      "npmClient": "npm",
      "verifyAccess": false,
      "registry": "https://registry.npmjs.org/"
    },
    "add": {
      "registry": "https://registry.npmjs.org/"
    },
    "bootstrap": {
      "registry": "https://registry.npmjs.org/"
    }
  }
}


================================================
FILE: package.json
================================================
{
  "name": "root",
  "private": true,
  "scripts": {
    "build": "lerna run build",
    "publish": "npm run build && lerna publish",
    "coverage": "sh ./test/test.sh",
    "clear": "rm -rf package-lock.json  packages/*/package-lock.json",
    "clear-all": "rimraf package-lock.json packages/*/node_modules packages/*/package-lock.json"
  },
  "author": "Chameleon-Team",
  "license": "Apache 2.0",
  "devDependencies": {
    "@commitlint/cli": "^8.2.0",
    "@commitlint/config-angular": "^8.2.0",
    "babel-eslint": "^10.0.3",
    "eslint": "^6.8.0",
    "eslint-config-standard": "^14.1.0",
    "eslint-plugin-import": "^2.19.1",
    "eslint-plugin-node": "^11.0.0",
    "eslint-plugin-promise": "^4.2.1",
    "eslint-plugin-standard": "^4.0.1",
    "eslint-plugin-vue": "^6.0.2",
    "husky": "^3.1.0",
    "istanbul": "^0.4.5",
    "lerna": "^3.5.1",
    "lint-staged": "^9.5.0"
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-commit": "lint-staged"
    }
  },
  "dependencies": {
    "babel-core": "^6.26.3",
    "babel-istanbul": "^0.12.2",
    "chai": "^4.2.0",
    "codecov": "^3.1.0",
    "coveralls": "^3.0.2",
    "mocha": "*",
    "nyc": "*",
    "rimraf": "^2.6.3"
  },
  "lint-staged": {
    "packages/**/*.js": "eslint --fix"
  }
}


================================================
FILE: packages/babel-plugin-chameleon-import/.editorconfig
================================================
# http://editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab


================================================
FILE: packages/babel-plugin-chameleon-import/.eslintignore
================================================
**/*/__tests__


================================================
FILE: packages/babel-plugin-chameleon-import/.eslintrc
================================================
{
  "extends": "eslint-config-airbnb/base",
  "rules": {
    "no-console": [0]
  }
}


================================================
FILE: packages/babel-plugin-chameleon-import/.gitignore
================================================
.idea
tmp
node_modules
coverage
lib
*.log
*.log.*


================================================
FILE: packages/babel-plugin-chameleon-import/.npmignore
================================================
.idea
tmp
coverage
__tests__


================================================
FILE: packages/babel-plugin-chameleon-import/.travis.yml
================================================
language: node_js
node_js:
  - 8
  - 10
after_success:
  - npm run test


================================================
FILE: packages/babel-plugin-chameleon-import/package.json
================================================
{
  "name": "babel-plugin-chameleon-import",
  "version": "1.0.8",
  "description": "Component modular import plugin for babel.",
  "repository": {
    "type": "git",
    "url": "https://github.com/ant-design/babel-plugin-import"
  },
  "main": "src/index.js",
  "scripts": {
    "debug": "umi-tools test",
    "lint": "eslint --ext .js src",
    "coveralls": "cat ./coverage/lcov.info | coveralls"
  },
  "pre-commit": [
    "lint"
  ],
  "keywords": [
    "babel-plugin",
    "antd"
  ],
  "author": "Chameleon-Team",
  "license": "Apache",
  "mail": "ChameleonCore@didiglobal.com",
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/preset-react": "^7.0.0",
    "babel-core": "^7.0.0-0",
    "babel-preset-umi": "^1.0.0",
    "coveralls": "^2.11.6",
    "eslint": "^2.7.0",
    "eslint-config-airbnb": "^6.2.0",
    "material-ui": "^0.15.4",
    "pre-commit": "~1.1.2",
    "react-toolbox": "^1.2.5",
    "umi-tools": "^0.1.4"
  },
  "babel": {
    "presets": [
      "umi"
    ]
  },
  "files": [
    "src",
    "lib",
    "package.json",
    "README.md"
  ],
  "dependencies": {
    "@babel/helper-module-imports": "^7.0.0",
    "@babel/runtime": "^7.0.0"
  },
  "gitHead": "5ddcde4330774710f7646559446e008f7785ce00"
}

================================================
FILE: packages/babel-plugin-chameleon-import/src/Plugin.js
================================================
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _path2 = require("path");

var _helperModuleImports = require("@babel/helper-module-imports");

function camel2Dash(_str) {
  const str = _str[0].toLowerCase() + _str.substr(1);

  return str.replace(/([A-Z])/g, $1 => `-${$1.toLowerCase()}`);
}

function camel2Underline(_str) {
  const str = _str[0].toLowerCase() + _str.substr(1);

  return str.replace(/([A-Z])/g, $1 => `_${$1.toLowerCase()}`);
}

function winPath(path) {
  return path.replace(/\\/g, '/');
}

class Plugin {
  constructor(libraryName, libraryDirectory, style, camel2DashComponentName, camel2UnderlineComponentName, libraryFileName, customName, transformToDefaultImport, types, index = 0, defaulLibraryDirectory, defaulLibraryFileName) {
    this.libraryName = libraryName;
    this.defaulLibraryDirectory = defaulLibraryDirectory;
    this.libraryDirectory = typeof libraryDirectory === 'undefined' ? 'lib' : libraryDirectory;
    this.camel2DashComponentName = typeof camel2DashComponentName === 'undefined' ? true : camel2DashComponentName;
    this.camel2UnderlineComponentName = camel2UnderlineComponentName;
    this.style = style || false;
    this.libraryFileName = libraryFileName || '';
    this.defaulLibraryFileName = defaulLibraryFileName || '';
    this.customName = customName;
    this.transformToDefaultImport = typeof transformToDefaultImport === 'undefined' ? true : transformToDefaultImport;
    this.types = types;
    this.pluginStateKey = `importPluginState${index}`;
    this.libraryVariable = '';
  }

  getPluginState(state) {
    if (!state[this.pluginStateKey]) {
      state[this.pluginStateKey] = {}; // eslint-disable-line
    }

    return state[this.pluginStateKey];
  }

  isInGlobalScope(path, name, pluginState) {
    const parentPath = path.findParent(_path => _path.scope.hasOwnBinding(pluginState.specified[name]));
    return !!parentPath && parentPath.isProgram();
  }

  importMethod(methodName, file, pluginState) {
    if (!pluginState.selectedMethods[methodName]) {
      const libraryDirectory = this.libraryDirectory;
      const style = this.style;
      const transformedMethodName = methodName;
      const path = winPath(this.customName ? this.customName(transformedMethodName) : (0, _path2.join)(this.libraryName, libraryDirectory, transformedMethodName, this.libraryFileName) // eslint-disable-line
      );
      pluginState.selectedMethods[methodName] = this.transformToDefaultImport // eslint-disable-line
      ? (0, _helperModuleImports.addDefault)(file.path, path, {
        nameHint: methodName
      }) : (0, _helperModuleImports.addNamed)(file.path, methodName, path);

      if (style === true) {
        (0, _helperModuleImports.addSideEffect)(file.path, `${path}/style`);
      } else if (style === 'css') {
        (0, _helperModuleImports.addSideEffect)(file.path, `${path}/style/css`);
      } else if (typeof style === 'function') {
        const stylePath = style(path, file);

        if (stylePath) {
          (0, _helperModuleImports.addSideEffect)(file.path, stylePath);
        }
      }
    }

    return Object.assign({}, pluginState.selectedMethods[methodName]);
  }

  buildExpressionHandler(node, props, path, state) {
    const file = path && path.hub && path.hub.file || state && state.file;
    const types = this.types;
    const pluginState = this.getPluginState(state);
    props.forEach(prop => {
      if (!types.isIdentifier(node[prop])) return;

      if (pluginState.specified[node[prop].name]) {
        node[prop] = this.importMethod(pluginState.specified[node[prop].name], file, pluginState); // eslint-disable-line
      }
    });
  }

  buildDeclaratorHandler(node, prop, path, state) {
    const file = path && path.hub && path.hub.file || state && state.file;
    const types = this.types;
    const pluginState = this.getPluginState(state);
    if (!types.isIdentifier(node[prop])) return;

    if (pluginState.specified[node[prop].name] && path.scope.hasBinding(node[prop].name) && path.scope.getBinding(node[prop].name).path.type === 'ImportSpecifier') {
      node[prop] = this.importMethod(node[prop].name, file, pluginState); // eslint-disable-line
    }
  }

  ProgramEnter(path, state) {
    const pluginState = this.getPluginState(state);
    pluginState.specified = Object.create(null);
    pluginState.libraryObjs = Object.create(null);
    pluginState.selectedMethods = Object.create(null);
    pluginState.pathsToRemove = [];
  }

  ProgramExit(path, state) {
    this.getPluginState(state).pathsToRemove.forEach(p => !p.removed && p.remove());
  }

  Identifier(path, state) {
    const node = path.node;
    const pluginState = this.getPluginState(state);
    //如果使用了libraryVariable,则增加import libraryVariable from libraryName
    if(node.name === this.libraryVariable && (path.parent.type !== 'ImportDefaultSpecifier') && pluginState.libraryObjs[this.libraryVariable]) {
      const libraryName = _path2.join(this.libraryName, this.defaulLibraryDirectory, this.defaulLibraryFileName)
      _helperModuleImports.addDefault(path.hub.file.path, libraryName, {
        nameHint: this.libraryVariable
      })
      node.name = `_${node.name}`;
    }
    
  }

  ImportDeclaration(path, state) {
    const node = path.node; // path maybe removed by prev instances.

    if (!node) return;
    const value = node.source.value;
    const libraryName = this.libraryName;
    const types = this.types;
    const pluginState = this.getPluginState(state);

    if (value === libraryName) {
      node.specifiers.forEach(spec => {
        if (types.isImportSpecifier(spec)) {
          pluginState.specified[spec.local.name] = spec.imported.name;
        } else {
          pluginState.libraryObjs[spec.local.name] = true;
          this.libraryVariable = spec.local.name;
        }
      });
      pluginState.pathsToRemove.push(path);
    }
  }

  CallExpression(path, state) {
    const node = path.node;
    const file = path && path.hub && path.hub.file || state && state.file;
    const name = node.callee.name;
    const types = this.types;
    const pluginState = this.getPluginState(state);

    if (types.isIdentifier(node.callee)) {
      if (pluginState.specified[name]) {
        node.callee = this.importMethod(pluginState.specified[name], file, pluginState);
      }
    }

    node.arguments = node.arguments.map(arg => {
      const argName = arg.name;

      if (pluginState.specified[argName] && path.scope.hasBinding(argName) && path.scope.getBinding(argName).path.type === 'ImportSpecifier') {
        return this.importMethod(pluginState.specified[argName], file, pluginState);
      }

      return arg;
    });
  }

  MemberExpression(path, state) {
    const node = path.node;
    const file = path && path.hub && path.hub.file || state && state.file;
    const pluginState = this.getPluginState(state); // multiple instance check.

    if (!node.object || !node.object.name) return;

    if (pluginState.libraryObjs[node.object.name]) {
      // antd.Button -> _Button
      if (node.property.type === 'Identifier') {
        //antd.Button
        path.replaceWith(this.importMethod(node.property.name, file, pluginState));
      } else if (node.property.type === 'Literal') {
        //antd['Button']
        path.replaceWith(this.importMethod(node.property.value, file, pluginState));
      }
    } else if (pluginState.specified[node.object.name]) {
      node.object = this.importMethod(pluginState.specified[node.object.name], file, pluginState);
    }
  }

  Property(path, state) {
    const node = path.node;
    this.buildDeclaratorHandler(node, 'value', path, state);
  }

  VariableDeclarator(path, state) {
    const node = path.node;
    this.buildDeclaratorHandler(node, 'init', path, state);
  }

  ArrayExpression(path, state) {
    const node = path.node;
    const props = node.elements.map((_, index) => index);
    this.buildExpressionHandler(node.elements, props, path, state);
  }

  LogicalExpression(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['left', 'right'], path, state);
  }

  ConditionalExpression(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['test', 'consequent', 'alternate'], path, state);
  }

  IfStatement(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['test'], path, state);
    this.buildExpressionHandler(node.test, ['left', 'right'], path, state);
  }

  ExpressionStatement(path, state) {
    const node = path.node;
    const types = this.types;

    if (types.isAssignmentExpression(node.expression)) {
      this.buildExpressionHandler(node.expression, ['right'], path, state);
    }
  }

  ReturnStatement(path, state) {
    const types = this.types;
    const file = path && path.hub && path.hub.file || state && state.file;
    const node = path.node;
    const pluginState = this.getPluginState(state);

    if (node.argument && types.isIdentifier(node.argument) && pluginState.specified[node.argument.name] && this.isInGlobalScope(path, node.argument.name, pluginState)) {
      node.argument = this.importMethod(node.argument.name, file, pluginState);
    }
  }

  ExportDefaultDeclaration(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['declaration'], path, state);
  }

  BinaryExpression(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['left', 'right'], path, state);
  }

  NewExpression(path, state) {
    const node = path.node;
    this.buildExpressionHandler(node, ['callee', 'arguments'], path, state);
  }

}

exports.default = Plugin;

================================================
FILE: packages/babel-plugin-chameleon-import/src/index.js
================================================
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = _default;

var _assert = _interopRequireDefault(require("assert"));

var _Plugin = _interopRequireDefault(require("./Plugin"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _default({
  types
}) {
  let plugins = null; // Only for test

  global.__clearBabelAntdPlugin = () => {
    plugins = null;
  };

  function applyInstance(method, args, context) {
    var _iteratorNormalCompletion = true;
    var _didIteratorError = false;
    var _iteratorError = undefined;

    try {
      for (var _iterator = plugins[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
        const plugin = _step.value;

        if (plugin[method]) {
          plugin[method].apply(plugin, [...args, context]);
        }
      }
    } catch (err) {
      _didIteratorError = true;
      _iteratorError = err;
    } finally {
      try {
        if (!_iteratorNormalCompletion && _iterator.return != null) {
          _iterator.return();
        }
      } finally {
        if (_didIteratorError) {
          throw _iteratorError;
        }
      }
    }
  }

  const Program = {
    enter(path, {
      opts = {}
    }) {
      // Init plugin instances once.
      if (!plugins) {
        if (Array.isArray(opts)) {
          plugins = opts.map(({
            libraryName,
            libraryDirectory,
            defaulLibraryDirectory,
            style,
            camel2DashComponentName,
            camel2UnderlineComponentName,
            libraryFileName,
            customName,
            transformToDefaultImport,
            defaulLibraryFileName
          }, index) => {
            (0, _assert.default)(libraryName, 'libraryName should be provided');
            return new _Plugin.default(libraryName, libraryDirectory, style, camel2DashComponentName, camel2UnderlineComponentName, libraryFileName, customName, transformToDefaultImport, types, index, defaulLibraryDirectory, defaulLibraryFileName);
          });
        } else {
          (0, _assert.default)(opts.libraryName, 'libraryName should be provided');
          plugins = [new _Plugin.default(opts.libraryName, opts.libraryDirectory, opts.style, opts.camel2DashComponentName, opts.camel2UnderlineComponentName, opts.libraryFileName, opts.customName, opts.transformToDefaultImport, types, null, opts.defaulLibraryDirectory, opts.defaulLibraryFileName)];
        }
      }

      applyInstance('ProgramEnter', arguments, this); // eslint-disable-line
    },

    exit() {
      applyInstance('ProgramExit', arguments, this); // eslint-disable-line
    }

  };
  const methods = ['ImportDeclaration', 'CallExpression', 'MemberExpression', 'Property', 'VariableDeclarator', 'ArrayExpression', 'LogicalExpression', 'ConditionalExpression', 'IfStatement', 'ExpressionStatement', 'ReturnStatement', 'ExportDefaultDeclaration', 'BinaryExpression', 'NewExpression', 'Identifier'];
  const ret = {
    visitor: {
      Program
    }
  };

  for (var _i = 0; _i < methods.length; _i++) {
    const method = methods[_i];

    ret.visitor[method] = function () {
      // eslint-disable-line
      applyInstance(method, arguments, ret.visitor); // eslint-disable-line
    };
  }

  return ret;
}

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/array-expression/actual.js
================================================
import { Button } from 'antd';

var a = [Button];
var b = { 'test': [Button] };
[Button].map(function(){});


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/array-expression/expected.js
================================================
"use strict";

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var a = [_button.default];
var b = {
  'test': [_button.default]
};
[_button.default].map(function () {});



================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments/actual.js
================================================
import { Modal } from 'antd';
const _Modal = bind({})(Modal);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments/expected.js
================================================
"use strict";

var _modal = _interopRequireDefault(require("antd/lib/modal"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var _Modal = bind({})(_modal.default);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments-identifier/actual.js
================================================
import { Modal } from 'antd';
const _Modal = bind()(Modal);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments-identifier/expected.js
================================================
"use strict";

var _modal = _interopRequireDefault(require("antd/lib/modal"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var _Modal = bind()(_modal.default);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/binary-expression/actual.js
================================================
import { Button } from 'antd';
const extraProps = undefined === Button ? { type: 'primary' } : {};
console.log(extraProps);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/binary-expression/expected.js
================================================
"use strict";

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var extraProps = undefined === _button.default ? {
  type: 'primary'
} : {};
console.log(extraProps);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/conditions/actual.js
================================================
import { Select } from 'antd';

if (a === Select) {}
if (Select) {}

Select ? 'a' : 'b';
a ? Select : 2;

Select || 'a';
a || Select;


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/conditions/expected.js
================================================
"use strict";

var _select = _interopRequireDefault(require("antd/lib/select"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (a === _select.default) {}

if (_select.default) {}

_select.default ? 'a' : 'b';
a ? _select.default : 2;
_select.default || 'a';
a || _select.default;

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-name/actual.js
================================================
import { Button } from 'plat/antd';

ReactDOM.render(<div component={Button} />);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-name/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", {
  component: _button.default
}));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path/actual.js
================================================
import React from 'react';
import ReactDom from 'react-dom';
import { Button } from 'antd';

ReactDOM.render(<div>
  <Button>xxxx</Button>
</div>, document.getElementById('react-container'));


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path/expected.js
================================================
"use strict";

require("antd/lib/button/style/2x");

var _button = _interopRequireDefault(require("antd/lib/button"));

var _react = _interopRequireDefault(require("react"));

var _reactDom = _interopRequireDefault(require("react-dom"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, null, "xxxx")), document.getElementById('react-container'));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path-ignore/actual.js
================================================
import React from "react";
import ReactDom from "react-dom";
import { Animation, Button } from "antd";

ReactDOM.render(
  <Animation>
    <Button>xxxx</Button>
  </Animation>,
  document.getElementById("react-container")
);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path-ignore/expected.js
================================================
"use strict";

var _animation = _interopRequireDefault(require("antd/lib/animation"));

require("antd/lib/button/style/2x");

var _button = _interopRequireDefault(require("antd/lib/button"));

var _react = _interopRequireDefault(require("react"));

var _reactDom = _interopRequireDefault(require("react-dom"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement(_animation.default, null, _react.default.createElement(_button.default, null, "xxxx")), document.getElementById("react-container"));


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-direct/actual.js
================================================
import { message } from 'antd';

message('xxx');


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-direct/expected.js
================================================
"use strict";

var _message2 = _interopRequireDefault(require("antd/lib/message"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _message2.default)('xxx');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-member/actual.js
================================================
import { message } from 'antd';

message.success('xxx');


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-member/expected.js
================================================
"use strict";

var _message2 = _interopRequireDefault(require("antd/lib/message"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

_message2.default.success('xxx');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/export-import/actual.js
================================================
import { DatePicker } from 'antd';
export default DatePicker;



================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/export-import/expected.js
================================================
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _datePicker = _interopRequireDefault(require("antd/lib/date-picker"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var _default = _datePicker.default;
exports.default = _default;

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/expression-statement/actual.js
================================================
import {Toast} from 'antd-mobile';
window.Toast = Toast;
Toast.success('test');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/expression-statement/expected.js
================================================
"use strict";

var _antdMobile = require("antd-mobile");

window.Toast = _antdMobile.Toast;

_antdMobile.Toast.success('test');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/file-name/actual.js
================================================
import { Select } from 'antd-mobile-fake-2.0';

if (Select) {}

console.log(Select);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/file-name/expected.js
================================================
"use strict";

var _index = _interopRequireDefault(require("antd-mobile-fake-2.0/lib/select/index.native"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (_index.default) {}

console.log(_index.default);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-alias/actual.js
================================================
import { Select as AntdSelect } from 'antd';

if (AntdSelect) {
  console.log('foo');
}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-alias/expected.js
================================================
"use strict";

var _select = _interopRequireDefault(require("antd/lib/select"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (_select.default) {
  console.log('foo');
}

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-css/actual.js
================================================
import { message } from 'antd';
import { Button } from 'antd';

message('xxx');
ReactDOM.render(<div>
  <Button>xxxx</Button>
</div>);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-css/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

require("antd/lib/button/style");

var _button = _interopRequireDefault(require("antd/lib/button"));

require("antd/lib/message/style");

var _message2 = _interopRequireDefault(require("antd/lib/message"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _message2.default)('xxx');
ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, null, "xxxx")));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/keep-named-import/actual.js
================================================
import { start, end } from 'stream';

start();
end();


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/keep-named-import/expected.js
================================================
"use strict";

var _end2 = require("stream/lib/end");

var _start2 = require("stream/lib/start");

(0, _start2.start)();
(0, _end2.end)();


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/material-ui/actual.js
================================================
import { Toolbar } from 'material-ui';

Toolbar('xxx');


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/material-ui/expected.js
================================================
"use strict";

var _Toolbar2 = _interopRequireDefault(require("material-ui/Toolbar"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _Toolbar2.default)('xxx');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/member-expression/actual.js
================================================
import antd from 'antd';

ReactDOM.render(<div>
  <antd.Button type="primary">Button</antd.Button>
</div>);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/member-expression/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, {
  type: "primary"
}, "Button")));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/modules-false/actual.js
================================================
import React from 'react';
import ReactDom from 'react-dom';
import { Button } from 'antd';

ReactDOM.render(<div>
  <Button>xxxx</Button>
</div>, document.getElementById('react-container'));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/modules-false/expected.js
================================================
"use strict";

require("antd/lib/button/style");

var _button = _interopRequireDefault(require("antd/lib/button"));

var _react = _interopRequireDefault(require("react"));

var _reactDom = _interopRequireDefault(require("react-dom"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, null, "xxxx")), document.getElementById('react-container'));


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries/actual.js
================================================
import { Select } from 'antd';
import { Select as SelectMobile } from 'antd-mobile';

if (Select) {}
if (SelectMobile) {}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries/expected.js
================================================
"use strict";

var _select = _interopRequireDefault(require("antd-mobile/lib/select"));

var _select2 = _interopRequireDefault(require("antd/lib/select"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (_select2.default) {}

if (_select.default) {}

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries-hilojs/actual.js
================================================
import { Select } from 'antd';
import { Abc, Class } from 'hilojs';

if (Select) {}
if (Class && Abc) {}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries-hilojs/expected.js
================================================
"use strict";

var _abc = _interopRequireDefault(require("hilojs/abc"));

var _class = _interopRequireDefault(require("hilojs/core/class"));

var _select = _interopRequireDefault(require("antd/lib/select"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (_select.default) {}

if (_class.default && _abc.default) {}

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-words/actual.js
================================================
import { InputNumber } from 'antd';

<InputNumber />;


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-words/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _inputNumber = _interopRequireDefault(require("antd/lib/input-number"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

_react.default.createElement(_inputNumber.default, null);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/new-expression/actual.js
================================================
import { Button } from 'antd';
new Button();



================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/new-expression/expected.js
================================================
"use strict";

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

new _button.default();

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/actual.js
================================================
import { message } from 'antd';

message('xxx');

function App() {
  const message = 'xxx';
  console.log({ message });
}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/expected.js
================================================
"use strict";

var _message2 = _interopRequireDefault(require("antd/lib/message"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _message2.default)('xxx');

function App() {
  var message = 'xxx';
  console.log({
    message: message
  });
}

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/property/actual.js
================================================
import { Button } from 'antd';

ReactDOM.render(<div component={Button} />);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/property/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", {
  component: _button.default
}));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-element/actual.js
================================================
import { Button } from 'antd';

ReactDOM.render(<div>
  <Button>xxxx</Button>
</div>);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-element/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, null, "xxxx")));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-toolbox/actual.js
================================================
import { AppBar } from 'react-toolbox';

AppBar('xxx');


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-toolbox/expected.js
================================================
"use strict";

var _app_bar = _interopRequireDefault(require("react-toolbox/lib/app_bar"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _app_bar.default)('xxx');

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/return/actual.js
================================================
import { toast } from 'antd';

function a() {
  return toast;
}

function b(toast) {
  return toast;
}

function c() {
  var toast = 'toast';
  return toast;
}

function d() {
  var toast = 'toast';
  return function () {
    return toast;
  };
}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/return/expected.js
================================================
"use strict";

var _toast2 = _interopRequireDefault(require("antd/lib/toast"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function a() {
  return _toast2.default;
}

function b(toast) {
  return toast;
}

function c() {
  var toast = 'toast';
  return toast;
}

function d() {
  var toast = 'toast';
  return function () {
    return toast;
  };
}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/specifier-alias/actual.js
================================================
import { Button as Button1 } from 'antd';

const foo = Button1.foo

ReactDOM.render(<div>
  <Button1>xxxx</Button1>
</div>);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/specifier-alias/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var foo = _button.default.foo;
ReactDOM.render(_react.default.createElement("div", null, _react.default.createElement(_button.default, null, "xxxx")));

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/use-multiple-times/actual.js
================================================
import a from 'a';
import { Button } from 'antd-mobile';

a(Button);
a(Button);


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/use-multiple-times/expected.js
================================================
"use strict";

var _button = _interopRequireDefault(require("antd-mobile/lib/button"));

var _a = _interopRequireDefault(require("a"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _a.default)(_button.default);
(0, _a.default)(_button.default);

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-declarator/actual.js
================================================
import { Button } from 'antd';

const a = Button;


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-declarator/expected.js
================================================
"use strict";

var _button = _interopRequireDefault(require("antd/lib/button"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var a = _button.default;

================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/actual.js
================================================
import { message } from 'antd';

message('xxx');

function App() {
  const message = 'xxx';
  return <div>{message}</div>;
}


================================================
FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/expected.js
================================================
"use strict";

var _react = _interopRequireDefault(require("react"));

var _message2 = _interopRequireDefault(require("antd/lib/message"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _message2.default)('xxx');

function App() {
  var message = 'xxx';
  return _react.default.createElement("div", null, message);
}

================================================
FILE: packages/chameleon-css-loader/.eslintrc
================================================
{
    // 在配置文件里配置全局变量时,使用 globals 指出你要使用的全局变量。将变量设置为 true 将允许变量被重写,或 false 将不允许被重写
    "globals": {
        "cml": false
    },
    // 环境定义了预定义的全局变量。
    "env": {
        //环境定义了预定义的全局变量。更多在官网查看
        "browser": true,
        "node": true,
        "commonjs": true,
        "amd": true,
        "es6": true,
        "mocha": true
    },
    // JavaScript 语言选项
    "parserOptions": {
        // ECMAScript 版本
        "ecmaVersion": 6,
        "sourceType": "module", //设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
        //想使用的额外的语言特性:
        "ecmaFeatures": {
            // 允许在全局作用域下使用 return 语句
            "globalReturn": true,
            // impliedStric
            "impliedStrict": true,
            // 启用 JSX
            "jsx": true,
            "modules": true
        }
    },
    //-----让eslint支持 JSX start
    "plugins": [

    ],
    "extends": [
        "eslint:recommended"
    ],
    //-----让eslint支持 JSX end


    /**
     * "off" 或 0 - 关闭规则
     * "warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出),
     * "error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)
     */
    "rules": {

        ////////////////
        // 可能的错误 //
        ////////////////

        // 禁止条件表达式中出现赋值操作符
        "no-cond-assign": 2,
        // 禁用 console
        "no-console": 0,
        // 禁止在条件中使用常量表达式
        // if (false) {
        // doSomethingUnfinished();
        // } //cuowu
        "no-constant-condition": 2,
        // 禁止在正则表达式中使用控制字符 :new RegExp("\x1f")
        "no-control-regex": 2,
        // 数组和对象键值对最后一个逗号, never参数:不能带末尾的逗号, always参数:必须带末尾的逗号,
        // always-multiline:多行模式必须带逗号,单行模式不能带逗号
        "comma-dangle": [1, "never"],
        // 禁用 debugger
        "no-debugger": 2,
        // 禁止 function 定义中出现重名参数
        "no-dupe-args": 2,
        // 禁止对象字面量中出现重复的 key
        "no-dupe-keys": 2,
        // 禁止重复的 case 标签
        "no-duplicate-case": 2,
        // 禁止空语句块
        "no-empty": 2,
        // 禁止在正则表达式中使用空字符集 (/^abc[]/)
        "no-empty-character-class": 2,
        // 禁止对 catch 子句的参数重新赋值
        "no-ex-assign": 2,
        // 禁止不必要的布尔转换
        "no-extra-boolean-cast": 2,
        // 禁止不必要的括号 //(a * b) + c;//报错
        "no-extra-parens": 0,
        // 禁止不必要的分号
        "no-extra-semi": 2,
        // 禁止对 function 声明重新赋值
        "no-func-assign": 2,
        // 禁止在嵌套的块中出现 function 或 var 声明
        "no-inner-declarations": [2, "functions"],
        // 禁止 RegExp 构造函数中无效的正则表达式字符串
        "no-invalid-regexp": 2,
        // 禁止在字符串和注释之外不规则的空白
        "no-irregular-whitespace": 2,
        // 禁止在 in 表达式中出现否定的左操作数
        "no-negated-in-lhs": 2,
        // 禁止把全局对象 (Math 和 JSON) 作为函数调用 错误:var math = Math();
        "no-obj-calls": 2,
        // 禁止直接使用 Object.prototypes 的内置属性
        "no-prototype-builtins": 0,
        // 禁止正则表达式字面量中出现多个空格
        "no-regex-spaces": 2,
        // 禁用稀疏数组
        "no-sparse-arrays": 2,
        // 禁止出现令人困惑的多行表达式
        "no-unexpected-multiline": 2,
        // 禁止在return、throw、continue 和 break语句之后出现不可达代码
        "no-unreachable": 2,
        // 要求使用 isNaN() 检查 NaN
        "use-isnan": 2,
        // 强制使用有效的 JSDoc 注释
        "valid-jsdoc": 0,
        // 强制 typeof 表达式与有效的字符串进行比较
        // typeof foo === "undefimed" 错误
        "valid-typeof": 2,


        //////////////
        // 最佳实践 //
        //////////////

        // 定义对象的set存取器属性时,强制定义get
        "accessor-pairs": 2,
        // 强制数组方法的回调函数中有 return 语句
        "array-callback-return": 0,
        // 强制把变量的使用限制在其定义的作用域范围内
        "block-scoped-var": 0,
        // 限制圈复杂度,也就是类似if else能连续接多少个
        "complexity": [2, 20],
        // 要求 return 语句要么总是指定返回的值,要么不指定
        "consistent-return": 0,
        // 强制所有控制语句使用一致的括号风格
        "curly": [2, "all"],
        // switch 语句强制 default 分支,也可添加 // no default 注释取消此次警告
        "default-case": 2,
        // 强制object.key 中 . 的位置,参数:
        // property,'.'号应与属性在同一行
        // object, '.' 号应与对象名在同一行
        "dot-location": [2, "property"],
        // 强制使用.号取属性
        // 参数: allowKeywords:true 使用保留字做属性名时,只能使用.方式取属性
        // false 使用保留字做属性名时, 只能使用[]方式取属性 e.g [2, {"allowKeywords": false}]
        // allowPattern: 当属性名匹配提供的正则表达式时,允许使用[]方式取值,否则只能用.号取值 e.g [2, {"allowPattern": "^[a-z]+(_[a-z]+)+$"}]
        "dot-notation": [2, {
            "allowKeywords": false
        }],
        // 使用 === 替代 == allow-null允许null和undefined==
        "eqeqeq": [0, "allow-null"],
        // 要求 for-in 循环中有一个 if 语句
        "guard-for-in": 2,
        // 禁用 alert、confirm 和 prompt
        "no-alert": 0,
        // 禁用 arguments.caller 或 arguments.callee
        "no-caller": 2,
        // 不允许在 case 子句中使用词法声明
        "no-case-declarations": 2,
        // 禁止除法操作符显式的出现在正则表达式开始的位置
        "no-div-regex": 2,
        // 禁止 if 语句中有 return 之后有 else
        "no-else-return": 0,
        // 禁止出现空函数.如果一个函数包含了一条注释,它将不会被认为有问题。
        "no-empty-function": 2,
        // 禁止使用空解构模式no-empty-pattern
        "no-empty-pattern": 2,
        // 禁止在没有类型检查操作符的情况下与 null 进行比较
        "no-eq-null": 1,
        // 禁用 eval()
        "no-eval": 2,
        // 禁止扩展原生类型
        "no-extend-native": 2,
        // 禁止不必要的 .bind() 调用
        "no-extra-bind": 2,
        // 禁用不必要的标签
        "no-extra-label:": 0,
        // 禁止 case 语句落空
        "no-fallthrough": 2,
        // 禁止数字字面量中使用前导和末尾小数点
        "no-floating-decimal": 2,
        // 禁止使用短符号进行类型转换(!!fOO)
        "no-implicit-coercion": 0,
        // 禁止在全局范围内使用 var 和命名的 function 声明
        "no-implicit-globals": 1,
        // 禁止使用类似 eval() 的方法
        "no-implied-eval": 2,
        // 禁止 this 关键字出现在类和类对象之外
        "no-invalid-this": 0,
        // 禁用 __iterator__ 属性
        "no-iterator": 2,
        // 禁用标签语句
        "no-labels": 2,
        // 禁用不必要的嵌套块
        "no-lone-blocks": 2,
        // 禁止在循环中出现 function 声明和表达式
        "no-loop-func": 1,
        // 禁用魔术数字(3.14什么的用常量代替)
        "no-magic-numbers": [1, {
            "ignore": [0, -1, 1]
        }],
        // 禁止使用多个空格
        "no-multi-spaces": 2,
        // 禁止使用多行字符串,在 JavaScript 中,可以在新行之前使用斜线创建多行字符串
        "no-multi-str": 2,
        // 禁止对原生对象赋值
        "no-native-reassign": 2,
        // 禁止在非赋值或条件语句中使用 new 操作符
        "no-new": 2,
        // 禁止对 Function 对象使用 new 操作符
        "no-new-func": 0,
        // 禁止对 String,Number 和 Boolean 使用 new 操作符
        "no-new-wrappers": 2,
        // 禁用八进制字面量
        "no-octal": 2,
        // 禁止在字符串中使用八进制转义序列
        "no-octal-escape": 2,
        // 不允许对 function 的参数进行重新赋值
        "no-param-reassign": 0,
        // 禁用 __proto__ 属性
        "no-proto": 2,
        // 禁止使用 var 多次声明同一变量
        "no-redeclare": 2,
        // 禁用指定的通过 require 加载的模块
        "no-return-assign": 0,
        // 禁止使用 javascript: url
        "no-script-url": 0,
        // 禁止自我赋值
        "no-self-assign": 2,
        // 禁止自身比较
        "no-self-compare": 2,
        // 禁用逗号操作符
        "no-sequences": 2,
        // 禁止抛出非异常字面量
        "no-throw-literal": 2,
        // 禁用一成不变的循环条件
        "no-unmodified-loop-condition": 2,
        // 禁止出现未使用过的表达式
        "no-unused-expressions": 0,
        // 禁用未使用过的标签
        "no-unused-labels": 2,
        // 禁止不必要的 .call() 和 .apply()
        "no-useless-call": 2,
        // 禁止不必要的字符串字面量或模板字面量的连接
        "no-useless-concat": 0,
        // 禁用不必要的转义字符
        "no-useless-escape": 0,
        // 禁用 void 操作符
        "no-void": 0,
        // 禁止在注释中使用特定的警告术语
        "no-warning-comments": 0,
        // 禁用 with 语句
        "no-with": 2,
        // 强制在parseInt()使用基数参数
        "radix": 2,
        // 要求所有的 var 声明出现在它们所在的作用域顶部
        "vars-on-top": 0,
        // 要求 IIFE 使用括号括起来
        "wrap-iife": [2, "any"],
        // 要求或禁止 “Yoda” 条件
        "yoda": [2, "never"],
        // 要求或禁止使用严格模式指令
        "strict": 0,


        //////////////
        // 变量声明 //
        //////////////

        // 要求或禁止 var 声明中的初始化(初值)
        "init-declarations": 0,
        // 不允许 catch 子句的参数与外层作用域中的变量同名
        "no-catch-shadow": 0,
        // 禁止删除变量
        "no-delete-var": 2,
        // 不允许标签与变量同名
        "no-label-var": 2,
        // 禁用特定的全局变量
        "no-restricted-globals": 0,
        // 禁止 var 声明 与外层作用域的变量同名
        "no-shadow": 0,
        // 禁止覆盖受限制的标识符
        "no-shadow-restricted-names": 2,
        // 禁用未声明的变量,除非它们在 /*global */ 注释中被提到
        "no-undef": 2,
        // 禁止将变量初始化为 undefined
        "no-undef-init": 2,
        // 禁止将 undefined 作为标识符
        "no-undefined": 0,
        // 禁止出现未使用过的变量
        "no-unused-vars": [2, {
            "vars": "all",
            "args": "none"
        }],
        // 不允许在变量定义之前使用它们
        "no-use-before-define": 0,

        //////////////////////////
        // Node.js and CommonJS //
        //////////////////////////

        // require return statements after callbacks
        "callback-return": 0,
        // 要求 require() 出现在顶层模块作用域中
        "global-require": 1,
        // 要求回调函数中有容错处理
        "handle-callback-err": [2, "^(err|error)$"],
        // 禁止混合常规 var 声明和 require 调用
        "no-mixed-requires": 0,
        // 禁止调用 require 时使用 new 操作符
        "no-new-require": 2,
        // 禁止对 __dirname 和 __filename进行字符串连接
        "no-path-concat": 0,
        // 禁用 process.env
        "no-process-env": 0,
        // 禁用 process.exit()
        "no-process-exit": 0,
        // 禁用同步方法
        "no-sync": 0,

        //////////////
        // 风格指南 //
        //////////////

        // 指定数组的元素之间要以空格隔开(, 后面), never参数:[ 之前和 ] 之后不能带空格,always参数:[ 之前和 ] 之后必须带空格
        "array-bracket-spacing": [2, "never"],
        // 禁止或强制在单行代码块中使用空格(禁用)
        "block-spacing": [1, "never"],
        //强制使用一致的缩进 第二个参数为 "tab" 时,会使用tab,
        // if while function 后面的{必须与if在同一行,java风格。
        "brace-style": [2, "1tbs", {
            "allowSingleLine": true
        }],
        // 双峰驼命名格式
        "camelcase": 2,
        // 控制逗号前后的空格
        "comma-spacing": [2, {
            "before": false,
            "after": true
        }],
        // 控制逗号在行尾出现还是在行首出现 (默认行尾)
        // http://eslint.org/docs/rules/comma-style
        "comma-style": [2, "last"],
        //"SwitchCase" (默认:0) 强制 switch 语句中的 case 子句的缩进水平
        // 以方括号取对象属性时,[ 后面和 ] 前面是否需要空格, 可选参数 never, always
        "computed-property-spacing": [2, "never"],
        // 用于指统一在回调函数中指向this的变量名,箭头函数中的this已经可以指向外层调用者,应该没卵用了
        // e.g [0,"that"] 指定只能 var that = this. that不能指向其他任何值,this也不能赋值给that以外的其他值
        "consistent-this": [1, "that"],
        // 强制使用命名的 function 表达式
        "func-names": 0,
        // 文件末尾强制换行
        "eol-last": 2,
        "indent": [2, 2, {
            "SwitchCase": 1
        }],
        // 强制在对象字面量的属性中键和值之间使用一致的间距
        "key-spacing": [2, {
            "beforeColon": false,
            "afterColon": true
        }],
        // 强制使用一致的换行风格
        "linebreak-style": [1, "unix"],
        // 要求在注释周围有空行 ( 要求在块级注释之前有一空行)
        "lines-around-comment": [1, {
            "beforeBlockComment": true
        }],
        // 强制一致地使用函数声明或函数表达式,方法定义风格,参数:
        // declaration: 强制使用方法声明的方式,function f(){} e.g [2, "declaration"]
        // expression:强制使用方法表达式的方式,var f = function() {} e.g [2, "expression"]
        // allowArrowFunctions: declaration风格中允许箭头函数。 e.g [2, "declaration", { "allowArrowFunctions": true }]
        "func-style": 0,
        // 强制回调函数最大嵌套深度 5层
        "max-nested-callbacks": [1, 5],
        // 禁止使用指定的标识符
        "id-blacklist": 0,
        // 强制标识符的最新和最大长度
        "id-length": 0,
        // 要求标识符匹配一个指定的正则表达式
        "id-match": 0,
        // 强制在 JSX 属性中一致地使用双引号或单引号
        "jsx-quotes": 0,
        // 强制在关键字前后使用一致的空格 (前后腰需要)
        "keyword-spacing": 2,
        // 强制一行的最大长度
        "max-len": [1, 200],
        // 强制最大行数
        "max-lines": 0,
        // 强制 function 定义中最多允许的参数数量
        "max-params": [1, 7],
        // 强制 function 块最多允许的的语句数量
        "max-statements": [1, 200],
        // 强制每一行中所允许的最大语句数量
        "max-statements-per-line": 0,
        // 要求构造函数首字母大写 (要求调用 new 操作符时有首字母大小的函数,允许调用首字母大写的函数时没有 new 操作符。)
        "new-cap": [2, {
            "newIsCap": true,
            "capIsNew": false
        }],
        // 要求调用无参构造函数时有圆括号
        "new-parens": 2,
        // 要求或禁止 var 声明语句后有一行空行
        "newline-after-var": 0,
        // 禁止使用 Array 构造函数
        "no-array-constructor": 2,
        // 禁用按位运算符
        "no-bitwise": 0,
        // 要求 return 语句之前有一空行
        "newline-before-return": 0,
        // 要求方法链中每个调用都有一个换行符
        "newline-per-chained-call": 1,
        // 禁用 continue 语句
        "no-continue": 0,
        // 禁止在代码行后使用内联注释
        "no-inline-comments": 0,
        // 禁止 if 作为唯一的语句出现在 else 语句中
        "no-lonely-if": 0,
        // 禁止混合使用不同的操作符
        "no-mixed-operators": 0,
        // 不允许空格和 tab 混合缩进
        "no-mixed-spaces-and-tabs": 2,
        // 不允许多个空行
        "no-multiple-empty-lines": [2, {
            "max": 2
        }],
        // 不允许否定的表达式
        "no-negated-condition": 0,
        // 不允许使用嵌套的三元表达式
        "no-nested-ternary": 0,
        // 禁止使用 Object 的构造函数
        "no-new-object": 2,
        // 禁止使用一元操作符 ++ 和 --
        "no-plusplus": 0,
        // 禁止使用特定的语法
        "no-restricted-syntax": 0,
        // 禁止 function 标识符和括号之间出现空格
        "no-spaced-func": 2,
        // 不允许使用三元操作符
        "no-ternary": 0,
        // 禁用行尾空格
        "no-trailing-spaces": 2,
        // 禁止标识符中有悬空下划线_bar
        "no-underscore-dangle": 0,
        // 禁止可以在有更简单的可替代的表达式时使用三元操作符
        "no-unneeded-ternary": 2,
        // 禁止属性前有空白
        "no-whitespace-before-property": 0,
        // 强制花括号内换行符的一致性
        "object-curly-newline": 0,
        // 强制在花括号中使用一致的空格
        "object-curly-spacing": 0,
        // 强制将对象的属性放在不同的行上
        "object-property-newline": 0,
        // 强制函数中的变量要么一起声明要么分开声明
        "one-var": [2, {
            "initialized": "never"
        }],
        // 要求或禁止在 var 声明周围换行
        "one-var-declaration-per-line": 0,
        // 要求或禁止在可能的情况下要求使用简化的赋值操作符
        "operator-assignment": 0,
        // 强制操作符使用一致的换行符
        "operator-linebreak": [2, "after", {
            "overrides": {
                "?": "before",
                ":": "before"
            }
        }],
        // 要求或禁止块内填充
        "padded-blocks": 0,
        // 要求对象字面量属性名称用引号括起来
        "quote-props": 0,
        // 强制使用一致的反勾号、双引号或单引号
        // "quotes": [2, "single", "avoid-escape"],
        // 要求使用 JSDoc 注释
        "require-jsdoc": 0,
        // 要求或禁止使用分号而不是 ASI(这个才是控制行尾部分号的,)
        "semi": [0, "always"],
        // 强制分号之前和之后使用一致的空格
        "semi-spacing": 0,
        // 要求同一个声明块中的变量按顺序排列
        "sort-vars": 0,
        // 强制在块之前使用一致的空格
        "space-before-blocks": [2, "always"],
        // 强制在 function的左括号之前使用一致的空格
        "space-before-function-paren": [0, "always"],
        // 强制在圆括号内使用一致的空格
        "space-in-parens": [2, "never"],
        // 要求操作符周围有空格
        "space-infix-ops": 2,
        // 强制在一元操作符前后使用一致的空格
        "space-unary-ops": [2, {
            "words": true,
            "nonwords": false
        }],
        // 强制在注释中 // 或 /* 使用一致的空格
        "spaced-comment": [2, "always", {
            "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"]
        }],
        // 要求或禁止 Unicode BOM
        "unicode-bom": 0,
        // 要求正则表达式被括号括起来
        "wrap-regex": 0,

        //////////////
        // ES6.相关 //
        //////////////

        // 要求箭头函数体使用大括号
        "arrow-body-style": 2,
        // 要求箭头函数的参数使用圆括号
        "arrow-parens": 0,
        "arrow-spacing": [2, {
            "before": true,
            "after": true
        }],
        // 强制在子类构造函数中用super()调用父类构造函数,TypeScrip的编译器也会提示
        "constructor-super": 0,
        // 强制 generator 函数中 * 号周围使用一致的空格
        "generator-star-spacing": [2, {
            "before": true,
            "after": true
        }],
        // 禁止修改类声明的变量
        "no-class-assign": 2,
        // 不允许箭头功能,在那里他们可以混淆的比较
        "no-confusing-arrow": 0,
        // 禁止修改 const 声明的变量
        "no-const-assign": 2,
        // 禁止类成员中出现重复的名称
        "no-dupe-class-members": 2,
        // 不允许复制模块的进口
        "no-duplicate-imports": 0,
        // 禁止 Symbol 的构造函数
        "no-new-symbol": 2,
        // 允许指定模块加载时的进口
        "no-restricted-imports": 0,
        // 禁止在构造函数中,在调用 super() 之前使用 this 或 super
        "no-this-before-super": 2,
        // 禁止不必要的计算性能键对象的文字
        "no-useless-computed-key": 0,
        // 要求使用 let 或 const 而不是 var
        "no-var": 0,
        // 要求或禁止对象字面量中方法和属性使用简写语法
        "object-shorthand": 0,
        // 要求使用箭头函数作为回调
        "prefer-arrow-callback": 0,
        // 要求使用 const 声明那些声明后不再被修改的变量
        "prefer-const": 0,
        // 要求在合适的地方使用 Reflect 方法
        "prefer-reflect": 0,
        // 要求使用扩展运算符而非 .apply()
        "prefer-spread": 0,
        // 要求使用模板字面量而非字符串连接
        "prefer-template": 0,
        // Suggest using the rest parameters instead of arguments
        "prefer-rest-params": 0,
        // 要求generator 函数内有 yield
        "require-yield": 0,
        // enforce spacing between rest and spread operators and their expressions
        "rest-spread-spacing": 0,
        // 强制模块内的 import 排序
        "sort-imports": 0,
        // 要求或禁止模板字符串中的嵌入表达式周围空格的使用
        "template-curly-spacing": 1,
        // 强制在 yield* 表达式中 * 周围使用空格
        "yield-star-spacing": 2
    }
}


================================================
FILE: packages/chameleon-css-loader/.gitignore
================================================


================================================
FILE: packages/chameleon-css-loader/handler/lines.js
================================================
// 静态编译和运行时 web和小程序端对lines属性特殊处理

module.exports = function(linesNumber) {
  // 作为一个属性注意最后不能添加分号
  return `display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: ${linesNumber}; overflow: hidden`
}


================================================
FILE: packages/chameleon-css-loader/index.js
================================================
const loaderUtils = require('loader-utils')
const webParse = require('./parser/web');
const miniParse = require('./parser/miniapp');
const weexParse = require('./parser/weex');
const mediaParse = require('./parser/media');

module.exports = function(source, options) {
  options = options || loaderUtils.getOptions(this);
  options.filePath = this.resourcePath;
  // 处理差异化的media代码块功能
  if (options.media) {
    return mediaParse(source, options.cmlType);
  }
  if (source) {
    let result;
    switch (options.platform) {
      case 'web': result = webParse(source, options); break;
      case 'miniapp': result = miniParse(source, options); break;
      case 'weex': result = weexParse(source, options); break;
      default: break;
    }
    return result;
  }
  return source;
}




================================================
FILE: packages/chameleon-css-loader/package.json
================================================
{
  "name": "chameleon-css-loader",
  "version": "1.0.8",
  "description": "chameleon样式处理",
  "main": "index.js",
  "scripts": {
    "test": "mocha --recursive --reporter spec",
    "cover": "istanbul cover --report lcov node_modules/mocha/bin/_mocha -- -R spec --recursive",
    "eslint": "eslint ./proxy ./transform ./parser utils.js index.js",
    "eslint:fix": "eslint utils.js --ext .js parser --ext .js proxy --ext .js transform --fix"
  },
  "keywords": [
    "css"
  ],
  "author": "Chameleon-Team",
  "license": "Apache",
  "dependencies": {
    "autoprefixer": "^9.3.1",
    "hash-sum": "^1.0.2",
    "loader-utils": "^1.1.0",
    "postcss": "^7.0.6",
    "postcss-plugin-px2rem": "^0.7.0",
    "rework": "^1.0.1"
  },
  "devDependencies": {
    "chai": "^4.2.0",
    "chameleon-tool-utils": "1.0.8",
    "coveralls": "^2.11.9",
    "eslint": "^5.9.0",
    "gulp": "^3.9.1",
    "gulp-uglify-es": "^1.0.4",
    "istanbul": "^0.4.5",
    "mocha": "^5.2.0"
  },
  "mail": "ChameleonCore@didiglobal.com",
  "gitHead": "5ddcde4330774710f7646559446e008f7785ce00"
}

================================================
FILE: packages/chameleon-css-loader/parser/media.js
================================================


module.exports = function(source = '', targetType) {
  let reg = /@media\s*cml-type\s*\(([\w\s,]*)\)\s*/g;
  if (!reg.test(source)) {
    return source;
  }
  reg.lastIndex = 0;
  while (true) { // eslint-disable-line
    let result = reg.exec(source);
    if (!result) {break;}
    let cmlTypes = result[1] || '';
    cmlTypes = cmlTypes.split(',').map(item => item.trim());
    let isSave = ~cmlTypes.indexOf(targetType);

    let startIndex = result.index; // @media的开始

    let currentIndex = source.indexOf('{', startIndex); // 从第一个@media开始
    let signStartIndex = currentIndex; // 第一个{的位置
    if (currentIndex == -1) {
      throw new Error("@media cml-type format err");
    }

    let signStack = [];
    signStack.push(0);
    while (signStack.length > 0) {
      let index1 = source.indexOf('{', currentIndex + 1);
      let index2 = source.indexOf('}', currentIndex + 1);
      let index;
      // 都有的话 index为最前面的
      if (index1 !== -1 && index2 !== -1) {
        index = Math.min(index1, index2);
      } else {
        index = Math.max(index1, index2);
      }
      if (index === -1) {
        throw new Error("@media cml-type format err");
      }
      let sign = source[index];
      currentIndex = index;
      if (sign === '{') {
        signStack.push(signStack.length);
      } else if (sign === '}') {
        signStack.pop();
      }
    }

    // 操作source
    if (isSave) { // 保存的@media
      var sourceArray = Array.from(source);
      sourceArray.splice(startIndex, currentIndex - startIndex + 1, source.slice(signStartIndex + 1, currentIndex));
      source = sourceArray.join('');
    } else { // 删除的
      source = source.slice(0, startIndex) + source.slice(currentIndex + 1);
    }
    reg.lastIndex = 0;
  }

  return source;

}


================================================
FILE: packages/chameleon-css-loader/parser/miniapp.js
================================================

const cpx = require('../postcss/cpx.js');
const weexPlus = require('../postcss/weex-plus');
const addAlipayClassPlugin = require('../postcss/add-alipay-class')
const postcss = require('postcss');
const cmlUtils = require('chameleon-tool-utils');
module.exports = function(source, options = {}) {
  options.cpxType = 'rpx';
  let {cmlType, filePath} = options;
  let globalCssPath = [`chameleon-runtime/src/platform/${cmlType}/style/index.css`, `chameleon-runtime/src/platform/${cmlType}/style/page.css`];
  let globalStyleConfig = cml.config.get().globalStyleConfig;
  if (globalStyleConfig && globalStyleConfig.globalCssPath && cmlUtils.isFile(globalStyleConfig.globalCssPath)) {
    globalCssPath.push(globalStyleConfig.globalCssPath)
  }
  let isGlobalCss = globalCssPath.some((item) => filePath.includes(item))
  if (cmlType === 'alipay' && !isGlobalCss) { // 对于全局样式不能经过 addAlipayClassPlugin 这个插件进行样式唯一性的处理;比如这样的 .cml-57b5135a.scroller-wrap
    return postcss([cpx(options), weexPlus(), addAlipayClassPlugin(options)]).process(source).css;
  } else {
    return postcss([cpx(options), weexPlus()]).process(source).css;

  }

}


================================================
FILE: packages/chameleon-css-loader/parser/web.js
================================================

const cpx = require('../postcss/cpx.js');
const postcss = require('postcss');
const px2rem = require('postcss-plugin-px2rem');
const weexPlus = require('../postcss/weex-plus');
module.exports = function(source, options = {}) {
  if (options.rem === true) {
    return postcss([px2rem(options.remOptions), weexPlus()]).process(source).css;
  } else {
    options.cpxType = 'scale';
    return postcss([cpx(options), weexPlus()]).process(source).css;
  }
}


================================================
FILE: packages/chameleon-css-loader/parser/weex.js
================================================

const weex = require('../postcss/weex.js');
module.exports = function(source, options = {}) {
  return weex(source, options);
}


================================================
FILE: packages/chameleon-css-loader/postcss/add-alipay-class.js
================================================
const postcss = require('postcss');
const hash = require('hash-sum');

module.exports = postcss.plugin('add-alipay-class-name', function(options) {
  let { filePath} = options;
  let randomClassName = hash(filePath);
  options.alipayClassName = `.cml-${randomClassName}`;
  return function(css, result) {
    function getSelector (value) {
      let temp = '';
      for (let i = 0, len = value.length; i < len; i++) {
        if (value[i] === '.') {
          temp += `${options.alipayClassName}.`
        } else {
          temp += value[i];
        }
      }
      return temp;
    }
    css.walkRules(rule => {
      if (rule.selector.indexOf('.') === 0) {
        let newSelector = getSelector(rule.selector);
        rule.selector = newSelector;
      }
    });
  };
})


================================================
FILE: packages/chameleon-css-loader/postcss/cpx.js
================================================
const postcss = require('postcss');
// 非rem的cpx处理,rem的利用postcss-plugin-px2rem插件即可实现

module.exports = postcss.plugin('postcss-plugin-cpx', function (options) {
  // parseType 参数决定cpx的转换
  let { unitPrecision = 5, scale = 1, cpxType = 'scale'} = options;
  const pxRegex = /(\d*\.?\d+)cpx/gi;

  const pxReplace = function(m, $1, $2) {
    switch (cpxType) {
      case 'scale':
        return toFixed(parseFloat($1, 10) * scale, unitPrecision) + 'px';
      case 'px':
        return $1 + "px";
      case 'rpx':
        return $1 + "rpx";
      default:
        return m;
    }

  }

  function toFixed(number, precision) {
    var multiplier = Math.pow(10, precision + 1);
    var wholeNumber = Math.floor(number * multiplier);
    return Math.round(wholeNumber / 10) * 10 / multiplier;
  }

  return function (css) {
    css.walkDecls(function (decl, i) {
      if (~decl.value.indexOf('cpx')) {
        let value = decl.value.replace(pxRegex, pxReplace);
        decl.value = value;
      }
    });

    css.walkAtRules('media', function (rule) {
      if (!rule.params.indexOf('cpx')) {
        rule.params = rule.params.replace(pxRegex, pxReplace);
      }
    });
  };
});


================================================
FILE: packages/chameleon-css-loader/postcss/weex-plus.js
================================================
// 为web和小程序提供编译weex为标准的特殊样式

const postcss = require('postcss');

module.exports = postcss.plugin('postcss-weex-plus', function(options) {
  return (root, result) => {
    root.walkDecls((decl, i) => {
      if (decl.prop === 'lines') {
        const decllist = [
          postcss.decl({prop: 'overflow', value: 'hidden'}),
          postcss.decl({prop: 'text-overflow', value: 'ellipsis'}),
          postcss.decl({prop: 'display', value: '-webkit-box'}),
          postcss.decl({prop: '-webkit-line-clamp', value: decl.value}),
          postcss.decl({prop: '-webkit-box-orient', value: 'vertical'})
        ];
        decl.parent.append(...decllist)
      }
      // decl.parent.removeChild(decl);
    })
  }
})


================================================
FILE: packages/chameleon-css-loader/postcss/weex.js
================================================
const rework = require('rework');
const weexCssSupport = require('../transform/weex');

/**
 * 处理css源码
 *
 * @param  {string} source 源码
 * @return {string}        处理后的数据
 */
module.exports = source => {
  let result = rework(source).use(function (ast) {
    ast.rules.forEach(rule => {
      if (!rule.declarations) {
        return;
      }
      let allDeclarations = [];
      rule.declarations.forEach(declaration => {
        delete declaration.position;
        // 注释部分不做处理
        if (declaration.type !== 'comment') {
          let declarations = weexCssSupport.convert(declaration);
          allDeclarations = allDeclarations.concat(declarations);
        }
      });
      rule.declarations = allDeclarations;
    });
  })
    .toString();
  return result;
};


================================================
FILE: packages/chameleon-css-loader/proxy/proxyMiniapp.js
================================================
const utils = require('../utils');
const lines = require('../handler/lines');
// 运行时的cpx2rpx不能使用postcss处理,因为$cmlStyle方法用到了该方法,在运行时使用postcss 会出现Cannot find module "fs"的错误
module.exports = function(content) {
  content = utils.disappearCssComment(content);
  return parse(content);
  function parse (style) {
    return style
      .split(';')
      .filter(declaration => !!declaration.trim())
      .map(declaration => {
        let {key, value} = utils.getStyleKeyValue(declaration);
        return {
          property: key,
          value
        };
      })
      .map(declaration => {
        if (declaration.property === 'lines') {
          return lines(declaration.value);
        }
        declaration.value = handle(declaration.value);
        return declaration.property + ':' + declaration.value;
      })
      .join(';')
  }

  function handle(content) {
    if (content && content.replace) {
      content = content.replace(/(\d*\.?\d+)cpx/ig, function (m, $1) {
        return $1 + 'rpx'
      })
    }
    return content
  }

}


================================================
FILE: packages/chameleon-css-loader/proxy/proxyWeb.js
================================================
/** 提供编译时样式处理的方法 */
// 运行时不能使用postcss 体积过大
const lines = require('../handler/lines');
const utils = require('../utils');

module.exports = function(content, options) {
  if (typeof options === 'string') {
    options = JSON.parse(utils.singlequot2doublequot(options))
  }
  if (typeof content !== 'string') {
    throw new Error(`expected the value of style is string but get ${typeof content}`);
  }
  content = utils.disappearCssComment(content);
  content = utils.uniqueStyle(content);
  return parse(content);
  function parse (style) {
    return style
      .split(';')
      .filter(declaration => !!declaration.trim())
      .map(declaration => {
        let {key, value} = utils.getStyleKeyValue(declaration);
        return {
          property: key,
          value
        };
      })
      .map(declaration => {
        if (declaration.property === 'lines') {
          return lines(declaration.value);
        }
        declaration.value = handle(declaration.value, options);
        return declaration.property + ':' + declaration.value;
      })
      .join(';')
  }

  function handle(content, options) {
    const pxRegex = /(\d*\.?\d+)cpx/gi;
    let unitPrecision = 5;
    function toFixed(number, precision) {
      var multiplier = Math.pow(10, precision + 1);
      var wholeNumber = Math.floor(number * multiplier);
      return Math.round(wholeNumber / 10) * 10 / multiplier;
    }
    if (options.rem === true) {
      let base = options.remOptions.rootValue.cpx;
      return content.replace(pxRegex, function(m, $1) {
        return toFixed(parseFloat($1, 10) / base, unitPrecision) + 'rem';
      })

    } else {
      let scale = options.scale;
      return content.replace(pxRegex, function(m, $1) {
        return toFixed(parseFloat($1, 10) * scale, unitPrecision) + 'px';
      })

    }
  }
}




================================================
FILE: packages/chameleon-css-loader/test/parser-test/media.test.js
================================================
let content = `
@media cml-type(wx) {
  body {
    color: red;
  }
}

@media cml-type(weex) {
  body {
    color: blue;
  }
}

@media cml-type(web) {
  body {
    color: green;
  }
}

@media cml-type(web,wx) {
  body {
    color: orange;
  }
}

.border-scale(@color, @border-radius: 2px,
  @border-width: 1px 1px 1px 1px) {
&:after {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 200%;
height: 200%;
border: 1px solid @color;
border-width: @border-width;
border-radius: 2 * @border-radius;
transform-origin: 0% 0%;
-webkit-transform-origin: 0% 0%;
-webkit-transform: scale(0.5, 0.5);
transform: scale(0.5, 0.5);
pointer-events: none;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
}
`
const expect = require('chai').expect;
let mediaParse = require('../../parser/media.js');


describe('parse/media.js', function() {
  it('cmltype wx', function() {
    let result = mediaParse(content, 'wx');
    console.log(result)
    expect(/red/.test(result)).to.be.ok;
    expect(/blue/.test(result)).to.equals(false);
  })
})




================================================
FILE: packages/chameleon-css-loader/test/parser-test/miniapp.test.js
================================================
const parseCss = require('../../parser/miniapp.js');
const expect = require('chai').expect;

let source = `body {width:100cpx;font-size:26px;/* height:200px; */}`;
let alipayCSS = `.cls1{color:red} .cls2{width:100cpx;height:200cpx;}  .cls3:{font-size:30cpx;}`
describe('parse/miniapp', function() {
  it('parse cssstyle px to rpx but leave comment in style alone', function() {
    let result = parseCss(source,{
      cmlType:'alipay',
      filePath:"chameleon-runtime/src/platform/alipay/style/index.css"
    });
    expect(/100rpx/.test(result)).to.be.ok;
  })
  it('parse cssstyle px to rpx but leave comment in style alone', function() {
    let result = parseCss(alipayCSS,{
      cmlType:'alipay',
      filePath:"/src/page/index.cml"
    });
    expect(/100rpx/.test(result)).to.be.ok;
  })
  it('parse cssstyle px to rpx but leave comment in style alone', function() {
    let result = parseCss(source,{
      cmlType:'wx',
      filePath:"chameleon-runtime/src/platform/alipay/style/index.css"
    });
    expect(/100rpx/.test(result)).to.be.ok;
  })
})


================================================
FILE: packages/chameleon-css-loader/test/parser-test/web.test.js
================================================
const parseCss = require('../../parser/web.js');
const expect = require('chai').expect;

let source = `body {width:75cpx; height: 1px}`;
let source2 = `width:75cpx; height: 1px;`;


describe('parse/web', function() {
  it('web-cssStyle:if options.rem to be truthy ,parse px to rem,else multiply the px value by options.scale', function() {
    let options1 = {
      rem: true,
      scale: 0.5,
      remOptions: {
        // base on 750px standard.
        rootValue: {cpx: 75}

      }
    }
    let options2 = {
      rem: false,
      scale: 0.5,
      remOptions: {
        // base on 750px standard.
        rootValue: {cpx: 75}
      }
    }
    let result1 = parseCss(source, options1);
    let result2 = parseCss(source, options2);
    expect(result1).to.equal('body {width:1rem; height: 1px}');
    expect(result2).to.equal('body {width:37.5px; height: 1px}')

    let result3 = parseCss(source2, options1);
    expect(result3).to.equal('width:1rem; height: 1px;');

    let result4 = parseCss(source2, options2);
    expect(result4).to.equal('width:37.5px; height: 1px;')


  })
})




================================================
FILE: packages/chameleon-css-loader/test/parser-test/weex.test.js
================================================
const parseCss = require('../../parser/weex.js');
const expect = require('chai').expect;

let source = `body {width:75cpx;border:1cpx solid red;}`;


describe('parse/weex', function() {
  it('if options.rem to be truthy ,parse px to rem,else multiply the px value by options.scale', function() {

    let result = parseCss(source);// body {width:1rem;}
    console.log(result);
    expect(/border\-style/.test(result)).to.be.ok;
    expect(/border\-width/.test(result)).to.be.ok;
    expect(/border\-color/.test(result)).to.be.ok;
    expect(/75px/.test(result)).to.be.ok;
  })

})

describe('parse/weex', function() {
  let css = `
  .a {
    border: solid 1px red;
  }
  .b {
    border: dotted 0 rgb(255,255, 255);
  }
  .c {
    border-left: solid 1px #ccc;
  }
  
`;

  it('border', function() {

    let result = parseCss(css);// body {width:1rem;}
    console.log(result);
    expect(result).to.equal(`.a {\n  border-style: solid;\n  border-width: 1px;\n  border-color: #ff0000;\n}\n\n.b {\n  border-style: dotted;\n  border-width: 0;\n  border-color: rgb(255,255,255);\n}\n\n.c {\n  border-left-style: solid;\n  border-left-width: 1px;\n  border-left-color: #ccc;\n}`);
  })

})


describe('parse/weex', function() {
  let css = `
  .a {
    margin-left: 10px;
  }
  .b {
    margin: 10px;
  }
  .c {
    margin: 10px 20px;
  }
  .d {
    margin: 10px 20px 10px;
  }
  .e {
    margin: 10px 20px 5px 15px;
  }
  .f {
    border-style:solid;
    border-width:10cpx;
    border-color:red;
    flex-flow:row;
  }
`;

  it('margin', function() {

    let result = parseCss(css);// body {width:1rem;}
    expect(result).to.equal('.a {\n  margin-left: 10px;\n}\n\n.b {\n  margin-top: 10px;\n  margin-right: 10px;\n  margin-bottom: 10px;\n  margin-left: 10px;\n}\n\n.c {\n  margin-top: 10px;\n  margin-right: 20px;\n  margin-bottom: 10px;\n  margin-left: 20px;\n}\n\n.d {\n  margin-top: 10px;\n  margin-right: 20px;\n  margin-bottom: 10px;\n  margin-left: 20px;\n}\n\n.e {\n  margin-top: 10px;\n  margin-right: 20px;\n  margin-bottom: 5px;\n  margin-left: 15px;\n}\n\n.f {\n  border-top-style: solid;\n  border-right-style: solid;\n  border-bottom-style: solid;\n  border-left-style: solid;\n  border-top-width: 10px;\n  border-right-width: 10px;\n  border-bottom-width: 10px;\n  border-left-width: 10px;\n  border-top-color: red;\n  border-right-color: red;\n  border-bottom-color: red;\n  border-left-color: red;\n  flex-direction: row;\n}');
  })

})


describe('parse/weex', function() {
  let css = `
    .a {
      padding-left: 10px;
    }
    .b {
      padding: 10px;
    }
  `;
  it('padding', function() {
    let result = parseCss(css);// body {width:1rem;}
    console.log(result);
    expect(result).to.equal(`.a {\n  padding-left: 10px;\n}\n\n.b {\n  padding-top: 10px;\n  padding-right: 10px;\n  padding-bottom: 10px;\n  padding-left: 10px;\n}`);
  })

})


describe('parse/weex', function() {
  let css = `
  .a {
    background: #ccc
                  url(img.png)
                  no-repeat
                  scroll
                  center center / 50%
                  content-box border-box;

  }
  .b {
    background: url(img.png) #ccc;
  }
`;

  it('background', function() {
    let result = parseCss(css);// body {width:1rem;}
    console.log(result);
    expect(result).to.equal(`.a {\n  background-color: #ccc;\n  background-position: center center;\n  background-size: 50%;\n  background-repeat: no-repeat;\n  background-origin: content-box;\n  background-clip: border-box;\n  background-attachment: scroll;\n  background-image: url(img.png);\n}\n\n.b {\n  background-color: #ccc;\n  background-image: url(img.png);\n}`);
  })

})


================================================
FILE: packages/chameleon-css-loader/test/postcss-test/weex-plus.test.js
================================================
var postcss = require('postcss');
var weexPlus = require('../../postcss/weex-plus');
var content = `
.class1 {
  lines: 1;
}
`
const expect = require('chai').expect;

describe('postcss/weex-plus', function() {
  it('convert lines', function() {

    let ret = postcss(weexPlus()).process(content).css;
    console.log(ret)
    expect(ret).to.equal(`\n.class1 {\n  lines: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-line-clamp: 1;\n  -webkit-box-orient: vertical;\n}\n`);
  })
})


================================================
FILE: packages/chameleon-css-loader/test/proxy-test/proxyMiniapp.test.js
================================================
const parseCss = require('../../proxy/proxyMiniapp.js');
const expect = require('chai').expect;

let source = `width:75cpx;font-size:26px;/* height:200px; */`;
describe('proxy/miniapp', function() {
  it('parse miniapp cssvalue cpx to rpx', function() {
    let result = parseCss(source);
    expect(/75rpx/.test(result)).to.be.ok;
  })

  it('lines', function() {
    let result = parseCss('lines:1;');
    expect(result).to.equal('display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden');
  })
})




================================================
FILE: packages/chameleon-css-loader/test/proxy-test/proxyWeb.test.js
================================================
const parseCss = require('../../proxy/proxyWeb.js');
const expect = require('chai').expect;

let source = `width:75cpx;font-size:26px;/* height:200px; */`;


describe('parse/web', function() {
  it('web-cssvalue : if options.rem to be truthy ,parse cpx to rem,else multiply the cpx value by options.scale', function() {
    let options1 = {
      rem: true,
      scale: 0.5,
      remOptions: {
        // base on 750px standard.
        rootValue: {cpx: 75},
        // to leave 1px alone.
        minPixelValue: 1.01
      }
    }
    let options2 = {
      rem: false,
      scale: 0.5,
      remOptions: {
        // base on 750px standard.
        rootValue: {cpx: 75},
        // to leave 1px alone.
        minPixelValue: 1.01
      }
    }
    let result1 = parseCss(source, options1);// body {width:1rem;}
    let result2 = parseCss(source, options2);// body {width:37.5px;}
    expect(/1rem/.test(result1)).to.be.ok;
    expect(/37.5px/.test(result2)).to.be.ok;
  })


  it('lines', function() {
    let result = parseCss('lines:1;');
    expect(result).to.equal('display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden');
  })
})




================================================
FILE: packages/chameleon-css-loader/test/transform/weex.test.js
================================================
const parseCss = require('../../transform/weex.js');
const expect = require('chai').expect;
let source = `width:75cpx;border:1cpx solid red;`;


describe('parse/weex', function() {
  it('if options.rem to be truthy ,parse px to rem,else multiply the px value by options.scale', function() {
    let result = parseCss.parse(source);// body {width:1rem;}
    console.log(result);
    expect(/75px/.test(result)).to.be.ok;
    expect(/1px/.test(result)).to.be.ok;
  })
})


================================================
FILE: packages/chameleon-css-loader/test/utils.test.js
================================================


const utils = require('../utils.js');
const expect = require('chai').expect;


describe('utils', function() {
  it('transform singlequot to doublequot', function() {
    expect(utils.singlequot2doublequot(`'`)).to.be.equal(`"`);
  });
  it('unique cssStyleValue ', function() {
    expect(utils.uniqueStyle(`width:300px;width:300px`)).to.be.equal(`width:300px`)
  });
  it('disappearCssComment', function() {
    expect(utils.disappearCssComment(`/*width:300px;*/`)).to.be.empty;
  })
})




================================================
FILE: packages/chameleon-css-loader/transform/color.js
================================================
const COLOR_MAP = {
  aliceblue: '#f0f8ff',
  antiquewhite: '#faebd7',
  aqua: '#00ffff',
  aquamarine: '#7fffd4',
  azure: '#f0ffff',
  beige: '#f5f5dc',
  bisque: '#ffe4c4',
  black: '#000000',
  blanchedalmond: '#ffebcd',
  blue: '#0000ff',
  blueviolet: '#8a2be2',
  brown: '#a52a2a',
  burlywood: '#deb887',
  cadetblue: '#5f9ea0',
  chartreuse: '#7fff00',
  chocolate: '#d2691e',
  coral: '#ff7f50',
  cornflowerblue: '#6495ed',
  cornsilk: '#fff8dc',
  crimson: '#dc143c',
  cyan: '#00ffff',
  darkblue: '#00008b',
  darkcyan: '#008b8b',
  darkgoldenrod: '#b8860b',
  darkgray: '#a9a9a9',
  darkgrey: '#a9a9a9',
  darkgreen: '#006400',
  darkkhaki: '#bdb76b',
  darkmagenta: '#8b008b',
  darkolivegreen: '#556b2f',
  darkorange: '#ff8c00',
  darkorchid: '#9932cc',
  darkred: '#8b0000',
  darksalmon: '#e9967a',
  darkseagreen: '#8fbc8f',
  darkslateblue: '#483d8b',
  darkslategray: '#2f4f4f',
  darkslategrey: '#2f4f4f',
  darkturquoise: '#00ced1',
  darkviolet: '#9400d3',
  deeppink: '#ff1493',
  deepskyblue: '#00bfff',
  dimgray: '#696969',
  dimgrey: '#696969',
  dodgerblue: '#1e90ff',
  firebrick: '#b22222',
  floralwhite: '#fffaf0',
  forestgreen: '#228b22',
  fuchsia: '#ff00ff',
  gainsboro: '#dcdcdc',
  ghostwhite: '#f8f8ff',
  gold: '#ffd700',
  goldenrod: '#daa520',
  gray: '#808080',
  grey: '#808080',
  green: '#008000',
  greenyellow: '#adff2f',
  honeydew: '#f0fff0',
  hotpink: '#ff69b4',
  indianred: '#cd5c5c',
  indigo: '#4b0082',
  ivory: '#fffff0',
  khaki: '#f0e68c',
  lavender: '#e6e6fa',
  lavenderblush: '#fff0f5',
  lawngreen: '#7cfc00',
  lemonchiffon: '#fffacd',
  lightblue: '#add8e6',
  lightcoral: '#f08080',
  lightcyan: '#e0ffff',
  lightgoldenrodyellow: '#fafad2',
  lightgray: '#d3d3d3',
  lightgrey: '#d3d3d3',
  lightgreen: '#90ee90',
  lightpink: '#ffb6c1',
  lightsalmon: '#ffa07a',
  lightseagreen: '#20b2aa',
  lightskyblue: '#87cefa',
  lightslateblue: '#8470ff',
  lightslategray: '#778899',
  lightslategrey: '#778899',
  lightsteelblue: '#b0c4de',
  lightyellow: '#ffffe0',
  lime: '#00ff00',
  limegreen: '#32cd32',
  linen: '#faf0e6',
  magenta: '#ff00ff',
  maroon: '#800000',
  mediumaquamarine: '#66cdaa',
  mediumblue: '#0000cd',
  mediumorchid: '#ba55d3',
  mediumpurple: '#9370db',
  mediumseagreen: '#3cb371',
  mediumslateblue: '#7b68ee',
  mediumspringgreen: '#00fa9a',
  mediumturquoise: '#48d1cc',
  mediumvioletred: '#c71585',
  midnightblue: '#191970',
  mintcream: '#f5fffa',
  mistyrose: '#ffe4e1',
  moccasin: '#ffe4b5',
  navajowhite: '#ffdead',
  navy: '#000080',
  oldlace: '#fdf5e6',
  olive: '#808000',
  olivedrab: '#6b8e23',
  orange: '#ffa500',
  orangered: '#ff4500',
  orchid: '#da70d6',
  palegoldenrod: '#eee8aa',
  palegreen: '#98fb98',
  paleturquoise: '#afeeee',
  palevioletred: '#db7093',
  papayawhip: '#ffefd5',
  peachpuff: '#ffdab9',
  peru: '#cd853f',
  pink: '#ffc0cb',
  plum: '#dda0dd',
  powderblue: '#b0e0e6',
  purple: '#800080',
  rebeccapurple: '#663399',
  red: '#ff0000',
  rosybrown: '#bc8f8f',
  royalblue: '#4169e1',
  saddlebrown: '#8b4513',
  salmon: '#fa8072',
  sandybrown: '#f4a460',
  seagreen: '#2e8b57',
  seashell: '#fff5ee',
  sienna: '#a0522d',
  silver: '#c0c0c0',
  skyblue: '#87ceeb',
  slateblue: '#6a5acd',
  slategray: '#708090',
  slategrey: '#708090',
  snow: '#fffafa',
  springgreen: '#00ff7f',
  steelblue: '#4682b4',
  tan: '#d2b48c',
  teal: '#008080',
  thistle: '#d8bfd8',
  tomato: '#ff6347',
  transparent: '#000000',
  turquoise: '#40e0d0',
  violet: '#ee82ee',
  violetred: '#d02090',
  wheat: '#f5deb3',
  white: '#ffffff',
  whitesmoke: '#f5f5f5',
  yellow: '#ffff00',
  yellowgreen: '#9acd32'
};

module.exports = function (color) {
  return COLOR_MAP[color] || color;
};


================================================
FILE: packages/chameleon-css-loader/transform/weex.js
================================================
const color = require('./color');
const utils = require('../utils.js');

/**
 * 处理映射表
 *
 * @type {Object}
 */
const HANDLE_MAP = {
  directions: ['top', 'right', 'bottom', 'left'],
  angles: ['top-left', 'top-right', 'bottom-right', 'bottom-left'],
  borderAttributes: ['style', 'width', 'color'],
  backgroundAttributes: ['color', 'position', 'size', 'repeat', 'origin', 'clip', 'attachment', 'image'],
  flexAttributes: ['direction', 'wrap']
};

/**
 * 获取声明列表
 *
 * @param  {string} tpl   声明模板
 * @param  {string} value 声明值
 * @param  {string} type  声明类型
 * @return {Array}        声明列表
 */
let getDeclarations = (tpl, value, type) => {
  let declarations = [];
  tpl.replace(/\${(.*)}/g, (match, varible) => {
    declarations = HANDLE_MAP[varible + 's'].map(item => {
      let val = value;

      if (type == 'margin' || type == 'padding') {
        val = getBoxValues(value)[item];
      } else if (varible == 'borderAttribute') {
        val = getBorderValues(value)[item];
      } else if (varible == 'backgroundAttribute') {
        val = getBackgroundValues(value)[item];
      } else if (varible == 'flexAttribute') {
        val = getFlexValues(value)[item];
      } else if (varible == 'angle') {
        val = getBorderRadiusValues(value)[item];
      } else {
        val = value;
      }

      if (val) {
        return {
          type: 'declaration',
          property: tpl.replace(/\${.*}/g, item),
          value: val
        };
      } else {
        return null;
      }
    }).filter(declaration => declaration);
  });

  return declarations;
}

let getValueSegs = value => {
  let vals = value.replace(/\s*,\s*/g, ',').split(/\s+/);
  return vals.map(color);
};

/**
 * 获取边框样式值
 *
 * @param  {string} value 边框样式值
 * @return {Object}       边框样式表
 */
let getBorderValues = value => {
  let result = {};
  let vals = getValueSegs(value);

  vals.forEach(val => {
    if (/^(solid|dashed|dotted|none)/g.test(val)) {
      result.style = val;
    } else if (/^(0(px)?|[0-9]+px)/g.test(val)) {
      result.width = val;
    } else if (/^(#[0-9a-fA-F]*|rgba?\(.*?\))/g.test(val)) {
      result.color = val;
    }
  });

  return result;
};

let getFlexValues = value => {
  let result = {};
  let vals = getValueSegs(value);

  if (vals.length == 2) {
    result = {
      direction: 'inherit',
      wrap: 'inherit'
    };
  }

  let directions = ['row', 'row-reverse', 'column', 'column-reverse', 'initial', 'initial'];
  let wraps = ['nowrap', 'wrap', 'wrap-reverse', 'initial', 'initial'];

  vals.forEach(function (val, index) {
    if (index == 0 && (directions.indexOf(val) > -1)) {
      result.direction = val;
    }
    else if (index == 1 && (wraps.indexOf(val) > -1)) {
      result.wrap = val;
    }
  });

  return result;
};

/**
 * 获取box样式值
 *
 * @param  {string} value box样式值
 * @return {Object}       box样式表
 */
let getBoxValues = value => {
  let vals = getValueSegs(value);

  if (vals.length == 1) {
    return {
      top: vals[0],
      right: vals[0],
      bottom: vals[0],
      left: vals[0]
    };
  } else if (vals.length == 2) {
    return {
      top: vals[0],
      right: vals[1],
      bottom: vals[0],
      left: vals[1]
    };
  } else if (vals.length == 3) {
    return {
      top: vals[0],
      right: vals[1],
      bottom: vals[2],
      left: vals[1]
    };
  } else if (vals.length == 4) {
    return {
      top: vals[0],
      right: vals[1],
      bottom: vals[2],
      left: vals[3]
    };
  } else {
    return {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0
    };
  }
};

let getBorderRadiusValues = value => {
  let results = [];

  let vals = value.split('/');

  vals.forEach(val => {
    let vals = getValueSegs(value);
    let result;
    if (vals.length == 1) {
      result = {
        'top-left': vals[0],
        'top-right': vals[0],
        'bottom-right': vals[0],
        'bottom-left': vals[0]
      };
    }
    else if (vals.length == 2) {
      result = {
        'top-left': vals[0],
        'top-right': vals[1],
        'bottom-right': vals[0],
        'bottom-left': vals[1]
      };
    }
    else if (vals.length == 3) {
      result = {
        'top-left': vals[0],
        'top-right': vals[1],
        'bottom-right': vals[2],
        'bottom-left': vals[1]
      };
    }
    else if (vals.length == 4) {
      result = {
        'top-left': vals[0],
        'top-right': vals[1],
        'bottom-right': vals[2],
        'bottom-left': vals[3]
      };
    }
    results.push(result);
  })
  let result = {};
  results.forEach(current => {
    ['top-left', 'top-right', 'bottom-right', 'bottom-left'].forEach(key => {
      if (!result[key]) {
        result[key] = current[key];
      }
      else {
        result[key] += (' ' + current[key]);
      }
    });
  })

  return result;
};

/**
 * 获取background样式值
 *
 * @param  {string} value 背景样式值
 * @return {Object}       背景样式表
 */
let getBackgroundValues = value => {
  let result = {};
  let vals = getValueSegs(value);
  let positionEnd = false;
/* eslint-disable */
  vals.forEach(val => {
    if (/#[0-9a-fA-F]*|rgba?\(.*?\)/g.test(val)) {
      result.color = val;
    } else if (/^url\(.*\)/g.test(val)) {
      result.image = val;
    } else if (/^(repeat|repeat-x|repeat-y|no-repeat)/g.test(val)) {
      result.repeat = val;
    } else if (/^(padding\-box|border\-box|content\-box)/g.test(val) && !result.origin) {
      result.origin = val;
    } else if (/^(padding\-box|border\-box|content\-box)/g.test(val)) {
      result.clip = val;
    } else if (/^(top|center|bottom|left|right|[0-9.]+(px|%))/g.test(val) && !positionEnd) {
      result.position = !result.position ? val : result.position + ' ' + val;
    } else if (/\//g.test(val)) {
      positionEnd = true;
    } else if (/^(top|center|bottom|left|right|[0-9.]+(px|%))/g.test(val)) {
      result.size = !result.size ? val : result.size + ' ' + val;
    } else if (/^(scroll|fixed)/g.test(val)) {
      result.attachment = val;
    }
  });
  /* eslint-disable */
  return result;
};

let parse = function (style) {
  return style
    .split(';')
    .filter(declaration => !!declaration.trim())
    .map(declaration => {
      let {key, value} = utils.getStyleKeyValue(declaration);
      return {
        property: key,
        value
      };
    })
    .map(declaration => convert(declaration)
      .map(declaration => declaration.property + ': ' + declaration.value)
      .join(';'))
    .join(';');
};

let convert = function (declaration) {
  let declarations = [];
  let {property, value} = declaration;
  value = value.replace(/(\d*\.?\d+)cpx/gi, function(m, $1, $2) {
    return $1 + "px";
  })

  switch (property) {
    case 'margin':
      declarations = getDeclarations('margin-${direction}', value, property);
      break;
    case 'padding':
      declarations = getDeclarations('padding-${direction}', value, property);
      break;
    case 'background':
      declarations = getDeclarations('background-${backgroundAttribute}', value, property);
      break;
    case 'border':
    case 'border-top':
    case 'border-right':
    case 'border-bottom':
    case 'border-left':
      declarations = getDeclarations(property + '-${borderAttribute}', value, property);
      break;
    case 'border-style':
      declarations = getDeclarations('border-${direction}-style', value, property);
      break;
    case 'border-width':
      declarations = getDeclarations('border-${direction}-width', value);
      break;
    case 'border-color':
      declarations = getDeclarations('border-${direction}-color', value);
      break;
    case 'border-radius':
      declarations = getDeclarations('border-${angle}-radius', value, property);
      break;
    case 'flex-flow':
      declarations = getDeclarations('flex-${flexAttribute}', value, property);
      break;
    default:
      declarations = [{
        type: 'declaration',
        property: property,
        value: getValueSegs(value).join(' ')
      }];
      break;
  }
  return declarations;
}

module.exports = {
  convert: convert,
  parse: parse
};


================================================
FILE: packages/chameleon-css-loader/utils.js
================================================
const _ = {};
module.exports = _;
// 将字符串中的 单引号变成 双引号;
_.singlequot2doublequot = function (value) {
  return value.replace(/['']/g, '"');
}
// 用于将css样式值中的重复样式去掉
_.uniqueStyle = function(content) {
  const uniqueStyleKeyValue = {};
  const splitStyleKeyValue = content.split(';').filter(item => !!item.trim());
  splitStyleKeyValue.forEach((declaration) => {
    let {key, value} = _.getStyleKeyValue(declaration);
    if (!key || !value) {
      throw new Error('please check if the style that you write is correct')
    }
    uniqueStyleKeyValue[key] = value;
  });

  let result = [];
  Object.keys(uniqueStyleKeyValue).forEach(key => {
    result.push(`${key}:${uniqueStyleKeyValue[key]}`)
  })
  return result.join(';');
}
// 用于删除css样式的注释; /*width:100px;*/ ==> ''
_.disappearCssComment = function(content) {
  let commentReg = /\/\*[\s\S]*?\*\//g;
  return content.replace(commentReg, function (match) {
    return '';
  })
}
_.getStyleKeyValue = function(declaration) {
  let colonIndex = declaration.indexOf(':');
  let key = declaration.slice(0, colonIndex).trim();
  let value = declaration.slice(colonIndex + 1).trim();
  return {
    key, value
  }
}



================================================
FILE: packages/chameleon-dev-proxy/.gitignore
================================================
# Editor directories and files
.DS_Store
.idea
*.suo
*.ntvs*
*.njsproj
*.sln

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
jspm_packages/

# Typescript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# ///////////////////////////



================================================
FILE: packages/chameleon-dev-proxy/index.js
================================================
'use strict';

require('babel-polyfill');



var tlsUtils = require('node-mitmproxy/lib/tls/tlsUtils');
var qrcode = require('qrcode-terminal');
var http = require('http');
var config = require('node-mitmproxy/lib/common/config');
var colors = require('colors');
var createRequestHandler = require('node-mitmproxy/lib/mitmproxy/createRequestHandler');
var createConnectHandler = require('node-mitmproxy/lib/mitmproxy/createConnectHandler');
var createFakeServerCenter = require('node-mitmproxy/lib/mitmproxy/createFakeServerCenter');
var createUpgradeHandler = require('node-mitmproxy/lib/mitmproxy/createUpgradeHandler');

module.exports = {
    createProxy: function createProxy(_ref) {
        var _ref$port = _ref.port;
        var port = _ref$port === undefined ? config.defaultPort : _ref$port;
        var caCertPath = _ref.caCertPath;
        var caKeyPath = _ref.caKeyPath;
        var sslConnectInterceptor = _ref.sslConnectInterceptor;
        var requestInterceptor = _ref.requestInterceptor;
        var responseInterceptor = _ref.responseInterceptor;
        var _ref$getCertSocketTim = _ref.getCertSocketTimeout;
        var getCertSocketTimeout = _ref$getCertSocketTim === undefined ? 1 * 1000 : _ref$getCertSocketTim;
        var _ref$middlewares = _ref.middlewares;
        var middlewares = _ref$middlewares === undefined ? [] : _ref$middlewares;
        var externalProxy = _ref.externalProxy;


        // Don't reject unauthorized
        process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

        //if (!caCertPath && !caKeyPath) {
        var rs = this.createCA(caCertPath);
        caCertPath = rs.caCertPath;
        caKeyPath = rs.caKeyPath;
        if (rs.create) {
            console.log(colors.cyan('CA Cert saved in: ' + caCertPath));
            console.log(colors.cyan('CA private key saved in: ' + caKeyPath));
        }
        //}

        port = ~~port;
        var requestHandler = createRequestHandler(requestInterceptor, responseInterceptor, middlewares, externalProxy);

        var upgradeHandler = createUpgradeHandler();

        var fakeServersCenter = createFakeServerCenter({
            caCertPath: caCertPath,
            caKeyPath: caKeyPath,
            requestHandler: requestHandler,
            upgradeHandler: upgradeHandler,
            getCertSocketTimeout: getCertSocketTimeout
        });

        var connectHandler = createConnectHandler(sslConnectInterceptor, fakeServersCenter);

        var server = new http.Server();
        server.listen(port, function () {
            let crlUrl = _ref.devServer + config.caCertFileName;
            console.log(colors.green('代理端口: ' + port));
            console.log(colors.green(`证书地址:${crlUrl}`));
            console.log(colors.green(`扫一扫安装证书:`));
            qrcode.generate(`${crlUrl}`, {small: true});
            server.on('error', function (e) {
                console.error(colors.red(e));
            });
            server.on('request', function (req, res) {
                var ssl = false;
                requestHandler(req, res, ssl);
            });
            // tunneling for https
            server.on('connect', function (req, cltSocket, head) {
                connectHandler(req, cltSocket, head);
            });
            // TODO: handler WebSocket
            server.on('upgrade', function (req, socket, head) {
                var ssl = false;
                upgradeHandler(req, socket, head, ssl);
            });
        });
    },
    createCA: function createCA() {
        var caBasePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : config.getDefaultCABasePath();

        return tlsUtils.initCA(caBasePath);
    }
};

================================================
FILE: packages/chameleon-dev-proxy/package.json
================================================
{
  "name": "chameleon-dev-proxy",
  "version": "1.0.8",
  "description": "cml开发环境代理服务模块",
  "main": "index.js",
  "author": "Chameleon-Team",
  "license": "Apache",
  "mail": "ChameleonCore@didiglobal.com",
  "dependencies": {
    "babel-polyfill": "^6.26.0",
    "node-mitmproxy": "^3.1.0",
    "qrcode-terminal": "^0.12.0"
  },
  "gitHead": "5ddcde4330774710f7646559446e008f7785ce00"
}

================================================
FILE: packages/chameleon-errors-webpack-plugin/.gitignore
================================================
# Editor directories and files
.DS_Store
.idea
*.suo
*.ntvs*
*.njsproj
*.sln

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
jspm_packages/

# Typescript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# ///////////////////////////



================================================
FILE: packages/chameleon-errors-webpack-plugin/LICENSE
================================================
MIT License

Copyright (c) 2016 Geoffroy Warin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: packages/chameleon-errors-webpack-plugin/index.js
================================================

const FriendlyErrorsWebpackPlugin = require('./src/friendly-errors-plugin');

module.exports = FriendlyErrorsWebpackPlugin;

================================================
FILE: packages/chameleon-errors-webpack-plugin/package.json
================================================
{
  "version": "1.0.8",
  "name": "chameleon-errors-webpack-plugin",
  "main": "index.js",
  "author": "Chameleon-Team",
  "license": "Apache",
  "description": "fork from friendly-errors-webpack-plugin",
  "mail": "ChameleonCore@didiglobal.com",
  "dependencies": {
    "chalk": "^1.1.3",
    "error-stack-parser": "^2.0.0",
    "string-width": "^2.0.0"
  },
  "devDependencies": {
    "babel-core": "^6.23.1",
    "babel-eslint": "^7.1.1",
    "babel-loader": "^6.3.0",
    "babel-plugin-transform-async-to-generator": "^6.22.0",
    "babel-preset-react": "^6.23.0",
    "eslint": "^3.16.1",
    "eslint-loader": "^1.6.1",
    "expect": "^1.20.2",
    "jest": "^18.1.0",
    "memory-fs": "^0.4.1",
    "webpack": "^2.2.1"
  },
  "files": [
    "src",
    "index.js"
  ],
  "keywords": [
    "friendly",
    "errors",
    "webpack",
    "plugin"
  ],
  "gitHead": "5ddcde4330774710f7646559446e008f7785ce00"
}

================================================
FILE: packages/chameleon-errors-webpack-plugin/src/core/extractWebpackError.js
================================================
'use strict';

const ErrorStackParser = require('error-stack-parser');
const RequestShortener = require("webpack/lib/RequestShortener");

// TODO: allow the location to be customized in options
const requestShortener = new RequestShortener(process.cwd());

/*
 This logic is mostly duplicated from webpack/lib/Stats.js#toJson()
 See: https://github.com/webpack/webpack/blob/2f618e733aab4755deb42e9d8e859609005607c0/lib/Stats.js#L89
*/

function extractError (e) {
  return {
    message: e.message,
    file: getFile(e),
    origin: getOrigin(e),
    name: e.name,
    severity: 0,
    webpackError: e,
    originalStack: getOriginalErrorStack(e)
  };
}

function getOriginalErrorStack(e) {
  while (e.error != null) {
    e = e.error;
  }
  if (e.stack) {
    return ErrorStackParser.parse(e);
  }
  return [];
}

function getFile (e) {
  if (e.file) {
    return e.file;
  } else if (e.module && e.module.readableIdentifier && typeof e.module.readableIdentifier === "function") {
    return e.module.readableIdentifier(requestShortener);
  }
}

function getOrigin (e) {
  let origin = '';
  if (e.dependencies && e.origin) {
    origin += '\n @ ' + e.origin.readableIdentifier(requestShortener);
    e.dependencies.forEach(function (dep) {
      if (!dep.loc) return;
      if (typeof dep.loc === "string") return;
      if (!dep.loc.start) return;
      if (!dep.loc.end) return;
      origin += ' ' + dep.loc.start.line + ':' + dep.loc.start.column + '-' +
        (dep.loc.start.line !== dep.loc.end.line ? dep.loc.end.line + ':' : '') + dep.loc.end.column;
    });
    var current = e.origin;
    while (current.issuer && typeof current.issuer.readableIdentifier === 'function') {
      current = current.issuer;
      origin += '\n @ ' + current.readableIdentifier(requestShortener);
    }
  }
  return origin;
}

module.exports = extractError;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/core/formatErrors.js
================================================
'use strict';

/**
 * Applies formatters to all AnnotatedErrors.
 *
 * A formatter has the following signature: FormattedError => Array<String>.
 * It takes a formatted error produced by a transformer and returns a list
 * of log statements to print.
 *
 */
function formatErrors(errors, formatters, errorType) {
  const format = (formatter) => formatter(errors, errorType) || [];
  const flatten = (accum, curr) => accum.concat(curr);

  return formatters.map(format).reduce(flatten, [])
}

module.exports = formatErrors;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/core/transformErrors.js
================================================
'use strict';

const extractError = require('./extractWebpackError');

/**
 * Applies all transformers to all errors and returns "annotated"
 * errors.
 *
 * Each transformer should have the following signature WebpackError => AnnotatedError
 *
 * A WebpackError has the following fields:
 * - message
 * - file
 * - origin
 * - name
 * - severity
 * - webpackError (original error)
 *
 * An AnnotatedError should be an extension (Object.assign) of the WebpackError
 * and add whatever information is convenient for formatting.
 * In particular, they should have a 'priority' field.
 *
 * The plugin will only display errors having maximum priority at the same time.
 *
 * If they don't have a 'type' field, the will be handled by the default formatter.
 */
function processErrors (errors, transformers) {
  const transform = (error, transformer) => transformer(error);
  const applyTransformations = (error) => transformers.reduce(transform, error);

  return errors.map(extractError).map(applyTransformations);
}

module.exports = processErrors;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/formatters/defaultError.js
================================================
'use strict';

const concat = require('../utils').concat;
const formatTitle = require('../utils/colors').formatTitle;

function displayError(severity, error) {
  const baseError = formatTitle(severity, severity);

  return concat(
    `${baseError} ${removeLoaders(error.file)}`,
    '',
    error.message,
    (error.origin ? error.origin : undefined),
    '',
    error.infos
  );
}

function removeLoaders(file) {
  if (!file) {
    return "";
  }
  const split = file.split('!');
  const filePath = split[split.length - 1];
  return `in ${filePath}`;
}

function isDefaultError(error) {
  return !error.type;
}

/**
 * Format errors without a type
 */
function format(errors, type) {
  return errors
    .filter(isDefaultError)
    .reduce((accum, error) => (
      accum.concat(displayError(type, error))
    ), []);
}

module.exports = format;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/formatters/eslintError.js
================================================
'use strict';

const concat = require('../utils').concat;
const chalk = require('chalk');

const infos = [
  'You may use special comments to disable some warnings.',
  'Use ' + chalk.yellow('// eslint-disable-next-line') + ' to ignore the next line.',
  'Use ' + chalk.yellow('/* eslint-disable */') + ' to ignore all warnings in a file.'
];

function displayError(error) {
  return [error.message, '']
}

function format(errors, type) {
  const lintErrors = errors.filter(e => e.type === 'lint-error');
  if (lintErrors.length > 0) {
    const flatten = (accum, curr) => accum.concat(curr);
    return concat(
      lintErrors
        .map(error => displayError(error))
        .reduce(flatten, []),
      infos
    )
  }

  return [];
}

module.exports = format;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/formatters/moduleNotFound.js
================================================
'use strict';
const concat = require('../utils').concat;

function isRelative (module) {
  return module.startsWith('./') || module.startsWith('../');
}

function formatFileList (files) {
  const length = files.length;
  if (!length) return '';
  return ` in ${files[0]}${files[1] ? `, ${files[1]}` : ''}${length > 2 ? ` and ${length - 2} other${length === 3 ? '' : 's'}` : ''}`;
}

function formatGroup (group) {
  const files = group.errors.map(e => e.file).filter(Boolean);
  return `* ${group.module}${formatFileList(files)}`;
}


function forgetToInstall (missingDependencies) {
  const moduleNames = missingDependencies.map(missingDependency => missingDependency.module);

  if (missingDependencies.length === 1) {
    return `To install it, you can run: npm install --save ${moduleNames.join(' ')}`;
  }

  return `To install them, you can run: npm install --save ${moduleNames.join(' ')}`;
}

function dependenciesNotFound (dependencies) {
  if (dependencies.length === 0) return;

  return concat(
    dependencies.length === 1 ? 'This dependency was not found:' : 'These dependencies were not found:',
    '',
    dependencies.map(formatGroup),
    '',
    forgetToInstall(dependencies)
  );
}

function relativeModulesNotFound (modules) {
  if (modules.length === 0) return;

  return concat(
    modules.length === 1 ? 'This relative module was not found:' : 'These relative modules were not found:',
    '',
    modules.map(formatGroup)
  );
}

function groupModules (errors) {
  const missingModule = new Map();

  errors.forEach((error) => {
    if (!missingModule.has(error.module)) {
      missingModule.set(error.module, [])
    }
    missingModule.get(error.module).push(error);
  });

  return Array.from(missingModule.keys()).map(module => ({
    module: module,
    relative: isRelative(module),
    errors: missingModule.get(module),
  }));
}

function formatErrors (errors) {
  if (errors.length === 0) {
    return [];
  }

  const groups = groupModules(errors);

  const dependencies = groups.filter(group => !group.relative);
  const relativeModules = groups.filter(group => group.relative);

  return concat(
    dependenciesNotFound(dependencies),
    dependencies.length && relativeModules.length ? ['', ''] : null,
    relativeModulesNotFound(relativeModules)
  );
}

function format (errors) {
  return formatErrors(errors.filter((e) => (
    e.type === 'module-not-found'
  )));
}

module.exports = format;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/friendly-errors-plugin.js
================================================
'use strict';

const path = require('path');
const chalk = require('chalk');
const os = require('os');
const transformErrors = require('./core/transformErrors');
const formatErrors = require('./core/formatErrors');
const output = require('./output');
const utils = require('./utils');

const concat = utils.concat;
const uniqueBy = utils.uniqueBy;

const defaultTransformers = [
  require('./transformers/babelSyntax'),
  require('./transformers/moduleNotFound'),
  require('./transformers/esLintError'),
];

const defaultFormatters = [
  require('./formatters/moduleNotFound'),
  require('./formatters/eslintError'),
  require('./formatters/defaultError'),
];

class FriendlyErrorsWebpackPlugin {

  constructor(options) {
    options = options || {};
    this.compilationSuccessInfo = options.compilationSuccessInfo || {};
    this.onErrors = options.onErrors;
    this.shouldClearConsole = options.clearConsole == null ? true : Boolean(options.clearConsole);
    this.formatters = concat(defaultFormatters, options.additionalFormatters);
    this.transformers = concat(defaultTransformers, options.additionalTransformers);
    this.cmlType = options.cmlType || '';
    this.showWarning = options.showWarning || false;
  }

  apply(compiler) {

    const doneFn = stats => {
      this.clearConsole();

      const hasErrors = stats.hasErrors();
      let hasWarnings = stats.hasWarnings();
      if (!this.showWarning) {
        hasWarnings = false;
      }
      if (!hasErrors && !hasWarnings) {
        this.displaySuccess(stats);
        return;
      }

      if (hasErrors) {
        this.displayErrors(extractErrorsFromStats(stats, 'errors'), 'error');
        return;
      }

      if (hasWarnings) {
        this.displayErrors(extractErrorsFromStats(stats, 'warnings'), 'warning');
      }
    };

    const invalidFn = () => {
      this.clearConsole();
      cml.log.notice(this.cmlType + ' Compiling...')
    };

    let first = false;
    const beforeCompile = (compilation, callback) => {
      if (!first) {
        cml.log.notice(this.cmlType + ' Compiling...')

        first = true;
      }
      return callback();
    }

    if (compiler.hooks) {
      const plugin = { name: 'FriendlyErrorsWebpackPlugin' };

      compiler.hooks.done.tap(plugin, doneFn);
      compiler.hooks.invalid.tap(plugin, invalidFn);
      compiler.hooks.beforeCompile.tap(plugin, beforeCompile);
    } else {
      compiler.plugin('before-compile', beforeCompile);
      compiler.plugin('done', doneFn);
      compiler.plugin('invalid', invalidFn);
    }
  }

  clearConsole() {
    if (this.shouldClearConsole) {
      output.clearConsole();
    }
  }

  displaySuccess(stats) {
    const time = getCompileTime(stats);
    cml.log.notice(this.cmlType + ' Compiled successfully in ' + time + 'ms')

    if (this.compilationSuccessInfo.messages) {
      this.compilationSuccessInfo.messages.forEach(message => output.info(message));
    }
    if (this.compilationSuccessInfo.notes) {
      output.log();
      this.compilationSuccessInfo.notes.forEach(note => output.note(note));
    }
  }

  displayErrors(errors, severity) {
    const processedErrors = transformErrors(errors, this.transformers);

    const topErrors = getMaxSeverityErrors(processedErrors);
    const nbErrors = topErrors.length;

    const subtitle = severity === 'error' ?
      `Failed to compile with ${nbErrors} ${severity}s` :
      `Compiled with ${nbErrors} ${severity}s`;
    output.title(severity, severity.toUpperCase(), subtitle);

    if (this.onErrors) {
      this.onErrors(severity, topErrors);
    }

    formatErrors(topErrors, this.formatters, severity)
      .forEach(chunk => output.log(chunk));
  }
}

function extractErrorsFromStats(stats, type) {
  if (isMultiStats(stats)) {
    const errors = stats.stats
      .reduce((errors, stats) => errors.concat(extractErrorsFromStats(stats, type)), []);
    // Dedupe to avoid showing the same error many times when multiple
    // compilers depend on the same module.
    return uniqueBy(errors, error => error.message);
  }
  return stats.compilation[type];
}

function getCompileTime(stats) {
  if (isMultiStats(stats)) {
    // Webpack multi compilations run in parallel so using the longest duration.
    // https://webpack.github.io/docs/configuration.html#multiple-configurations
    return stats.stats
      .reduce((time, stats) => Math.max(time, getCompileTime(stats)), 0);
  }
  return stats.endTime - stats.startTime;
}

function isMultiStats(stats) {
  return stats.stats;
}

function getMaxSeverityErrors(errors) {
  const maxSeverity = getMaxInt(errors, 'severity');
  return errors.filter(e => e.severity === maxSeverity);
}

function getMaxInt(collection, propertyName) {
  return collection.reduce((res, curr) => {
    return curr[propertyName] > res ? curr[propertyName] : res;
  }, 0)
}

module.exports = FriendlyErrorsWebpackPlugin;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/output.js
================================================
'use strict';

const colors = require('./utils/colors');
const chalk = require('chalk');
const stringWidth = require('string-width');
const readline = require('readline');

class Debugger {

  constructor () {
    this.enabled = true;
    this.capturing = false;
    this.capturedMessages = [];
  }

  enable () {
    this.enabled = true;
  }

  capture () {
    this.enabled = true;
    this.capturing = true;
  }

  endCapture () {
    this.enabled = false;
    this.capturing = false;
    this.capturedMessages = [];
  }

  log () {
    if (this.enabled) {
      this.captureConsole(Array.from(arguments), console.log);
    }
  }

  info (message) {
    if (this.enabled) {
      const titleFormatted = colors.formatTitle('info', 'I');
      this.log(titleFormatted, message);
    }
  }

  note (message) {
    if (this.enabled) {
      const titleFormatted = colors.formatTitle('note', 'N');
      this.log(titleFormatted, message);
    }
  }

  title (severity, title, subtitle) {
    if (this.enabled) {
      const date = new Date();
      const dateString = chalk.grey(date.toLocaleTimeString());
      const titleFormatted = colors.formatTitle(severity, title);
      const subTitleFormatted = colors.formatText(severity, subtitle);
      const message = `${titleFormatted} ${subTitleFormatted}`

      // In test environment we don't include timestamp
      if(process.env.NODE_ENV === 'test') {
        this.log(message);
        this.log();
        return;
      }

      // Make timestamp appear at the end of the line
      let logSpace = process.stdout.columns - stringWidth(message) - stringWidth(dateString)
      if (logSpace <= 0) {
        logSpace = 10
      }

      this.log(`${message}${' '.repeat(logSpace)}${dateString}`);
      this.log();
    }
  }

  clearConsole () {
    if (!this.capturing && this.enabled && process.stdout.isTTY) {
      // Fill screen with blank lines. Then move to 0 (beginning of visible part) and clear it
      const blank = '\n'.repeat(process.stdout.rows)
      console.log(blank)
      readline.cursorTo(process.stdout, 0, 0)
      readline.clearScreenDown(process.stdout)
    }
  }

  captureLogs (fun) {
    try {
      this.capture();
      fun.call();
      return this.capturedMessages;
    } catch (e) {
      throw e;
    } finally {
      this.endCapture();
    }
  }

  captureConsole (args, method) {
    if (this.capturing) {
      this.capturedMessages.push(chalk.stripColor(args.join(' ')).trim());
    } else {
      method.apply(console, args);
    }
  }
}

function capitalizeFirstLetter (string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}

module.exports = new Debugger();


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/transformers/babelSyntax.js
================================================
'use strict';

/**
 * This will be removed in next versions as it is not handled in the babel-loader
 * See: https://github.com/geowarin/friendly-errors-webpack-plugin/issues/2
 */
function cleanStackTrace(message) {
  return message
    .replace(/^\s*at\s.*:\d+:\d+[\s\)]*\n/gm, ''); // at ... ...:x:y
}

function cleanMessage(message) {
  return message
  // match until the last semicolon followed by a space
  // this should match
  // linux => "(SyntaxError: )Unexpected token (5:11)"
  // windows => "(SyntaxError: C:/projects/index.js: )Unexpected token (5:11)"
    .replace(/^Module build failed.*:\s/, 'Syntax Error: ');
}

function isBabelSyntaxError(e) {
  return e.name === 'ModuleBuildError' &&
    e.message.indexOf('SyntaxError') >= 0;
}

function transform(error) {
  if (isBabelSyntaxError(error)) {
    return Object.assign({}, error, {
      message: cleanStackTrace(cleanMessage(error.message) + '\n'),
      severity: 1000,
      name: 'Syntax Error',
    });
  }

  return error;
}

module.exports = transform;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/transformers/esLintError.js
================================================
'use strict';

function isEslintError (e) {
  return e.originalStack
    .some(stackframe => stackframe.fileName && stackframe.fileName.indexOf('eslint-loader') > 0);
}

function transform(error) {
  if (isEslintError(error)) {
    return Object.assign({}, error, {
      name: 'Lint error',
      type: 'lint-error',
    });
  }

  return error;
}

module.exports = transform;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/transformers/moduleNotFound.js
================================================
'use strict';

const TYPE = 'module-not-found';

function isModuleNotFoundError (e) {
  const webpackError = e.webpackError || {};
  return webpackError.dependencies
    && webpackError.dependencies.length > 0
    && e.name === 'ModuleNotFoundError'
    && e.message.indexOf('Module not found') === 0;
}

function transform(error) {
  const webpackError = error.webpackError;
  if (isModuleNotFoundError(error)) {
    const module = webpackError.dependencies[0].request;
    return Object.assign({}, error, {
      message: `Module not found ${module}`,
      type: TYPE,
      severity: 900,
      module,
      name: 'Module not found'
    });
  }

  return error;
}

module.exports = transform;


================================================
FILE: packages/chameleon-errors-webpack-plugin/src/utils/colors.js
================================================
'use strict';

const chalk = require('chalk');

function formatTitle(severity, message) {
  return chalk[bgColor(severity)].black('', message, '');
}

function formatText(severity, message) {
  return chalk[textColor(severity)](message);
}

function bgColor(severity) {
  const color = textColor(severity);
  return 'bg'+ capitalizeFirstLetter(color)
}

function textColor(serverity) {
  switch (serverity.toLowerCase()) {
    case 'success': return 'green';
    case 'info': return 'blue';
    case 'note': return 'white';
    case 'warning': return 'yellow';
    case 'error': return 'red';
    default: return 'red';
  }
}

function capitalizeFirstLetter(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}

module.exports = {
  bgColor: bgColor,
  textColor: textColor,
  formatTitle: formatTitle,
  formatText: formatText
};

================================================
FILE: packages/chameleon-errors-webpack-plugin/src/utils/index.js
================================================
'use strict';

/**
 * Concat and flattens non-null values.
 * Ex: concat(1, undefined, 2, [3, 4]) = [1, 2, 3, 4]
 */
function concat() {
  const args = Array.from(arguments).filter(e => e != null);
  const baseArray = Array.isArray(args[0]) ? args[0] : [args[0]];
  return Array.prototype.concat.apply(baseArray, args.slice(1));
}

/**
 * Dedupes array based on criterion returned from iteratee function.
 * Ex: uniqueBy(
 *     [{ id: 1 }, { id: 1 }, { id: 2 }],
 *     val => val.id
 * ) = [{ id: 1 }, { id: 2 }]
 */
function uniqueBy(arr, fun) {
  const seen = {};
  return arr.filter(el => {
    const e = fun(el);
    return !(e in seen) && (seen[e] = 1);
  })
}

module.exports = {
  concat: concat,
  uniqueBy: uniqueBy
};


================================================
FILE: packages/chameleon-linter/.eslintrc
================================================
{
  "parser": "babel-eslint",
  "env": {
    "browser": true,
    "node": true,
    "commonjs": true,
    "amd": true,
    "es6": true,
    "mocha": true
  },
  "parserOptions": {
    "ecmaVersion": 6,
    "sourceType": "module",
    "ecmaFeatures": {
      "globalReturn": true,
      "impliedStrict": true,
      "jsx": true,
      "modules": true
    }
  },
  "extends": [
    "eslint:recommended"
  ],

  "rules": {
    "no-cond-assign": 2,
    "no-console": 0,
    "no-constant-condition": 2,
    "no-control-regex": 2,
    "comma-dangle": [1, "never"],
    "no-debugger": 2,
    "no-dupe-args": 2,
    "no-dupe-keys": 2,
    "no-duplicate-case": 2,
    "no-empty": 2,
    "no-empty-character-class": 2,
    "no-ex-assign": 2,
    "no-extra-boolean-cast": 2,
    "no-extra-parens": 0,
    "no-extra-semi": 2,
    "no-func-assign": 2,
    "no-inner-declarations": [2, "functions"],
    "no-invalid-regexp": 2,
    "no-irregular-whitespace": 2,
    "no-negated-in-lhs": 2,
    "no-obj-calls": 2,
    "no-prototype-builtins": 0,
    "no-regex-spaces": 2,
    "no-sparse-arrays": 2,
    "no-unexpected-multiline": 2,
    "no-unreachable": 2,
    "use-isnan": 2,
    "valid-jsdoc": 0,
    "valid-typeof": 2,



    "accessor-pairs": 2,
    "array-callback-return": 0,
    "block-scoped-var": 0,
    "complexity": [2, 20],
    "consistent-return": 0,
    "curly": [2, "all"],
    "default-case": 2,
    "dot-location": [2, "property"],
    "dot-notation": [2, {
      "allowKeywords": false
    }],
    "eqeqeq": [0, "allow-null"],
    "guard-for-in": 0,
    "no-alert": 0,
    "no-caller": 2,
    "no-case-declarations": 2,
    "no-div-regex": 2,
    "no-else-return": 0,
    "no-empty-function": 2,
    "no-empty-pattern": 2,
    "no-eq-null": 1,
    "no-eval": 2,
    "no-extend-native": 2,
    "no-extra-bind": 2,
    "no-extra-label:": 0,
    "no-fallthrough": 2,
    "no-floating-decimal": 2,
    "no-implicit-coercion": 0,
    "no-implicit-globals": 1,
    "no-implied-eval": 2,
    "no-invalid-this": 0,
    "no-iterator": 2,
    "no-labels": 2,
    "no-lone-blocks": 2,
    "no-loop-func": 0,
    "no-magic-numbers": [1, {
      "ignore": [0, -1, 1]
    }],
    "no-multi-spaces": 2,
    "no-multi-str": 2,
    "no-native-reassign": 2,
    "no-new": 2,
    "no-new-func": 0,
    "no-new-wrappers": 2,
    "no-octal": 2,
    "no-octal-escape": 2,
    "no-param-reassign": 0,
    "no-proto": 2,
    "no-redeclare": 2,
    "no-return-assign": 0,
    "no-script-url": 0,
    "no-self-assign": 2,
    "no-self-compare": 2,
    "no-sequences": 2,
    "no-throw-literal": 2,
    "no-unmodified-loop-condition": 2,
    "no-unused-expressions": 0,
    "no-unused-labels": 2,
    "no-useless-call": 2,
    "no-useless-concat": 0,
    "no-useless-escape": 0,
    "no-void": 0,
    "no-warning-comments": 0,
    "no-with": 2,
    "radix": 2,
    "vars-on-top": 0,
    "wrap-iife": [2, "any"],
    "yoda": [2, "never"],
    "strict": 0,



    "init-declarations": 0,
    "no-catch-shadow": 0,
    "no-delete-var": 2,
    "no-label-var": 2,
    "no-restricted-globals": 0,
    "no-shadow": 0,
    "no-shadow-restricted-names": 2,
    "no-undef": 2,
    "no-undef-init": 2,
    "no-undefined": 0,
    "no-unused-vars": [2, {
      "vars": "all",
      "args": "none"
    }],
    "no-use-before-define": 0,


    "callback-return": 0,
    "global-require": 0,
    "handle-callback-err": [2, "^(err|error)$"],
    "no-mixed-requires": 0,
    "no-new-require": 2,
    "no-path-concat": 0,
    "no-process-env": 0,
    "no-process-exit": 0,
    "no-sync": 0,


    "array-bracket-spacing": [2, "never"],
    "block-spacing": [1, "never"],
    "brace-style": [0, "1tbs", {
      "allowSingleLine": true
    }],
    "camelcase": 2,
    "comma-spacing": [2, {
      "before": false,
      "after": true
    }],
    "comma-style": [2, "last"],
    "computed-property-spacing": [2, "never"],
    "consistent-this": [1, "that"],
    "func-names": 0,
    "eol-last": 2,
    "indent": [2, 2, {
      "SwitchCase": 1
    }],
    "key-spacing": [2, {
      "beforeColon": false,
      "afterColon": true
    }],
    "linebreak-style": [1, "unix"],
    "lines-around-comment": [1, {
      "beforeBlockComment": true
    }],
    "func-style": 0,
    "max-nested-callbacks": [1, 5],
    "id-blacklist": 0,
    "id-length": 0,
    "id-match": 0,
    "jsx-quotes": 0,
    "keyword-spacing": 2,
    "max-len": [1, 200],
    "max-lines": 0,
    "max-params": [1, 7],
    "max-statements": [1, 200],
    "max-statements-per-line": 0,
    "new-cap": [2, {
      "newIsCap": true,
      "capIsNew": false
    }],
    "new-parens": 2,
    "newline-after-var": 0,
    "no-array-constructor": 2,
    "no-bitwise": 0,
    "newline-before-return": 0,
    "newline-per-chained-call": 1,
    "no-continue": 0,
    "no-inline-comments": 0,
    "no-lonely-if": 0,
    "no-mixed-operators": 0,
    "no-mixed-spaces-and-tabs": 2,
    "no-multiple-empty-lines": [2, {
      "max": 2
    }],
    "no-negated-condition": 0,
    "no-nested-ternary": 0,
    "no-new-object": 2,
    "no-plusplus": 0,
    "no-restricted-syntax": 0,
    "no-spaced-func": 2,
    "no-ternary": 0,
    "no-trailing-spaces": 2,
    "no-underscore-dangle": 0,
    "no-unneeded-ternary": 2,
    "no-whitespace-before-property": 0,
    "object-curly-newline": 0,
    "object-curly-spacing": 0,
    "object-property-newline": 0,
    "one-var": [2, {
      "initialized": "never"
    }],
    "one-var-declaration-per-line": 0,
    "operator-assignment": 0,
    "operator-linebreak": [2, "after", {
      "overrides": {
        "?": "before",
        ":": "before"
      }
    }],
    "padded-blocks": 0,
    "quote-props": 0,
    "quotes": [2, "single", "avoid-escape"],
    "require-jsdoc": 0,
    "semi": [0, "always"],
    "semi-spacing": 0,
    "sort-vars": 0,
    "space-before-blocks": [2, "always"],
    "space-before-function-paren": [0, "always"],
    "space-in-parens": [2, "never"],
    "space-infix-ops": 2,
    "space-unary-ops": [2, {
      "words": true,
      "nonwords": false
    }],
    "spaced-comment": [2, "always", {
      "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"]
    }],
    "unicode-bom": 0,
    "wrap-regex": 0,


    "arrow-body-style": 0,
    "arrow-parens": 0,
    "arrow-spacing": [2, {
      "before": true,
      "after": true
    }],
    "constructor-super": 0,
    "generator-star-spacing": [2, {
      "before": true,
      "after": true
    }],
    "no-class-assign": 2,
    "no-confusing-arrow": 0,
    "no-const-assign": 2,
    "no-dupe-class-members": 2,
    "no-duplicate-imports": 0,
    "no-new-symbol": 2,
    "no-restricted-imports": 0,
    "no-this-before-super": 2,
    "no-useless-computed-key": 0,
    "no-var": 0,
    "object-shorthand": 0,
    "prefer-arrow-callback": 0,
    "prefer-const": 0,
    "prefer-reflect": 0,
    "prefer-spread": 0,
    "prefer-template": 0,
    "prefer-rest-params": 0,
    "require-yield": 0,
    "rest-spread-spacing": 0,
    "sort-imports": 0,
    "template-curly-spacing": 1,
    "yield-star-spacing": 2
  }
}


================================================
FILE: packages/chameleon-linter/.gitignore
================================================
.DS_Store
.vscode
.nyc_output


================================================
FILE: packages/chameleon-linter/bin/cli.js
================================================
#!/usr/bin/env node
// --inspect-brk
const program = require('commander');
const packageJson = require('../package.json');
const main = require('../index');

process.on('unhandledRejection', error => {
  // Will print "unhandledRejection err is not defined"
  console.log('unhandledRejection', error.message);
});

program
  .version(packageJson.version)
  .parse(process.argv);
let currentWorkspace = process.cwd();
global.workspace = currentWorkspace;

process.on('unhandledRejection', error => {
  console.log(error);
});
main(currentWorkspace, true);



================================================
FILE: packages/chameleon-linter/checkers/index.js
================================================
module.exports = {
  // json校验
  json: require('./json'),

  // 脚本校验
  script: require('./script'),

  // 样式校验
  style: require('./style'),

  // 模板校验
  Template: require('./template')
};


================================================
FILE: packages/chameleon-linter/checkers/json.js
================================================
const config = require('../config');
const cmlUtils = require('chameleon-tool-utils');

/**
 * 查找token
 *
 * @param  {Object} ast      语法树
 * @param  {Array}  tokens   token列表
 * @param  {string} template 模板
 * @return {Object}          查找结果
 */
let findTokens = (ast, tokens, template) => {
  let result = {};

  if (ast) {
    ast.program.body[0].expression.right.properties.forEach(property => {
      if (property.key.value == tokens[0]) {
        if (tokens.length == 1) {
          result = {
            line: property.key.loc.start.line - 1,
            column: property.key.loc.start.column,
            token: tokens.join('.'),
            msg: template.replace(/\{\{token\}\}/, tokens.join(','))
          };
        }
        else if (tokens.length === 2) {
          property.value.properties.forEach(property => {
            if (property.key.value == tokens[1]) {
              result = {
                line: property.key.loc.start.line - 1,
                column: property.key.loc.start.column,
                token: tokens.join('.'),
                msg: template.replace(/\{\{token\}\}/, tokens.join('.'))
              };
            }
          });
        }
        else {
          property.value.properties.forEach(property => {
            if (property.key.value == tokens[1]) {
              if (property.value.properties) {
                property.value.properties.forEach(property => {
                  if (property.key.value == tokens[2]) {
                    result = {
                      line: property.value.loc.start.line - 1,
                      column: property.value.loc.start.column,
                      token: tokens.join('.'),
                      msg: template
                    };
                  }
                });
              }
            }
          });
        }
      }
    });
  }
  return result;
}

let checkComponentName = (name) => {
  let keys = [
    'a', 'div', 'image', 'indicator', 'input', 'list', 'cell', 'recycle-list',
    'loading', 'refresh', 'scroller', 'slider', 'switch', 'text', 'textarea',
    'video', 'waterfall', 'web', 'richtext'
  ];

  if (keys.indexOf(name) > -1) {
    return false;
  }
  return true;
};

module.exports = (result) => {
  if (result.json && result.json.obj) {
    let json = result.json.obj;
    let platforms = config.getPlatforms();
    if (!result.json.platform || result.json.platform == 'weex') {
      let usingComponents = (json.base || {}).usingComponents || {};
      for (let key in usingComponents) {
        if (!checkComponentName(key)) {
          if (result.json.ast) {
            result.json.messages.push(findTokens(result.json.ast, ['base', 'usingComponents', key], 'component [' + key + '] is conflicted with weex buildin component, please rename the component!'));
          }
        }
      }
      let platformUsingComponents = ((json[result.json.platform] || {}).usingComponents) || {};
      for (let key in platformUsingComponents) {
        if (!checkComponentName(key)) {
          if (result.json.ast) {
            result.json.messages.push(findTokens(result.json.ast, ['weex', 'usingComponents', key], 'component [' + key + '] is conflicted with weex buildin component, please rename the component'));
          }
        }
      }
    }


    // 分平台
    if (result.json.platform) {
      platforms.forEach((item) => {
        if (json[item] && item != result.json.platform) {
          if (result.json.ast) {
            result.json.messages.push(findTokens(result.json.ast, [item], 'Useless fields: {{token}}'));
          }
        }
      });
    }
    // 不分平台
    else {
      platforms.forEach((item) => {
        if (json[item] && json[item].usingComponents) {
          if (result.json.ast) {
            result.json.messages.push(findTokens(result.json.ast, [item, 'usingComponents'], 'Useless fields: {{token}}'));
          }
        }
      });
    }


    ['base'].concat(platforms).forEach(item => {
      if (json[item] && json[item].usingComponents) {
        for (let key in json[item].usingComponents) {
          let filePath = json[item].usingComponents[key];
          filePath = filePath.split('?')[0];
          let currentWorkspace = config.getCurrentWorkspace();
          let componentInfo = cmlUtils.lintHandleComponentUrl(currentWorkspace, result.json.file, filePath);

          if (!componentInfo.filePath && componentInfo.refUrl) {
            if (componentInfo.refUrl.indexOf('plugin://') != 0 && result.json.ast) {
              result.json.messages.push(findTokens(result.json.ast, [item, 'usingComponents', key], 'component: [' + filePath + '] is not found'));
            }
          }
        }
      }
    });
  }

};


================================================
FILE: packages/chameleon-linter/checkers/script.js
================================================
const traverse = require('@babel/traverse')['default'];
const utils = require('../utils');

/**
 * 获取接口定义
 *
 * @param  {Object} ast ast
 * @return {Object}     分析结果
 */
const getInterfaces = (ast) => {
  let result = {
    name: '',
    properties: {}
  };
  ast.program.body.forEach(function (node) {
    if (node.type == 'InterfaceDeclaration') {
      let interfaceName = node.id.name;
      result.name = interfaceName;
      result.loc = {
        line: node.id.loc.start.line,
        column: node.id.loc.start.column
      };
      node.body.properties.map((property) => {
        result.properties[property.key.name] = {
          type: property.value.type.replace(/TypeAnnotation/g, ''),
          line: property.key.loc.start.line,
          column: property.key.loc.start.column
        };
      });
    }
  });
  return result;
};

/**
 * 获取类定义
 * @param   {Object} ast ast
 * @param   {Object} isComp a flag indentify whether the ast is component or an interface portion
 * @return  {Object}     类定义
 */
const getClass = (ast, isComp) => {
  return isComp ? getCompClassDef(ast) : getInterfacePortionClassDef(ast);
};


function getCompClassDef(ast) {
  let classes = [];
  let clazz = {
    interfaces: [],
    properties: [],
    events: [],
    methods: []
  };

  traverse(ast, {
    ClassDeclaration(path) {
      // 接口
      if (path.node['implements']) {
        path.node['implements'].forEach(implament => {
          clazz.interfaces.push(implament.id.name);
        });
      }

      path.node.body.body.forEach(define => {
        if (define.key.name == 'props') {
          define.value.properties.forEach(property => {
            clazz.properties.push(property.key.name);
          });
        }
        else if (define.key.name == 'methods') {
          define.value.properties.filter(property => {
            return property.type === 'ObjectMethod';
          }).forEach(property => {
            clazz.methods.push(property.key.name);
          });
        }
      });

      classes.push(clazz);
    },
    MemberExpression(path) {
      if (!path.node.computed && path.get('object').isThisExpression() && path.get('property').isIdentifier()) {
        if (path.node.property.name === '$cmlEmit') {
          let parentNode = path.findParent(path => path.isCallExpression());
          if (parentNode && parentNode.get('arguments')) {
            let event = null;
            let nameArg = parentNode.get('arguments')[0];
            if (nameArg.isStringLiteral()) {
              event = {
                event: nameArg.node.value,
                line: nameArg.node.loc.start.line,
                column: nameArg.node.loc.start.column
              };
            } else if (nameArg.isIdentifier()) {
              let argBinding = nameArg.scope.getBinding(nameArg.node.name);
              let possibleInit = argBinding ? argBinding.path.node.init : null;
              // For now, we only check just one jump along its scope chain.
              if (possibleInit && possibleInit.type === 'StringLiteral') {
                event = {
                  event: possibleInit.value,
                  line: nameArg.node.loc.start.line,
                  column: nameArg.node.loc.start.column
                };
              }
            }
            if (event) {
              clazz.methods.push(event.event);
              clazz.events.push(event);
            }
          }
        }
      }
    }
  });

  return classes;
}

function getInterfacePortionClassDef(ast) {
  let classes = [];

  traverse(ast, {
    enter(path) {
      if (path.node.type == 'ClassDeclaration') {
        let clazz = {
          interfaces: [],
          properties: [],
          events: [],
          methods: []
        };

        // 接口
        if (path.node['implements']) {
          path.node['implements'].forEach(implament => {
            clazz.interfaces.push(implament.id.name);
          });
        }

        path.node.body.body.forEach(define => {
          if (define.type == 'ClassProperty') {
            clazz.properties.push(define.key.name);
          } else if (define.type === 'ClassMethod') {
            define.key.name && (clazz.methods.push(define.key.name));
          }
        });

        classes.push(clazz);
      }
    }
  });

  return classes;
}


/**
 * 校验接口与脚本
 *
 * @param  {Object}  interfaceAst 接口ast
 * @return {Array}                数组
 */
const checkScript = async (result) => {
  let validPlatforms = Object.keys(result)
    .filter(platform => {
      return platform && (!~['json', 'template', 'style', 'script'].indexOf(platform));
    })
    .filter(platform => {
      return platform && (platform != 'interface');
    });
  // add a script type for multi-file components.
  result['interface'] && validPlatforms.concat('script').forEach(platform => {
    let script;
    let isComp = (platform === 'script');
    if (result[platform] && result[platform].ast) {
      script = result[platform];
    }
    if (result['interface'] && result['interface'].ast && script && script.ast) {
      const interfaceDefine = getInterfaces(result['interface'].ast);
      const classDefines = getClass(script.ast, isComp);
      classDefines.forEach(clazz => {
        let define = null;
        clazz.interfaces.forEach(interfaceName => {
          define = interfaceDefine.name === interfaceName ? interfaceDefine.properties : null;
          if (!define) {
            result['interface'].messages.push({
              msg: `The implement class name: "${interfaceName}" used in file: "${utils.toSrcPath(script.file)}" doesn\'t match the name defined in it\'s interface file: "${utils.toSrcPath(result['interface'].file)}"`
            });
            return;
          }
          for (let key of Object.keys(define)) {
            if ((define[key] && define[key].type == 'Generic') && clazz.properties.indexOf(key) == -1) {
              result['interface'].messages.push({
                line: define[key].line,
                column: define[key].column,
                token: key,
                msg: `interface property "${key}" is not defined for platform ${script.platform} in file "${utils.toSrcPath(script.file)}"`
              });
            }
            else if ((define[key] && define[key].type == 'Function' && clazz.methods.indexOf(key) === -1)) {
              result['interface'].messages.push({
                line: define[key].line,
                column: define[key].column,
                token: key,
                msg: `interface method "${key}" is not defined for platform ${script.platform} in file "${utils.toSrcPath(script.file)}"`
              });
            }
          }
        });

        define && clazz.events.forEach(event => {
          if (!define[event.event] || (define[event.event] && (define[event.event].type != 'Function'))) {
            script.messages.push({
              line: event.line,
              column: event.column,
              token: event.event,
              msg: 'event "' + event.event + '" is not defined in interface file "' + utils.toSrcPath(result['interface'].file) + '"'
            });
          }
        });
      });
    }
  });
};


module.exports = checkScript;


================================================
FILE: packages/chameleon-linter/checkers/style.js
================================================
const config = require('../config');

function getCmlType(mediaParams = '') {
  let types = [];
  if (mediaParams) {
    let typeStr = /\((.*)\)/.exec(mediaParams);
    if (typeStr && typeStr[1]) {
      types = typeStr[1].split(',')
        .filter(type => !!type.trim())
        .map(type => {
          return type.trim().toLowerCase();
        });
    }
  }
  return types;
}

function detectFloatProp(rule, result) {
  rule.walkDecls('float', (decl) => {
    result.style.messages.push({
      line: decl.source.start.line,
      column: decl.source.start.column,
      token: decl.prop,
      msg: `Weex does not support style property: "${decl.prop}", therefor you should not use "float" under a media rule with weex parameter or use "float" in a template file with platform type set to weex`
    });
  });
}

function isMediaNode(node) {
  return node && node.type === 'atrule' && node.name === 'media';
}

const RULER_MAP = {
  'important': {
    rule: function (decl, platform) {
      return config.neexLintWeex() && (!platform || platform == 'weex') && decl.important === true;
    },
    msg: function (decl) {
      return `The CSS attribute "${decl.prop}" does not support "!important"`
    }
  },
  'percentages': {
    rule: function (decl, platform) {
      return config.neexLintWeex() && (!platform || platform == 'weex') && /%\s*$/g.test(decl.value);
    },
    msg: function (decl, platform) {
      return `The CSS attribute "${decl.prop}" does not support percentages`;
    }
  },
  'lineHeight': {
    rule: function (decl, platform) {
      return config.neexLintWeex() && (!platform || platform == 'weex') && decl.prop == 'line-height' && /^\d+$/.test(decl.value);
    },
    msg: function (decl) {
      return `The CSS attribute "${decl.prop}" does not support the number type unit`;
    }
  },
  'cpx': {
    rule: function (decl, platform) {
      return config.getRuleOption('cpx-support') && !platform && /\d+\s*(rpx|px)\s*$/g.test(decl.value);
    },
    msg: function (decl) {
      return `The CSS attribute "${decl.prop}" must use \'cpx\' as it\'s unit`;
    }
  },
  'display': {
    rule: function (decl, platform) {
      return config.neexLintWeex() && (!platform || platform == 'weex') && decl.prop == 'display' && (decl.value == 'none' || decl.value == 'inline-block');
    },
    msg: function (decl) {
      return 'The CSS attribute "display" does not support "' + decl.value + '" as it\'s value';
    }
  }
  // 'flex': {
  //   rule: function (decl, platform) {
  //     if (config.neexLintWeex() && (!platform || platform === 'weex') && decl.prop == 'display' && decl.value == 'flex') {
  //       let flag = true;
  //       decl.parent.nodes.forEach(node => {
  //         if (node.prop == 'flex-direction') {
  //           flag = false;
  //         }
  //       });
  //       return flag;
  //     }
  //   },
  //   msg: function (decl) {
  //     return 'When the CSS attribute "display" value is "flex", you need to add the attribute "flex-direction" at the same time';
  //   }
  // }
};

const SELECTOR_MAP = {
  'pseudo': {
    rule: function (selector, platform) {
      let flag = false;
      if (config.neexLintWeex() && (!platform || platform == 'weex')) {
        selector.replace(/\:([^\s]+)/g, (match, pseudo) => {
          if (['active', 'focus', 'disabled', 'enabled'].indexOf(pseudo) == -1) {
            flag = true;
          }
        });
      }
      return flag;
    },
    msg: function (selector) {
      return 'The CSS selector "' + selector + '" only supports pseudo-classes of "active, focus, disabled, enabled"';
    }
  }
};


module.exports = (result) => {
  if (result.style && result.style.ast) {
    let platform = result.style.platform;
    let root = result.style.ast;

    root.walk((node) => {
      (node.selectors || []).forEach(selector => {
        Object.keys(SELECTOR_MAP).forEach(key => {
          if (SELECTOR_MAP[key].rule(selector, platform)) {
            result.style.messages.push({
              line: node.source.start.line,
              column: node.source.start.column,
              token: node.value,
              msg: SELECTOR_MAP[key].msg(selector)
            });
          }
        });
      });
    });

    root.walkDecls((decl) => {
      Object.keys(RULER_MAP).forEach(key => {
        let stylePolymorphic = false;
        let media = decl.parent && decl.parent.parent;

        if (media && media.name == 'media') {
          if (new RegExp(/cml\-type\s*\(\s*[\S]+\s*\)/g).test(media.params)) {
            stylePolymorphic = true;
          }
        }

        if (!stylePolymorphic && RULER_MAP[key].rule(decl, platform)) {
          result.style.messages.push({
            line: decl.source.start.line,
            column: decl.source.start.column,
            token: decl.value,
            msg: RULER_MAP[key].msg(decl)
          });
        }
      });
    });

    // polymorphic components forbid float property.
    if (config.neexLintWeex() && platform === 'weex') {
      detectFloatProp(root, result);
    }
    // single file components.
    if (config.neexLintWeex() && (platform === undefined || platform === 'cml')) {
      root.walkRules((rule) => {
        if (!isMediaNode(rule.parent) || ~getCmlType(rule.parent.params).indexOf('weex')) {
          detectFloatProp(rule, result);
        }
      });
    }
  }
};


================================================
FILE: packages/chameleon-linter/checkers/template/index.js
================================================
const jsAstParser = require('./lib/js-ast-parser');
const templateAstParser = require('./lib/template-ast-parser');
const jsonAstParser = require('./lib/json-ast-parser');
const commonEvents = require('../../config/common-events.json');

class TemplateChecker {

  /**
     * constructor
     * @param {Object} trees
     * {
     *    templateAst: {},
     *    scriptAst: {},
     *    jsonAst: {}
     * }
     */
  constructor(filePath = '', lintedResult = {}) {
    this._filePath = filePath;
    this._platform = lintedResult.template.platform;

    this._templateAst = lintedResult.template.ast;
    this._scriptAst = lintedResult.script.ast;
    this._jsonAst = lintedResult.json.obj;

    this._parsedTemplateResults = '';
    this._parsedScriptResults = '';
    this._usingComponents = '';

    this.parseAllParts();
  }

  parseAllParts() {
    this._usingComponents = jsonAstParser.getUsingComponents(this._jsonAst, this._filePath);
    this._parsedScriptResults = jsAstParser.getParseResults(this._scriptAst);
    this._parsedTemplateResults = templateAstParser.getParseResults(this._templateAst, {
      usingComponents: Object.keys(this._usingComponents),
      platform: this._platform
    });
  }

  checkCustomizedComponents() {
    let issues = [];
    let usingComponents = this._usingComponents;
    let customizedComponets = this._parsedTemplateResults.customizedComponents;

    customizedComponets.forEach((component) => {
      Object.entries(component).forEach((compInfo) => {
        let compName = compInfo[0];
        if (usingComponents[compName] && usingComponents[compName].isCml) {
          let { props, events } = component[compName];
          let { props: usingProps, events: usingEvents } = usingComponents[compName];
          usingProps = usingProps
            .map((prop) => prop.name)
            .join('|');
          usingEvents = usingEvents
            .map((event) => event.name)
            .concat(commonEvents.events)
            .join('|');
          usingProps = `|${usingProps}|`;
          usingEvents = `|${usingEvents}|`;
          props.filter((prop) => usingProps.indexOf('|' + prop.name + '|') === -1).forEach((prop) => {
            issues.push({
              line: prop.pos[0],
              column: prop.pos[1],
              token: prop.rawName,
              msg: `The property "${prop.rawName}" is not a property of component "${compName}" which path is: ${usingComponents[compName].path}`
            });
          });

          events.filter((event) => usingEvents.indexOf('|' + event.name + '|') === -1).forEach((event) => {
            issues.push({
              line: event.pos[0],
              column: event.pos[1],
              token: event.name,
              msg: `The event "${event.name}" is not defined in component "${compName}" which path is: ${usingComponents[compName].path}`
            });
          });
        }
      });
    });

    return issues;
  }

  checkTemplateAndScript() {
    let jsAstResults = this._parsedScriptResults;
    let templateAstResults = this._parsedTemplateResults;
    let issues = [];

    templateAstResults.methods.forEach(method => {
      if (jsAstResults.methods.indexOf(method.name) === -1) {
        issues.push({
          line: method.pos[0],
          column: method.pos[1],
          token: method.name,
          msg: `method: "${method.name}" is not defined.`
        });
      }
    });

    templateAstResults.vars.forEach((varItem) => {
      if (jsAstResults.vars.indexOf(varItem.name) === -1) {
        issues.push({
          line: varItem.pos[0],
          column: varItem.pos[1],
          token: varItem.name,
          msg: `variable: "${varItem.name}" is not defined.`
        });
      }
    });

    return issues;
  }

  check() {
    return [...this.checkCustomizedComponents(), ...this.checkTemplateAndScript()];
  }
}

module.exports = TemplateChecker;


================================================
FILE: packages/chameleon-linter/checkers/template/lib/js-ast-parser.js
================================================
const CmlJsAstTreeParser = require('cml-js-parser');
const config = require('../../../config');

function getParseResults(astTree) {
  let parser = new CmlJsAstTreeParser({astTree}, config.getParserConfig().script);
  return parser.getParseResults();
}

module.exports = {
  getParseResults
}


================================================
FILE: packages/chameleon-linter/checkers/template/lib/json-ast-parser.js
================================================
const Parser = require('cml-component-parser');
const cmlUtils = require('chameleon-tool-utils');
const utils = require('../../../utils');
const config = require('../../../config');

function getUsingComponents(jsonAst, filePath = '') {
  let results = {};
  let currentWorkspace = config.getCurrentWorkspace();
  let interfaceParser = new Parser(null, config.getParserConfig().script, currentWorkspace);

  if (jsonAst && jsonAst.base && jsonAst.base.usingComponents) {
    Object
      .entries(jsonAst.base.usingComponents)
      .map((componentInfoPair) => {
        return {
          name: utils.toDash(componentInfoPair[0]),
          path: componentInfoPair[1]
        };
      })
      .filter((infoPair) => {
        return !(infoPair.path.indexOf('plugin://') === 0);
      })
      .forEach((infoPair) => {
        // filePath: is a full absolute path of the target template file
        // inforPair.path: is the original path of base: {usingComponents: 'path/to/referenced component'}
        let interfaceInfo = cmlUtils.findInterfaceFile(currentWorkspace, filePath, infoPair.path);
        let componentInfo = cmlUtils.lintHandleComponentUrl(currentWorkspace, filePath, infoPair.path);
        let useDefine = interfaceInfo;

        if (!useDefine.filePath) {
          if (componentInfo && componentInfo.filePath) {
            useDefine = componentInfo;
          }
        }

        results[infoPair.name] = {
          path: useDefine.filePath
        };
        results[infoPair.name] = {
          ...results[infoPair.name],
          ...interfaceParser.resetPath(results[infoPair.name].path).getParseResults()
        }

        results[infoPair.name].isCml = !!interfaceInfo.filePath || componentInfo.isCml;
        results[infoPair.name].isOrigin = !results[infoPair.name].isCml;
        // if we can not get filePath then we delete this component, because the component is not well coded.
        if (!useDefine.filePath) {
          delete results[infoPair.name]
        }
      });
  }
  return results;
}

module.exports = {
  getUsingComponents
};


================================================
FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/customized-node.js
================================================
/**
 * A class represents a customized component.
 */
class CustomizedNode {
  constructor(tag, lang = 'cml') {
    this.lang = lang;
    this.name = tag.name;
    this.attribs = {...tag.attribs};
  }

  get attrs() {
    let attrs = this.attribs;
    return Object.keys(attrs).map((attrName) => {
      return {
        name: attrName,
        namePos: attrs[attrName].nameLineCol,
        value: attrs[attrName].value,
        valuePos: attrs[attrName].valueLineCol
      };
    });
  }
}

module.exports = CustomizedNode;


================================================
FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/rule-loader.js
================================================
class RuleLoader {
  constructor(rules) {
    this.rulesMap = {};
    if (rules) {
      this.addSubscribers(rules);
    }
  }

  addSubscribers(rules) {
    rules.forEach(function(rule) {
      rule.subscribers = [];
      rules.forEach((onRule) => {
        if (onRule.on && ~onRule.on.indexOf(rule.name)) {
          rule.subscribers.push(onRule);
        }
      });
      this.rulesMap[rule.name] = rule;
    }.bind(this));
  }

  getRuleByName(ruleName) {
    return this.rulesMap[ruleName];
  }
}

module.exports = RuleLoader;


================================================
FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/suspicious-node.js
================================================
/**
 * A class reprents nodes that are waiting for passing to getting variable rules.
 */
class SuspiciousNode {

  constructor({name = '', rawValue = '', valuePos = [], lang = 'cml', scope = [], isTextNode = false}) {
    this.name = name;
    this.rawValue = rawValue;
    this.valuePos = valuePos;
    this.lang = lang;

    /**
     * loopScopes property is holding the for loop varibables. For example for v-for
     * directive in vue.js, say v-for='(item , index) in array', then we will append an
     * array with value:
     * [item, index]
     * into loopScopes property.
     */
    this.loopScopes = scope;
    this.isTextNode = isTextNode;
    this.isAttr = !this.isTextNode;
  }
}

module.exports = SuspiciousNode;


================================================
FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/index.js
==================================
Download .txt
gitextract_si943cgs/

├── .eslintrc.js
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.md
│       └── feature_request.md
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── commitlint.config.js
├── elevate/
│   └── cr.yml
├── lerna.json
├── package.json
├── packages/
│   ├── babel-plugin-chameleon-import/
│   │   ├── .editorconfig
│   │   ├── .eslintignore
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Plugin.js
│   │   │   └── index.js
│   │   └── test/
│   │       └── fixtures/
│   │           ├── array-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── as-arguments/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── as-arguments-identifier/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── binary-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── conditions/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-name/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-style-path/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── custom-style-path-ignore/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── execute-direct/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── execute-member/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── export-import/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── expression-statement/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── file-name/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── import-alias/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── import-css/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── keep-named-import/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── material-ui/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── member-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── modules-false/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-libraries/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-libraries-hilojs/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── multiple-words/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── new-expression/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── object-shorthand/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── property/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── react-element/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── react-toolbox/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── return/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── specifier-alias/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── use-multiple-times/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           ├── variable-declarator/
│   │           │   ├── actual.js
│   │           │   └── expected.js
│   │           └── variable-scope/
│   │               ├── actual.js
│   │               └── expected.js
│   ├── chameleon-css-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── handler/
│   │   │   └── lines.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── parser/
│   │   │   ├── media.js
│   │   │   ├── miniapp.js
│   │   │   ├── web.js
│   │   │   └── weex.js
│   │   ├── postcss/
│   │   │   ├── add-alipay-class.js
│   │   │   ├── cpx.js
│   │   │   ├── weex-plus.js
│   │   │   └── weex.js
│   │   ├── proxy/
│   │   │   ├── proxyMiniapp.js
│   │   │   └── proxyWeb.js
│   │   ├── test/
│   │   │   ├── parser-test/
│   │   │   │   ├── media.test.js
│   │   │   │   ├── miniapp.test.js
│   │   │   │   ├── web.test.js
│   │   │   │   └── weex.test.js
│   │   │   ├── postcss-test/
│   │   │   │   └── weex-plus.test.js
│   │   │   ├── proxy-test/
│   │   │   │   ├── proxyMiniapp.test.js
│   │   │   │   └── proxyWeb.test.js
│   │   │   ├── transform/
│   │   │   │   └── weex.test.js
│   │   │   └── utils.test.js
│   │   ├── transform/
│   │   │   ├── color.js
│   │   │   └── weex.js
│   │   └── utils.js
│   ├── chameleon-dev-proxy/
│   │   ├── .gitignore
│   │   ├── index.js
│   │   └── package.json
│   ├── chameleon-errors-webpack-plugin/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── index.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── core/
│   │       │   ├── extractWebpackError.js
│   │       │   ├── formatErrors.js
│   │       │   └── transformErrors.js
│   │       ├── formatters/
│   │       │   ├── defaultError.js
│   │       │   ├── eslintError.js
│   │       │   └── moduleNotFound.js
│   │       ├── friendly-errors-plugin.js
│   │       ├── output.js
│   │       ├── transformers/
│   │       │   ├── babelSyntax.js
│   │       │   ├── esLintError.js
│   │       │   └── moduleNotFound.js
│   │       └── utils/
│   │           ├── colors.js
│   │           └── index.js
│   ├── chameleon-linter/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── cli.js
│   │   ├── checkers/
│   │   │   ├── index.js
│   │   │   ├── json.js
│   │   │   ├── script.js
│   │   │   ├── style.js
│   │   │   └── template/
│   │   │       ├── index.js
│   │   │       └── lib/
│   │   │           ├── js-ast-parser.js
│   │   │           ├── json-ast-parser.js
│   │   │           └── template-ast-parser/
│   │   │               ├── classes/
│   │   │               │   ├── customized-node.js
│   │   │               │   ├── rule-loader.js
│   │   │               │   └── suspicious-node.js
│   │   │               ├── index.js
│   │   │               ├── lib/
│   │   │               │   ├── ast-tree-traversal.js
│   │   │               │   ├── customized-node-dispatcher.js
│   │   │               │   └── suspicious-node-dispatcher.js
│   │   │               ├── options.js
│   │   │               ├── rules/
│   │   │               │   ├── component/
│   │   │               │   │   ├── attr.js
│   │   │               │   │   ├── cml-method-node.js
│   │   │               │   │   ├── cml-prop-node.js
│   │   │               │   │   ├── cml.js
│   │   │               │   │   ├── index.js
│   │   │               │   │   ├── vue-method-node.js
│   │   │               │   │   ├── vue-prop-node.js
│   │   │               │   │   └── vue.js
│   │   │               │   └── template/
│   │   │               │       ├── cml.js
│   │   │               │       ├── index.js
│   │   │               │       ├── method-node.js
│   │   │               │       ├── mustache-node.js
│   │   │               │       ├── vue-directive-node.js
│   │   │               │       └── vue.js
│   │   │               └── tools/
│   │   │                   ├── dash-to-camelcase.js
│   │   │                   ├── flat-array.js
│   │   │                   ├── get-offset-pos-from-text.js
│   │   │                   ├── get-props-from-object-expression.js
│   │   │                   ├── index.js
│   │   │                   ├── is-origin-component.js
│   │   │                   ├── is-suspicious-textnode.js
│   │   │                   ├── loop-scope-handler.js
│   │   │                   ├── parse-single-expression.js
│   │   │                   └── rule-filter-match.js
│   │   ├── classes/
│   │   │   └── message.js
│   │   ├── config/
│   │   │   ├── .cmllintrc
│   │   │   ├── built-in-components/
│   │   │   │   └── index.js
│   │   │   ├── common-events.json
│   │   │   ├── fakeComps/
│   │   │   │   └── index.js
│   │   │   ├── globalVars.js
│   │   │   ├── index.js
│   │   │   ├── parser-config.js
│   │   │   ├── tag-embed-rules.json
│   │   │   └── white-list/
│   │   │       ├── cml-white-list.js
│   │   │       ├── index.js
│   │   │       ├── vue-white-list.js
│   │   │       ├── web-white-list.js
│   │   │       ├── weex-white-list.js
│   │   │       └── wx-white-list.js
│   │   ├── docs/
│   │   │   ├── cml-file-specification.md
│   │   │   ├── components/
│   │   │   │   ├── buildin/
│   │   │   │   │   ├── button.md
│   │   │   │   │   ├── checkbox.md
│   │   │   │   │   ├── input.md
│   │   │   │   │   ├── list.md
│   │   │   │   │   ├── page.md
│   │   │   │   │   ├── radio.md
│   │   │   │   │   ├── richtext.md
│   │   │   │   │   ├── scroller.md
│   │   │   │   │   ├── switch.md
│   │   │   │   │   ├── textarea.md
│   │   │   │   │   └── video.md
│   │   │   │   └── chameleon-ui/
│   │   │   │       ├── c-actionsheet.md
│   │   │   │       ├── c-aside.md
│   │   │   │       ├── c-checkbox-group.md
│   │   │   │       ├── c-col.md
│   │   │   │       ├── c-container.md
│   │   │   │       ├── c-dialog.md
│   │   │   │       ├── c-foot.md
│   │   │   │       ├── c-form-item.md
│   │   │   │       ├── c-form.md
│   │   │   │       ├── c-head.md
│   │   │   │       ├── c-main.md
│   │   │   │       ├── c-picker-item.md
│   │   │   │       ├── c-picker-panel.md
│   │   │   │       ├── c-picker.md
│   │   │   │       ├── c-popup.md
│   │   │   │       ├── c-radio-group.md
│   │   │   │       ├── c-refresh.md
│   │   │   │       ├── c-row.md
│   │   │   │       ├── c-tab-pane-item.md
│   │   │   │       ├── c-tab-pane.md
│   │   │   │       ├── c-tabs-item.md
│   │   │   │       ├── c-tabs.md
│   │   │   │       ├── c-tip.md
│   │   │   │       └── c-toast.md
│   │   │   ├── directory-specification.md
│   │   │   ├── interface-specification.md
│   │   │   └── templates/
│   │   │       ├── template-functionalities.md
│   │   │       ├── template-internal.md
│   │   │       └── template.md
│   │   ├── file-spec.js
│   │   ├── file-structure.js
│   │   ├── index.js
│   │   ├── linters/
│   │   │   ├── index.js
│   │   │   ├── json.js
│   │   │   ├── script.js
│   │   │   ├── style.js
│   │   │   └── template.js
│   │   ├── package.json
│   │   ├── test/
│   │   │   ├── checker/
│   │   │   │   └── cml/
│   │   │   │       ├── json/
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   ├── nonstandard.interface
│   │   │   │       │   ├── nonstandard.weex.cml
│   │   │   │       │   ├── nonstandard.wx.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       └── script/
│   │   │   │           ├── global-variable/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           ├── include/
│   │   │   │           │   ├── include-interface-fail.interface
│   │   │   │           │   ├── include-src-cml-fail.interface
│   │   │   │           │   ├── include-src-cml-mis-prop-fail.interface
│   │   │   │           │   ├── include-src-js-class-name-fail.interface
│   │   │   │           │   ├── include-src-js-fail.interface
│   │   │   │           │   ├── include-src-js-mis-prop-fail.interface
│   │   │   │           │   ├── origin-comp-interface.interface
│   │   │   │           │   ├── origin-interface.interface
│   │   │   │           │   └── src/
│   │   │   │           │       ├── someplatform-mis-class.js
│   │   │   │           │       ├── someplatform-mis-prop.cml
│   │   │   │           │       └── someplatform-mis-prop.js
│   │   │   │           ├── interfaces/
│   │   │   │           │   └── prop-not-defined.interface
│   │   │   │           ├── no-global-variable/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           ├── nointerface/
│   │   │   │           │   └── nonstandard.wx.cml
│   │   │   │           ├── nonstandard.cml
│   │   │   │           ├── properties-methods/
│   │   │   │           │   ├── event-not-defined.interface
│   │   │   │           │   ├── event-not-defined.web.cml
│   │   │   │           │   ├── property-not-defined.interface
│   │   │   │           │   └── property-not-defined.wx.cml
│   │   │   │           ├── standard/
│   │   │   │           │   ├── standard.interface
│   │   │   │           │   ├── standard.web.cml
│   │   │   │           │   ├── standard.weex.cml
│   │   │   │           │   └── standard.wx.cml
│   │   │   │           └── standard.cml
│   │   │   ├── cml.test.js
│   │   │   ├── config.test.js
│   │   │   ├── core/
│   │   │   │   └── standard/
│   │   │   │       ├── chameleon.config.js
│   │   │   │       └── src/
│   │   │   │           ├── app/
│   │   │   │           │   └── app.cml
│   │   │   │           ├── router.config.json
│   │   │   │           └── store/
│   │   │   │               └── index.js
│   │   │   ├── core.test.js
│   │   │   ├── interface/
│   │   │   │   └── common.interface
│   │   │   ├── interface.test.js
│   │   │   ├── linter/
│   │   │   │   └── cml/
│   │   │   │       ├── cml/
│   │   │   │       │   ├── nointerface/
│   │   │   │       │   │   └── standard.web.cml
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   ├── standard/
│   │   │   │       │   │   ├── standard.interface
│   │   │   │       │   │   ├── standard.web.cml
│   │   │   │       │   │   ├── standard.weex.cml
│   │   │   │       │   │   └── standard.wx.cml
│   │   │   │       │   ├── standard.cml
│   │   │   │       │   └── syntaxError/
│   │   │   │       │       ├── standard.interface
│   │   │   │       │       ├── standard.web.cml
│   │   │   │       │       ├── standard.weex.cml
│   │   │   │       │       └── standard.wx.cml
│   │   │   │       ├── json/
│   │   │   │       │   ├── .cmllintrc
│   │   │   │       │   ├── no-bracket.cml
│   │   │   │       │   ├── no-comma.cml
│   │   │   │       │   ├── no-quotes.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       ├── script/
│   │   │   │       │   ├── nonstandard-arrow.cml
│   │   │   │       │   ├── nonstandard.cml
│   │   │   │       │   └── standard.cml
│   │   │   │       └── style/
│   │   │   │           ├── .cmllintrc
│   │   │   │           ├── nest.cml
│   │   │   │           ├── no-bracket.cml
│   │   │   │           ├── no-semicolon.cml
│   │   │   │           ├── no-standard-important.cml
│   │   │   │           ├── no-standard.stylus.cml
│   │   │   │           ├── standard.cml
│   │   │   │           └── standard.stylus.cml
│   │   │   ├── lintrc/
│   │   │   │   ├── nonstandard/
│   │   │   │   │   └── .cmllintrc
│   │   │   │   └── standard/
│   │   │   │       └── .cmllintrc
│   │   │   ├── template/
│   │   │   │   ├── checker/
│   │   │   │   │   ├── template-lib-class.test.js
│   │   │   │   │   ├── template-lib-export.test.js
│   │   │   │   │   ├── template-lib-js.test.js
│   │   │   │   │   ├── template-lib-json.test.js
│   │   │   │   │   ├── template-lib-template.test.js
│   │   │   │   │   └── template.test.js
│   │   │   │   ├── docs/
│   │   │   │   │   ├── check/
│   │   │   │   │   │   ├── fail/
│   │   │   │   │   │   │   ├── index-props-events-cml.cml
│   │   │   │   │   │   │   ├── index-props-events-vue.cml
│   │   │   │   │   │   │   ├── index-props-methods-polymorphic.cml
│   │   │   │   │   │   │   ├── index-props-methods-single.cml
│   │   │   │   │   │   │   ├── index-vars-events.cml
│   │   │   │   │   │   │   ├── index-vars-methods-cml.cml
│   │   │   │   │   │   │   └── index-vars-methods-vue.cml
│   │   │   │   │   │   └── success/
│   │   │   │   │   │       ├── index-lib-check-class.cml
│   │   │   │   │   │       ├── index-lib-check-export.cml
│   │   │   │   │   │       ├── index-lib-check-implements.cml
│   │   │   │   │   │       ├── index-lib-check-plugin.cml
│   │   │   │   │   │       ├── index-lib-check-vue-class.cml
│   │   │   │   │   │       ├── index-lib-js-class.cml
│   │   │   │   │   │       ├── index-lib-js-export.cml
│   │   │   │   │   │       ├── index-lib-json-polymorphic.cml
│   │   │   │   │   │       ├── index-lib-json-single.cml
│   │   │   │   │   │       ├── index-lib-template-cml.cml
│   │   │   │   │   │       └── index-lib-template-vue.cml
│   │   │   │   │   └── components/
│   │   │   │   │       ├── c-checkbox/
│   │   │   │   │       │   └── c-checkbox.cml
│   │   │   │   │       ├── radio/
│   │   │   │   │       │   └── radio.cml
│   │   │   │   │       ├── scroller/
│   │   │   │   │       │   ├── scroller.interface
│   │   │   │   │       │   ├── scroller.web.cml
│   │   │   │   │       │   ├── scroller.weex.cml
│   │   │   │   │       │   └── scroller.wx.cml
│   │   │   │   │       ├── show-component/
│   │   │   │   │       │   ├── scroller.interface
│   │   │   │   │       │   ├── scroller.web.cml
│   │   │   │   │       │   ├── scroller.weex.cml
│   │   │   │   │       │   └── scroller.wx.cml
│   │   │   │   │       └── single/
│   │   │   │   │           └── single.cml
│   │   │   │   └── linter/
│   │   │   │       ├── cases/
│   │   │   │       │   ├── fail/
│   │   │   │       │   │   ├── built-in-embed-rule-excludes-error.js
│   │   │   │       │   │   ├── built-in-embed-rule-includes-error.js
│   │   │   │       │   │   ├── built-in-props-error.js
│   │   │   │       │   │   ├── built-in-props-lang-vue-error.js
│   │   │   │       │   │   ├── directive-cml-error.js
│   │   │   │       │   │   ├── directive-vue-error.js
│   │   │   │       │   │   ├── index.js
│   │   │   │       │   │   ├── lang-error.js
│   │   │   │       │   │   ├── origin-component-cml-directive-forbiden-error.js
│   │   │   │       │   │   ├── origin-component-skip-rules-error.js
│   │   │   │       │   │   ├── platform-specific-tags-error.js
│   │   │   │       │   │   ├── template-tag-error.js
│   │   │   │       │   │   └── usingcomponent-ref-error.js
│   │   │   │       │   └── pass/
│   │   │   │       │       ├── built-in-embed-rule-excludes-pass.js
│   │   │   │       │       ├── built-in-embed-rule-includes-pass.js
│   │   │   │       │       ├── built-in-props-lang-vue-pass.js
│   │   │   │       │       ├── built-in-props-pass.js
│   │   │   │       │       ├── component-is-pass.js
│   │   │   │       │       ├── index.js
│   │   │   │       │       ├── lang-pass.js
│   │   │   │       │       ├── origin-component-skip-rules-pass.js
│   │   │   │       │       ├── platform-specific-tags-pass.js
│   │   │   │       │       ├── tag-close.js
│   │   │   │       │       └── usingcomponent-ref-pass.js
│   │   │   │       └── template.test.js
│   │   │   └── utils.test.js
│   │   └── utils.js
│   ├── chameleon-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .scripts/
│   │   │   └── version.js
│   │   ├── LICENSE
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── cml-compile/
│   │   │   │   ├── handle-platform-css.js
│   │   │   │   ├── json-handle.js
│   │   │   │   ├── runtime/
│   │   │   │   │   ├── app.js
│   │   │   │   │   ├── common/
│   │   │   │   │   │   └── util.js
│   │   │   │   │   ├── component.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── page.js
│   │   │   │   │   ├── web/
│   │   │   │   │   │   ├── app.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── page.js
│   │   │   │   │   │   └── util.js
│   │   │   │   │   ├── weex/
│   │   │   │   │   │   └── util.js
│   │   │   │   │   └── wx/
│   │   │   │   │       └── util.js
│   │   │   │   └── wxml-selector.js
│   │   │   ├── helpers.js
│   │   │   ├── index.js
│   │   │   ├── interface-check/
│   │   │   │   ├── check.js
│   │   │   │   └── getScriptCode.js
│   │   │   ├── load-icon.js
│   │   │   ├── loader.js
│   │   │   ├── loaderMethods.js
│   │   │   ├── miniapp-script.js
│   │   │   ├── parser.js
│   │   │   ├── runtime/
│   │   │   │   ├── check.js
│   │   │   │   └── component-normalizer.js
│   │   │   ├── selector.js
│   │   │   └── utils/
│   │   │       ├── normalize.js
│   │   │       ├── prehandle.js
│   │   │       └── try-require.js
│   │   └── test/
│   │       └── src/
│   │           ├── cml-compile.test/
│   │           │   └── runtime/
│   │           │       ├── all-properties.js
│   │           │       ├── common-utils.test.js
│   │           │       ├── web-utils.test.js
│   │           │       ├── weex-utils.test.js
│   │           │       └── wx-utils.test.js
│   │           ├── load-icon.test.js
│   │           ├── loader.test.js
│   │           ├── loaderMethods.test.js
│   │           ├── parser.cml
│   │           ├── parser.test.js
│   │           ├── project/
│   │           │   └── src/
│   │           │       ├── components/
│   │           │       │   └── coma.cml
│   │           │       └── pages/
│   │           │           └── pagea.cml
│   │           └── utils.test/
│   │               ├── normalize.test.js
│   │               ├── prehandle.test.js
│   │               └── try-require.test.js
│   ├── chameleon-miniapp-target/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── JsonpChunkTemplatePlugin.js
│   │       ├── JsonpHotUpdateChunkTemplatePlugin.js
│   │       ├── JsonpMainTemplatePlugin.js
│   │       ├── JsonpTemplatePlugin.js
│   │       └── index.js
│   ├── chameleon-mixins/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── alipay-mixins.js
│   │   ├── common.js
│   │   ├── miniapp-utils/
│   │   │   └── px2cpx.js
│   │   ├── package.json
│   │   ├── test/
│   │   │   ├── common.test.js
│   │   │   ├── utils.test.js
│   │   │   ├── web-mixins.test.js
│   │   │   ├── weex-mixins.test.js
│   │   │   └── wx-mixins.test.js
│   │   ├── utils.js
│   │   ├── web-mixins.js
│   │   ├── web-utils/
│   │   │   └── px2cpx.js
│   │   ├── weex-mixins.js
│   │   ├── wx-alipay-common-mixins.js
│   │   └── wx-mixins.js
│   ├── chameleon-template-parse/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── LICENSE
│   │   ├── gulpfile.js
│   │   ├── index.html
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── common/
│   │   │   │   ├── cml-map.js
│   │   │   │   ├── process-template.js
│   │   │   │   └── utils.js
│   │   │   ├── compile-template-cml.js
│   │   │   ├── compile-template-vue.js
│   │   │   ├── index.js
│   │   │   └── parser/
│   │   │       ├── index.js
│   │   │       ├── parse-animation-tag.js
│   │   │       ├── parse-attribute.js
│   │   │       ├── parse-class.js
│   │   │       ├── parse-condition.js
│   │   │       ├── parse-directive.js
│   │   │       ├── parse-event.js
│   │   │       ├── parse-interation.js
│   │   │       ├── parse-ref.js
│   │   │       ├── parse-style.js
│   │   │       └── parse-vue2wx.js
│   │   ├── test/
│   │   │   ├── common/
│   │   │   │   ├── process-template.test.js
│   │   │   │   └── utils.test.js
│   │   │   ├── index.js
│   │   │   └── parser/
│   │   │       ├── cml.test.js
│   │   │       ├── index.cml.test.js
│   │   │       ├── index.vue.test.js
│   │   │       └── vue.test.js
│   │   └── webpack.config.js
│   ├── chameleon-templates/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── component/
│   │   │   ├── component/
│   │   │   │   └── index.cml
│   │   │   ├── interface-component/
│   │   │   │   ├── index.alipay.cml
│   │   │   │   ├── index.baidu.cml
│   │   │   │   ├── index.interface
│   │   │   │   ├── index.qq.cml
│   │   │   │   ├── index.tt.cml
│   │   │   │   ├── index.web.cml
│   │   │   │   ├── index.weex.cml
│   │   │   │   └── index.wx.cml
│   │   │   └── interface-js/
│   │   │       └── index.interface
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── page/
│   │   │   └── index.cml
│   │   ├── project/
│   │   │   ├── .gitignore
│   │   │   ├── chameleon.config.js
│   │   │   ├── mock/
│   │   │   │   ├── api/
│   │   │   │   │   └── index.js
│   │   │   │   └── template/
│   │   │   │       └── index.php
│   │   │   ├── package.json
│   │   │   └── src/
│   │   │       ├── app/
│   │   │       │   └── app.cml
│   │   │       ├── components/
│   │   │       │   └── demo-com/
│   │   │       │       └── demo-com.cml
│   │   │       ├── pages/
│   │   │       │   └── index/
│   │   │       │       └── index.cml
│   │   │       ├── router.config.json
│   │   │       └── store/
│   │   │           ├── actions.js
│   │   │           ├── getters.js
│   │   │           ├── index.js
│   │   │           ├── mutations.js
│   │   │           └── state.js
│   │   ├── server/
│   │   │   ├── fisdata/
│   │   │   │   ├── FISData.class.php
│   │   │   │   ├── Manager.class.php
│   │   │   │   ├── README.md
│   │   │   │   ├── TestData.class.php
│   │   │   │   ├── bookmark.js
│   │   │   │   ├── index.tpl
│   │   │   │   ├── libs/
│   │   │   │   │   ├── JsonPro/
│   │   │   │   │   │   ├── CommonHelper.php
│   │   │   │   │   │   ├── Demo.php
│   │   │   │   │   │   ├── adocParser.php
│   │   │   │   │   │   ├── genArray.php
│   │   │   │   │   │   ├── genCase.php
│   │   │   │   │   │   ├── genConf.php
│   │   │   │   │   │   ├── genFile.php
│   │   │   │   │   │   ├── genInterface.php
│   │   │   │   │   │   ├── genLog.php
│   │   │   │   │   │   └── genValue.php
│   │   │   │   │   └── Util.class.php
│   │   │   │   ├── package.json
│   │   │   │   └── plugin/
│   │   │   │       ├── ChameleonData.class.php
│   │   │   │       ├── FISADOCData.class.php
│   │   │   │       ├── FISJSONData.class.php
│   │   │   │       ├── FISPHPData.class.php
│   │   │   │       ├── gen_plugins.php.sh
│   │   │   │       └── plugins.php
│   │   │   ├── index.php
│   │   │   ├── rewrite/
│   │   │   │   ├── README.md
│   │   │   │   └── Rewrite.php
│   │   │   ├── smarty/
│   │   │   │   ├── Smarty.class.php
│   │   │   │   ├── SmartyBC.class.php
│   │   │   │   ├── debug.tpl
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── block.textformat.php
│   │   │   │   │   ├── function.counter.php
│   │   │   │   │   ├── function.cycle.php
│   │   │   │   │   ├── function.fetch.php
│   │   │   │   │   ├── function.html_checkboxes.php
│   │   │   │   │   ├── function.html_image.php
│   │   │   │   │   ├── function.html_options.php
│   │   │   │   │   ├── function.html_radios.php
│   │   │   │   │   ├── function.html_select_date.php
│   │   │   │   │   ├── function.html_select_time.php
│   │   │   │   │   ├── function.html_table.php
│   │   │   │   │   ├── function.mailto.php
│   │   │   │   │   ├── function.math.php
│   │   │   │   │   ├── modifier.capitalize.php
│   │   │   │   │   ├── modifier.date_format.php
│   │   │   │   │   ├── modifier.debug_print_var.php
│   │   │   │   │   ├── modifier.escape.php
│   │   │   │   │   ├── modifier.regex_replace.php
│   │   │   │   │   ├── modifier.replace.php
│   │   │   │   │   ├── modifier.spacify.php
│   │   │   │   │   ├── modifier.truncate.php
│   │   │   │   │   ├── modifiercompiler.cat.php
│   │   │   │   │   ├── modifiercompiler.count_characters.php
│   │   │   │   │   ├── modifiercompiler.count_paragraphs.php
│   │   │   │   │   ├── modifiercompiler.count_sentences.php
│   │   │   │   │   ├── modifiercompiler.count_words.php
│   │   │   │   │   ├── modifiercompiler.default.php
│   │   │   │   │   ├── modifiercompiler.escape.php
│   │   │   │   │   ├── modifiercompiler.from_charset.php
│   │   │   │   │   ├── modifiercompiler.indent.php
│   │   │   │   │   ├── modifiercompiler.lower.php
│   │   │   │   │   ├── modifiercompiler.noprint.php
│   │   │   │   │   ├── modifiercompiler.string_format.php
│   │   │   │   │   ├── modifiercompiler.strip.php
│   │   │   │   │   ├── modifiercompiler.strip_tags.php
│   │   │   │   │   ├── modifiercompiler.to_charset.php
│   │   │   │   │   ├── modifiercompiler.unescape.php
│   │   │   │   │   ├── modifiercompiler.upper.php
│   │   │   │   │   ├── modifiercompiler.wordwrap.php
│   │   │   │   │   ├── outputfilter.trimwhitespace.php
│   │   │   │   │   ├── shared.escape_special_chars.php
│   │   │   │   │   ├── shared.literal_compiler_param.php
│   │   │   │   │   ├── shared.make_timestamp.php
│   │   │   │   │   ├── shared.mb_str_replace.php
│   │   │   │   │   ├── shared.mb_unicode.php
│   │   │   │   │   ├── shared.mb_wordwrap.php
│   │   │   │   │   └── variablefilter.htmlspecialchars.php
│   │   │   │   └── sysplugins/
│   │   │   │       ├── smarty_cacheresource.php
│   │   │   │       ├── smarty_cacheresource_custom.php
│   │   │   │       ├── smarty_cacheresource_keyvaluestore.php
│   │   │   │       ├── smarty_config_source.php
│   │   │   │       ├── smarty_internal_cacheresource_file.php
│   │   │   │       ├── smarty_internal_compile_append.php
│   │   │   │       ├── smarty_internal_compile_assign.php
│   │   │   │       ├── smarty_internal_compile_block.php
│   │   │   │       ├── smarty_internal_compile_break.php
│   │   │   │       ├── smarty_internal_compile_call.php
│   │   │   │       ├── smarty_internal_compile_capture.php
│   │   │   │       ├── smarty_internal_compile_config_load.php
│   │   │   │       ├── smarty_internal_compile_continue.php
│   │   │   │       ├── smarty_internal_compile_debug.php
│   │   │   │       ├── smarty_internal_compile_eval.php
│   │   │   │       ├── smarty_internal_compile_extends.php
│   │   │   │       ├── smarty_internal_compile_for.php
│   │   │   │       ├── smarty_internal_compile_foreach.php
│   │   │   │       ├── smarty_internal_compile_function.php
│   │   │   │       ├── smarty_internal_compile_if.php
│   │   │   │       ├── smarty_internal_compile_include.php
│   │   │   │       ├── smarty_internal_compile_include_php.php
│   │   │   │       ├── smarty_internal_compile_insert.php
│   │   │   │       ├── smarty_internal_compile_ldelim.php
│   │   │   │       ├── smarty_internal_compile_nocache.php
│   │   │   │       ├── smarty_internal_compile_private_block_plugin.php
│   │   │   │       ├── smarty_internal_compile_private_function_plugin.php
│   │   │   │       ├── smarty_internal_compile_private_modifier.php
│   │   │   │       ├── smarty_internal_compile_private_object_block_function.php
│   │   │   │       ├── smarty_internal_compile_private_object_function.php
│   │   │   │       ├── smarty_internal_compile_private_print_expression.php
│   │   │   │       ├── smarty_internal_compile_private_registered_block.php
│   │   │   │       ├── smarty_internal_compile_private_registered_function.php
│   │   │   │       ├── smarty_internal_compile_private_special_variable.php
│   │   │   │       ├── smarty_internal_compile_rdelim.php
│   │   │   │       ├── smarty_internal_compile_section.php
│   │   │   │       ├── smarty_internal_compile_setfilter.php
│   │   │   │       ├── smarty_internal_compile_while.php
│   │   │   │       ├── smarty_internal_compilebase.php
│   │   │   │       ├── smarty_internal_config.php
│   │   │   │       ├── smarty_internal_config_file_compiler.php
│   │   │   │       ├── smarty_internal_configfilelexer.php
│   │   │   │       ├── smarty_internal_configfileparser.php
│   │   │   │       ├── smarty_internal_data.php
│   │   │   │       ├── smarty_internal_debug.php
│   │   │   │       ├── smarty_internal_filter_handler.php
│   │   │   │       ├── smarty_internal_function_call_handler.php
│   │   │   │       ├── smarty_internal_get_include_path.php
│   │   │   │       ├── smarty_internal_nocache_insert.php
│   │   │   │       ├── smarty_internal_parsetree.php
│   │   │   │       ├── smarty_internal_resource_eval.php
│   │   │   │       ├── smarty_internal_resource_extends.php
│   │   │   │       ├── smarty_internal_resource_file.php
│   │   │   │       ├── smarty_internal_resource_php.php
│   │   │   │       ├── smarty_internal_resource_registered.php
│   │   │   │       ├── smarty_internal_resource_stream.php
│   │   │   │       ├── smarty_internal_resource_string.php
│   │   │   │       ├── smarty_internal_smartytemplatecompiler.php
│   │   │   │       ├── smarty_internal_template.php
│   │   │   │       ├── smarty_internal_templatebase.php
│   │   │   │       ├── smarty_internal_templatecompilerbase.php
│   │   │   │       ├── smarty_internal_templatelexer.php
│   │   │   │       ├── smarty_internal_templateparser.php
│   │   │   │       ├── smarty_internal_utility.php
│   │   │   │       ├── smarty_internal_write_file.php
│   │   │   │       ├── smarty_resource.php
│   │   │   │       ├── smarty_resource_custom.php
│   │   │   │       ├── smarty_resource_recompiled.php
│   │   │   │       ├── smarty_resource_uncompiled.php
│   │   │   │       └── smarty_security.php
│   │   │   └── smarty.conf
│   │   └── todo-demo/
│   │       ├── .gitignore
│   │       ├── chameleon.config.js
│   │       ├── mock/
│   │       │   ├── api/
│   │       │   │   └── index.js
│   │       │   └── template/
│   │       │       └── index.php
│   │       ├── package.json
│   │       └── src/
│   │           ├── app/
│   │           │   └── app.cml
│   │           ├── components/
│   │           │   ├── c-checkbox/
│   │           │   │   └── c-checkbox.cml
│   │           │   └── c-todoitem/
│   │           │       └── c-todoitem.cml
│   │           ├── pages/
│   │           │   └── index/
│   │           │       └── index.cml
│   │           ├── router.config.json
│   │           └── store/
│   │               ├── action-types.js
│   │               ├── actions.js
│   │               ├── getter-types.js
│   │               ├── getters.js
│   │               ├── index/
│   │               │   ├── action-types.js
│   │               │   ├── actions.js
│   │               │   ├── getter-types.js
│   │               │   ├── getters.js
│   │               │   ├── mutation-types.js
│   │               │   ├── mutations.js
│   │               │   └── state.js
│   │               ├── index.js
│   │               ├── mutation-types.js
│   │               ├── mutations.js
│   │               ├── state.js
│   │               └── utils.js
│   ├── chameleon-tool/
│   │   ├── .babelrc
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── README.md
│   │   ├── chameleon.js
│   │   ├── commanders/
│   │   │   ├── alipay/
│   │   │   │   └── index.js
│   │   │   ├── baidu/
│   │   │   │   └── index.js
│   │   │   ├── build/
│   │   │   │   └── index.js
│   │   │   ├── dev/
│   │   │   │   └── index.js
│   │   │   ├── ext/
│   │   │   │   └── index.js
│   │   │   ├── extPlatform.js
│   │   │   ├── info/
│   │   │   │   └── index.js
│   │   │   ├── init/
│   │   │   │   ├── index.js
│   │   │   │   └── platform.json
│   │   │   ├── qq/
│   │   │   │   └── index.js
│   │   │   ├── server/
│   │   │   │   └── index.js
│   │   │   ├── tt/
│   │   │   │   └── index.js
│   │   │   ├── utils.js
│   │   │   ├── web/
│   │   │   │   ├── apiMiddleware.js
│   │   │   │   ├── dev-client.js
│   │   │   │   ├── dev-server.js
│   │   │   │   ├── dynamicApiMiddleware.js
│   │   │   │   ├── index.js
│   │   │   │   ├── liveload-dev-client.js
│   │   │   │   ├── php_cgi_middleware.js
│   │   │   │   ├── responseTime.js
│   │   │   │   └── web-socket.js
│   │   │   ├── weex/
│   │   │   │   ├── index.js
│   │   │   │   └── socket-server.js
│   │   │   └── wx/
│   │   │       └── index.js
│   │   ├── configs/
│   │   │   ├── cml-loader.conf.js
│   │   │   ├── component_export/
│   │   │   │   ├── dependencies.js
│   │   │   │   ├── export-loader.js
│   │   │   │   ├── exportPlugin.js
│   │   │   │   ├── getMiniAppExportConfig.js
│   │   │   │   ├── getWebExportConfig.js
│   │   │   │   ├── getWebExportConfig_new.js
│   │   │   │   ├── getWeexExportConfig.js
│   │   │   │   ├── getWeexExportConfig_new.js
│   │   │   │   ├── postcssPlugin.js
│   │   │   │   ├── utils.js
│   │   │   │   ├── webpack.web.config.js
│   │   │   │   └── webpack.weex.config.js
│   │   │   ├── config.js
│   │   │   ├── default/
│   │   │   │   ├── app.cml
│   │   │   │   ├── entry.js
│   │   │   │   ├── html_entry.html
│   │   │   │   ├── miniappPolyfill.js
│   │   │   │   ├── rem.js
│   │   │   │   ├── router.js
│   │   │   │   ├── smarty_entry.html
│   │   │   │   ├── weexPolyfill.js
│   │   │   │   └── weex_liveload_entry.js
│   │   │   ├── entryLoader.js
│   │   │   ├── getCommonConfig.js
│   │   │   ├── getMiniAppBuildConfig.js
│   │   │   ├── getMiniAppCommonConfig.js
│   │   │   ├── getMiniAppDevConfig.js
│   │   │   ├── getWebBuildConfig.js
│   │   │   ├── getWebCommonConfig.js
│   │   │   ├── getWebDevConfig.js
│   │   │   ├── getWebExportConfig.js
│   │   │   ├── getWeexBuildConfig.js
│   │   │   ├── getWeexCommonConfig.js
│   │   │   ├── getWeexDevConfig.js
│   │   │   ├── index.js
│   │   │   ├── mvvm/
│   │   │   │   ├── getExtendConfig.js
│   │   │   │   └── originSourceLoader.js
│   │   │   ├── plugins/
│   │   │   │   ├── CopyNpmPLugin.js
│   │   │   │   ├── miniAppBaseCssAdd.js
│   │   │   │   └── miniAppSubPkg.js
│   │   │   ├── postcss/
│   │   │   │   ├── alipay/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── baidu/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── export/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── extend/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── qq/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── tt/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── web/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   ├── weex/
│   │   │   │   │   └── .postcssrc.js
│   │   │   │   └── wx/
│   │   │   │       └── .postcssrc.js
│   │   │   ├── preview-assets/
│   │   │   │   └── qrcode.js
│   │   │   ├── preview.html
│   │   │   ├── routerLoader.js
│   │   │   ├── utils.js
│   │   │   ├── web_empty.html
│   │   │   ├── web_global.css
│   │   │   ├── web_global.js
│   │   │   └── weex_liveload/
│   │   │       ├── WeexWebSocket.js
│   │   │       └── liveLoad.js
│   │   ├── lib/
│   │   │   ├── cli.js
│   │   │   ├── config.js
│   │   │   ├── index.js
│   │   │   ├── log.js
│   │   │   └── utils.js
│   │   ├── npm-shrinkwrap.json
│   │   ├── package.json
│   │   └── test/
│   │       ├── commander/
│   │       │   ├── index.cml
│   │       │   ├── index.interface
│   │       │   └── init.test.js
│   │       ├── configs/
│   │       │   └── utils.js
│   │       └── lib/
│   │           ├── cli.test.js
│   │           ├── config.test.js
│   │           ├── index.test.js
│   │           └── log.test.js
│   ├── chameleon-tool-utils/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .npmignore
│   │   ├── .travis.yml
│   │   ├── gulpfile.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   ├── lib/
│   │   │   │   └── splitParts.js
│   │   │   └── log.js
│   │   └── test/
│   │       ├── index.test.js
│   │       ├── log.test.js
│   │       └── testlib/
│   │           ├── alipay/
│   │           │   ├── alipay.axml
│   │           │   └── alipay.json
│   │           ├── baidu/
│   │           │   ├── baidu.json
│   │           │   └── baidu.swan
│   │           ├── cli/
│   │           │   └── config.js
│   │           ├── demo-project/
│   │           │   ├── .gitignore
│   │           │   ├── chameleon.config.js
│   │           │   ├── coma/
│   │           │   │   └── coma.interface
│   │           │   ├── comb/
│   │           │   │   └── comb.cml
│   │           │   ├── index.cml
│   │           │   ├── package.json
│   │           │   └── src/
│   │           │       ├── app/
│   │           │       │   └── app.cml
│   │           │       ├── components/
│   │           │       │   ├── com1/
│   │           │       │   │   └── com1.cml
│   │           │       │   ├── com2/
│   │           │       │   │   ├── com2.interface
│   │           │       │   │   ├── com2.web.cml
│   │           │       │   │   └── com2.wx.cml
│   │           │       │   └── com3/
│   │           │       │       └── com3.interface
│   │           │       ├── pages/
│   │           │       │   ├── pagea/
│   │           │       │   │   └── pagea.cml
│   │           │       │   └── pageb/
│   │           │       │       └── pageb.cml
│   │           │       └── router.config.json
│   │           ├── index.cml
│   │           ├── index.interface
│   │           └── wx/
│   │               ├── wx.json
│   │               └── wx.wxml
│   ├── chameleon-vue-precompiler/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── lib/
│   │   │   ├── index.js
│   │   │   └── precompiler/
│   │   │       ├── components/
│   │   │       │   ├── div.js
│   │   │       │   ├── index.js
│   │   │       │   └── span.js
│   │   │       ├── config.js
│   │   │       ├── hooks/
│   │   │       │   ├── events.js
│   │   │       │   ├── index.js
│   │   │       │   ├── style-binding.js
│   │   │       │   └── style.js
│   │   │       ├── index.js
│   │   │       ├── node/
│   │   │       │   └── tag.js
│   │   │       └── util/
│   │   │           ├── ast.js
│   │   │           └── index.js
│   │   └── package.json
│   ├── chameleon-webpack-plugin/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── chunkhash.js
│   │   │   ├── moduleId.js
│   │   │   └── utils.js
│   │   ├── package.json
│   │   └── test/
│   │       └── utils.test.js
│   ├── chameleon-weex-vue-loader/
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── gen-id.js
│   │   │   ├── loader.js
│   │   │   ├── normalize.js
│   │   │   ├── parser.js
│   │   │   ├── script-loader.js
│   │   │   ├── selector.js
│   │   │   ├── style-loader.js
│   │   │   ├── style-rewriter.js
│   │   │   ├── template-compiler.js
│   │   │   └── template-loader.js
│   │   └── package.json
│   ├── cml-component-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── cli.js
│   │   ├── config/
│   │   │   └── parse-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── entrance-flat.js
│   │   │   └── readme-builder.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── built-in-components/
│   │       │   │   ├── input/
│   │       │   │   │   ├── input.interface
│   │       │   │   │   ├── input.web.cml
│   │       │   │   │   ├── input.weex.cml
│   │       │   │   │   └── input.wx.cml
│   │       │   │   └── layout/
│   │       │   │       ├── aside/
│   │       │   │       │   └── aside.cml
│   │       │   │       ├── col/
│   │       │   │       │   └── col.cml
│   │       │   │       ├── container/
│   │       │   │       │   └── container.cml
│   │       │   │       └── foot/
│   │       │   │           └── foot.cml
│   │       │   ├── export-default.cml
│   │       │   └── index.interface
│   │       └── test.js
│   ├── cml-extract-css-webpack-plugin/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── dist/
│   │   │   ├── cjs.js
│   │   │   ├── helper.js
│   │   │   ├── index.js
│   │   │   ├── lib/
│   │   │   │   ├── ExtractTextPluginCompilation.js
│   │   │   │   ├── ExtractedModule.js
│   │   │   │   ├── OrderUndefinedError.js
│   │   │   │   └── helpers.js
│   │   │   └── loader.js
│   │   ├── package.json
│   │   ├── schema/
│   │   │   ├── loader.json
│   │   │   └── plugin.json
│   │   └── test/
│   │       └── index.js
│   ├── cml-htmllinter/
│   │   ├── AUTHORS
│   │   ├── HISTORY
│   │   ├── LICENSE
│   │   ├── docs/
│   │   │   └── gen_options.js
│   │   ├── gulpfile.js
│   │   ├── lib/
│   │   │   ├── config.js
│   │   │   ├── hook/
│   │   │   │   ├── index.js
│   │   │   │   ├── skip-empty-text.js
│   │   │   │   ├── skip-normal-tag.js
│   │   │   │   └── skip_origin_tag.js
│   │   │   ├── index.js
│   │   │   ├── inline_config.js
│   │   │   ├── issue.js
│   │   │   ├── knife/
│   │   │   │   ├── README.md
│   │   │   │   ├── apply_rules.js
│   │   │   │   ├── attr_parse.js
│   │   │   │   ├── boolean_attrs.js
│   │   │   │   ├── index.js
│   │   │   │   ├── is_cml_directives.js
│   │   │   │   ├── is_common_attrs.js
│   │   │   │   ├── is_common_events.js
│   │   │   │   ├── is_labeable.js
│   │   │   │   ├── is_origin_tag.js
│   │   │   │   ├── is_void_element.js
│   │   │   │   ├── lang_tag.js
│   │   │   │   ├── match_filter.js
│   │   │   │   ├── relative_line_col.js
│   │   │   │   ├── shred.js
│   │   │   │   └── tag_utils.js
│   │   │   ├── linter.js
│   │   │   ├── messages.js
│   │   │   ├── parser/
│   │   │   │   ├── dom_builder.js
│   │   │   │   └── index.js
│   │   │   ├── presets/
│   │   │   │   ├── accessibility.js
│   │   │   │   ├── default.js
│   │   │   │   ├── global.js
│   │   │   │   ├── index.js
│   │   │   │   └── validate.js
│   │   │   ├── process_option.js
│   │   │   ├── rules/
│   │   │   │   ├── attr-bans.js
│   │   │   │   ├── attr-name-style.js
│   │   │   │   ├── attr-new-line.js
│   │   │   │   ├── attr-no-dup.js
│   │   │   │   ├── attr-no-unsafe-char.js
│   │   │   │   ├── attr-order.js
│   │   │   │   ├── attr-quote-style.js
│   │   │   │   ├── attr-req-value.js
│   │   │   │   ├── attr-validate.js
│   │   │   │   ├── attr.js
│   │   │   │   ├── class-no-dup.js
│   │   │   │   ├── class-style.js
│   │   │   │   ├── class.js
│   │   │   │   ├── component-attr-check.js
│   │   │   │   ├── directive-cml-valid-value.js
│   │   │   │   ├── directive-cml.js
│   │   │   │   ├── directive-name-forbiden.js
│   │   │   │   ├── doctype-first.js
│   │   │   │   ├── doctype-html5.js
│   │   │   │   ├── dom.js
│   │   │   │   ├── fig-req-figcaption.js
│   │   │   │   ├── focusable-tabindex-style.js
│   │   │   │   ├── free-options.js
│   │   │   │   ├── head-req-title.js
│   │   │   │   ├── head-valid-content-model.js
│   │   │   │   ├── href-style.js
│   │   │   │   ├── html-valid-content-model.js
│   │   │   │   ├── id-class-no-ad.js
│   │   │   │   ├── id-no-dup.js
│   │   │   │   ├── id-style.js
│   │   │   │   ├── img-req-alt.js
│   │   │   │   ├── img-req-src.js
│   │   │   │   ├── indent-style.js
│   │   │   │   ├── index.js
│   │   │   │   ├── input-radio-req-name.js
│   │   │   │   ├── input-req-label.js
│   │   │   │   ├── label-req-for.js
│   │   │   │   ├── lang.js
│   │   │   │   ├── line-end-style.js
│   │   │   │   ├── line-max-len.js
│   │   │   │   ├── line-no-trailing-whitespace.js
│   │   │   │   ├── line.js
│   │   │   │   ├── link-req-noopener.js
│   │   │   │   ├── origin-tag-forbidden-directive.js
│   │   │   │   ├── origin-tag.js
│   │   │   │   ├── spec-char-escape.js
│   │   │   │   ├── table-req-caption.js
│   │   │   │   ├── table-req-header.js
│   │   │   │   ├── tag-bans.js
│   │   │   │   ├── tag-close.js
│   │   │   │   ├── tag-embed.js
│   │   │   │   ├── tag-name-lowercase.js
│   │   │   │   ├── tag-req-attr.js
│   │   │   │   ├── tag-white-list.js
│   │   │   │   ├── tag.js
│   │   │   │   ├── template-lang.js
│   │   │   │   ├── text-forbid-raw.js
│   │   │   │   ├── text.js
│   │   │   │   ├── title-max-len.js
│   │   │   │   ├── title-no-dup.js
│   │   │   │   └── title.js
│   │   │   └── tools/
│   │   │       ├── index.js
│   │   │       └── is_origin_component.js
│   │   ├── package.json
│   │   ├── repl.js
│   │   └── test/
│   │       ├── .eslintrc
│   │       ├── fixtures/
│   │       │   ├── .gitkeep
│   │       │   ├── const_rule.js
│   │       │   └── sanity.html
│   │       ├── functional/
│   │       │   ├── attr-bans.js
│   │       │   ├── attr-name-style.js
│   │       │   ├── attr-new-line.js
│   │       │   ├── attr-no-dup.js
│   │       │   ├── attr-no-unsafe-char.js
│   │       │   ├── attr-order.js
│   │       │   ├── attr-quote-style.js
│   │       │   ├── attr-req-value.js
│   │       │   ├── attr-validate.js
│   │       │   ├── class-no-dup.js
│   │       │   ├── class-style.js
│   │       │   ├── component-attr-check.js
│   │       │   ├── doctype-first.js
│   │       │   ├── doctype-html5.js
│   │       │   ├── fig-req-figcaption.js
│   │       │   ├── focusable-tabindex-style.js
│   │       │   ├── head-req-title.js
│   │       │   ├── head-valid-content-model.js
│   │       │   ├── href-style.js
│   │       │   ├── html-valid-content-model.js
│   │       │   ├── id-class-no-ad.js
│   │       │   ├── id-no-dup.js
│   │       │   ├── id-style.js
│   │       │   ├── img-req-alt.js
│   │       │   ├── img-req-src.js
│   │       │   ├── indent-delta.js
│   │       │   ├── indent-style.js
│   │       │   ├── input-radio-req-name.js
│   │       │   ├── input-req-label.js
│   │       │   ├── label-req-for.js
│   │       │   ├── lang.js
│   │       │   ├── line-end-style.js
│   │       │   ├── line-max-len.js
│   │       │   ├── line-no-trailing-whitespace.js
│   │       │   ├── link-req-noopener.js
│   │       │   ├── raw-ignore-regex.js
│   │       │   ├── runner.test.js
│   │       │   ├── spec-char-escape.js
│   │       │   ├── table-req-caption.js
│   │       │   ├── table-req-header.js
│   │       │   ├── tag-bans.js
│   │       │   ├── tag-name-lowercase.js
│   │       │   ├── tag-req-attr.js
│   │       │   ├── title-max-len.js
│   │       │   └── title-no-dup.js
│   │       └── unit/
│   │           ├── htmllint.js
│   │           ├── inline-config-html/
│   │           │   └── inline-all.html
│   │           ├── knife.apply_rules.js
│   │           ├── knife.is_labeable.js
│   │           ├── knife.relative_line_col.js
│   │           ├── linter.js
│   │           ├── messages.js
│   │           ├── parser.dom_builder.js
│   │           ├── parser.js
│   │           ├── raw-ignore-regex.js
│   │           ├── rules.doctype-first.js
│   │           ├── rules.focusable-tabindex-style.js
│   │           ├── rules.js
│   │           └── runner.test.js
│   ├── cml-interface-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── config/
│   │   │   └── babel-parser-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ast-tree-parser.js
│   │   │   └── file-reader.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── include-interface.interface
│   │       │   └── index.interface
│   │       └── test.js
│   ├── cml-js-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── config/
│   │   │   └── babel-parser-config.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── file-reader.js
│   │   │   └── visitors/
│   │   │       ├── containerPathVisitor.js
│   │   │       ├── exportPathVisitor.js
│   │   │       └── index.js
│   │   └── test/
│   │       ├── docs/
│   │       │   ├── export-class.cml
│   │       │   └── export-default.cml
│   │       └── test.js
│   ├── cml-vue-loader/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── helpers.js
│   │   │   ├── loader.js
│   │   │   ├── parser.js
│   │   │   ├── runtime/
│   │   │   │   └── component-normalizer.js
│   │   │   ├── selector.js
│   │   │   ├── style-compiler/
│   │   │   │   ├── index.js
│   │   │   │   ├── load-postcss-config.js
│   │   │   │   └── plugins/
│   │   │   │       ├── scope-id.js
│   │   │   │       └── trim.js
│   │   │   ├── template-compiler/
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── transform-require.js
│   │   │   │   │   └── transform-srcset.js
│   │   │   │   ├── preprocessor.js
│   │   │   │   └── url-to-require.js
│   │   │   └── utils/
│   │   │       ├── normalize.js
│   │   │       ├── options-cache.js
│   │   │       └── try-require.js
│   │   └── package.json
│   ├── easy-chameleon/
│   │   ├── .babelrc
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── index.js
│   │   ├── config/
│   │   │   ├── getWebpackConfig.js
│   │   │   └── utils.js
│   │   ├── entry/
│   │   │   ├── web_global.css
│   │   │   └── web_global.js
│   │   ├── index.js
│   │   ├── npm-shrinkwrap.json
│   │   ├── package.json
│   │   └── postcss/
│   │       ├── web/
│   │       │   └── .postcssrc.js
│   │       ├── weex/
│   │       │   └── .postcssrc.js
│   │       └── wx/
│   │           └── .postcssrc.js
│   ├── interface-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   └── lib/
│   │   │       └── check.js
│   │   └── test/
│   │       └── lib.test/
│   │           ├── check.js
│   │           ├── check.test.js
│   │           ├── generator.test.js
│   │           └── interface.test
│   ├── mvvm-babel-generator/
│   │   ├── LICENSE
│   │   ├── lib/
│   │   │   ├── buffer.js
│   │   │   ├── generators/
│   │   │   │   ├── base.js
│   │   │   │   ├── classes.js
│   │   │   │   ├── expressions.js
│   │   │   │   ├── flow.js
│   │   │   │   ├── index.js
│   │   │   │   ├── jsx.js
│   │   │   │   ├── methods.js
│   │   │   │   ├── modules.js
│   │   │   │   ├── statements.js
│   │   │   │   ├── template-literals.js
│   │   │   │   ├── types.js
│   │   │   │   └── typescript.js
│   │   │   ├── index.js
│   │   │   ├── node/
│   │   │   │   ├── index.js
│   │   │   │   ├── parentheses.js
│   │   │   │   └── whitespace.js
│   │   │   ├── printer.js
│   │   │   └── source-map.js
│   │   └── package.json
│   ├── mvvm-babel-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── .istanbul.yml
│   │   ├── .travis.yml
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── lib/
│   │   │   └── index.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── brace.js
│   │       └── testjsx.tpl
│   ├── mvvm-cml-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── helper.js
│   │   ├── index.js
│   │   ├── package.json
│   │   └── selector.js
│   ├── mvvm-file-loader/
│   │   ├── README.md
│   │   ├── dist/
│   │   │   ├── cjs.js
│   │   │   ├── index.js
│   │   │   └── options.json
│   │   └── package.json
│   ├── mvvm-interface-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── check.js
│   │   │   ├── getInterfaceCode.js
│   │   │   ├── getInterfaceCode_old.js
│   │   │   ├── getMethodCode.js
│   │   │   ├── getMethodCode_old.js
│   │   │   └── resolveRequire.js
│   │   ├── package.json
│   │   ├── runtime/
│   │   │   ├── checkWrapper.js
│   │   │   └── copyProto.js
│   │   └── test/
│   │       ├── check.test.js
│   │       ├── checkWrapper.test.js
│   │       ├── copyProto.test.js
│   │       ├── getInterfaceCode.test.js
│   │       ├── getMethodCode.test.js
│   │       └── lib/
│   │           └── components/
│   │               ├── coma/
│   │               │   ├── coma.alipay.cml
│   │               │   ├── coma.baidu.cml
│   │               │   ├── coma.interface
│   │               │   ├── coma.web.cml
│   │               │   ├── coma.weex.cml
│   │               │   └── coma.wx.cml
│   │               ├── comb/
│   │               │   ├── comb.baidu.cml
│   │               │   └── comb.interface
│   │               ├── demo-com/
│   │               │   └── demo-com.cml
│   │               ├── first/
│   │               │   ├── first.interface
│   │               │   └── test.js
│   │               ├── methodinclude.interface
│   │               ├── methodsrcerror.interface
│   │               ├── partsrcerror.interface
│   │               ├── ph-com/
│   │               │   ├── ph-com.alipay.cml
│   │               │   ├── ph-com.baidu.cml
│   │               │   ├── ph-com.interface
│   │               │   ├── ph-com.web.cml
│   │               │   ├── ph-com.weex.cml
│   │               │   └── ph-com.wx.cml
│   │               ├── second/
│   │               │   └── second.interface
│   │               ├── third/
│   │               │   ├── double.interface
│   │               │   ├── includea.interface
│   │               │   ├── includeb.interface
│   │               │   ├── multi.interface
│   │               │   ├── not.interface
│   │               │   └── third.interface
│   │               ├── third.interface
│   │               ├── thirdinterface.js
│   │               └── thirdmethod.js
│   ├── mvvm-miniapp-loader/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── helper.js
│   │   ├── index.js
│   │   ├── package.json
│   │   └── selector.js
│   ├── mvvm-pack/
│   │   ├── .eslintrc
│   │   ├── cmlNode.js
│   │   ├── compiler.js
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── amd.js
│   │   │   ├── amdbootstrap.global.js
│   │   │   ├── amdbootstrap.module.js
│   │   │   ├── amdwrapper.js
│   │   │   └── handleScript.js
│   │   ├── log.js
│   │   ├── minimize/
│   │   │   ├── uglifycss.js
│   │   │   └── uglifyjs.js
│   │   ├── mvvmGraphPlugin.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── cmlNode.test.js
│   │       ├── demo-project/
│   │       │   ├── .gitignore
│   │       │   ├── chameleon.config.js
│   │       │   ├── coma/
│   │       │   │   └── coma.interface
│   │       │   ├── comb/
│   │       │   │   └── comb.cml
│   │       │   ├── index.cml
│   │       │   ├── package.json
│   │       │   └── src/
│   │       │       ├── app/
│   │       │       │   └── app.cml
│   │       │       ├── components/
│   │       │       │   ├── coma/
│   │       │       │   │   └── coma.cml
│   │       │       │   ├── comb/
│   │       │       │   │   ├── comb.interface
│   │       │       │   │   ├── comb.web.cml
│   │       │       │   │   └── comb.wx.cml
│   │       │       │   └── comc/
│   │       │       │       └── comc.interface
│   │       │       ├── pages/
│   │       │       │   ├── pagea/
│   │       │       │   │   └── pagea.cml
│   │       │       │   └── pageb/
│   │       │       │       └── pageb.cml
│   │       │       └── router.config.json
│   │       ├── demoPlugin.js
│   │       ├── lib/
│   │       │   ├── amd.test.js
│   │       │   ├── amdbootstrap.global.test.js
│   │       │   ├── amdbootstrap.module.test.js
│   │       │   ├── amdwrapper.test.js
│   │       │   ├── handleScript.node.js
│   │       │   └── handleScript.test.js
│   │       ├── log.test.js
│   │       ├── mvvmGraphPlugin.test.js
│   │       ├── test.wxml
│   │       ├── uglifycss.test.js
│   │       └── uglifyjs.test.js
│   ├── mvvm-style-loader/
│   │   ├── index.js
│   │   ├── lib.js
│   │   ├── package.json
│   │   └── test/
│   │       └── index.test.js
│   ├── mvvm-template-parser/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── lib/
│   │   │   └── process-template.js
│   │   ├── package.json
│   │   └── test/
│   │       ├── index.test.js
│   │       └── process-template.test.js
│   ├── runtime-check/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── getDefines.js
│   │   ├── index.js
│   │   ├── package.json
│   │   ├── parsePlugins.js
│   │   └── test/
│   │       ├── index.test.js
│   │       └── interface.test
│   ├── url-loader/
│   │   ├── .babelrc
│   │   ├── .circleci/
│   │   │   └── config.yml
│   │   ├── .eslintignore
│   │   ├── .eslintrc
│   │   ├── .gitattributes
│   │   ├── .github/
│   │   │   ├── CODEOWNERS
│   │   │   ├── CONTRIBUTING.md
│   │   │   ├── ISSUE_TEMPLATE.md
│   │   │   └── PULL_REQUEST_TEMPLATE.md
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── codecov.yml
│   │   ├── commitlint.config.js
│   │   ├── package.json
│   │   └── src/
│   │       ├── cjs.js
│   │       ├── index.js
│   │       ├── options.json
│   │       └── utils/
│   │           └── normalizeFallback.js
│   ├── webpack-check-plugin/
│   │   ├── .eslintrc
│   │   ├── .gitignore
│   │   ├── index.js
│   │   ├── lib/
│   │   │   ├── check.js
│   │   │   └── tokensMap.js
│   │   ├── package.json
│   │   └── test/
│   │       └── check.test.js
│   └── webpack-liveload-middleware/
│       ├── .eslintrc
│       ├── .gitignore
│       ├── .npmignore
│       ├── LICENSE
│       ├── client.js
│       ├── helpers.js
│       ├── middleware.js
│       ├── package.json
│       └── test/
│           └── helpers.test.js
└── test/
    └── test.sh
Download .txt
SYMBOL INDEX (2185 symbols across 392 files)

FILE: packages/babel-plugin-chameleon-import/src/Plugin.js
  function camel2Dash (line 12) | function camel2Dash(_str) {
  function camel2Underline (line 18) | function camel2Underline(_str) {
  function winPath (line 24) | function winPath(path) {
  class Plugin (line 28) | class Plugin {
    method constructor (line 29) | constructor(libraryName, libraryDirectory, style, camel2DashComponentN...
    method getPluginState (line 45) | getPluginState(state) {
    method isInGlobalScope (line 53) | isInGlobalScope(path, name, pluginState) {
    method importMethod (line 58) | importMethod(methodName, file, pluginState) {
    method buildExpressionHandler (line 86) | buildExpressionHandler(node, props, path, state) {
    method buildDeclaratorHandler (line 99) | buildDeclaratorHandler(node, prop, path, state) {
    method ProgramEnter (line 110) | ProgramEnter(path, state) {
    method ProgramExit (line 118) | ProgramExit(path, state) {
    method Identifier (line 122) | Identifier(path, state) {
    method ImportDeclaration (line 136) | ImportDeclaration(path, state) {
    method CallExpression (line 158) | CallExpression(path, state) {
    method MemberExpression (line 182) | MemberExpression(path, state) {
    method Property (line 203) | Property(path, state) {
    method VariableDeclarator (line 208) | VariableDeclarator(path, state) {
    method ArrayExpression (line 213) | ArrayExpression(path, state) {
    method LogicalExpression (line 219) | LogicalExpression(path, state) {
    method ConditionalExpression (line 224) | ConditionalExpression(path, state) {
    method IfStatement (line 229) | IfStatement(path, state) {
    method ExpressionStatement (line 235) | ExpressionStatement(path, state) {
    method ReturnStatement (line 244) | ReturnStatement(path, state) {
    method ExportDefaultDeclaration (line 255) | ExportDefaultDeclaration(path, state) {
    method BinaryExpression (line 260) | BinaryExpression(path, state) {
    method NewExpression (line 265) | NewExpression(path, state) {

FILE: packages/babel-plugin-chameleon-import/src/index.js
  function _interopRequireDefault (line 12) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _default (line 14) | function _default({

FILE: packages/babel-plugin-chameleon-import/test/fixtures/array-expression/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments-identifier/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/as-arguments/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/binary-expression/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/conditions/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-name/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path-ignore/expected.js
  function _interopRequireDefault (line 13) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path/expected.js
  function _interopRequireDefault (line 11) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-direct/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/execute-member/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/export-import/expected.js
  function _interopRequireDefault (line 10) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/file-name/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-alias/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/import-css/expected.js
  function _interopRequireDefault (line 13) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/material-ui/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/member-expression/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/modules-false/expected.js
  function _interopRequireDefault (line 11) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries-hilojs/expected.js
  function _interopRequireDefault (line 9) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/multiple-words/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/new-expression/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/actual.js
  function App (line 5) | function App() {

FILE: packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function App (line 9) | function App() {

FILE: packages/babel-plugin-chameleon-import/test/fixtures/property/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-element/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/react-toolbox/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/return/actual.js
  function a (line 3) | function a() {
  function b (line 7) | function b(toast) {
  function c (line 11) | function c() {
  function d (line 16) | function d() {

FILE: packages/babel-plugin-chameleon-import/test/fixtures/return/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function a (line 7) | function a() {
  function b (line 11) | function b(toast) {
  function c (line 15) | function c() {
  function d (line 20) | function d() {

FILE: packages/babel-plugin-chameleon-import/test/fixtures/specifier-alias/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/use-multiple-times/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-declarator/expected.js
  function _interopRequireDefault (line 5) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...

FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/actual.js
  function App (line 5) | function App() {

FILE: packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/expected.js
  function _interopRequireDefault (line 7) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function App (line 11) | function App() {

FILE: packages/chameleon-css-loader/postcss/add-alipay-class.js
  function getSelector (line 9) | function getSelector (value) {

FILE: packages/chameleon-css-loader/postcss/cpx.js
  function toFixed (line 23) | function toFixed(number, precision) {

FILE: packages/chameleon-css-loader/proxy/proxyMiniapp.js
  function parse (line 7) | function parse (style) {
  function handle (line 28) | function handle(content) {

FILE: packages/chameleon-css-loader/proxy/proxyWeb.js
  function parse (line 16) | function parse (style) {
  function handle (line 37) | function handle(content, options) {

FILE: packages/chameleon-css-loader/transform/color.js
  constant COLOR_MAP (line 1) | const COLOR_MAP = {

FILE: packages/chameleon-css-loader/transform/weex.js
  constant HANDLE_MAP (line 9) | const HANDLE_MAP = {

FILE: packages/chameleon-errors-webpack-plugin/src/core/extractWebpackError.js
  function extractError (line 14) | function extractError (e) {
  function getOriginalErrorStack (line 26) | function getOriginalErrorStack(e) {
  function getFile (line 36) | function getFile (e) {
  function getOrigin (line 44) | function getOrigin (e) {

FILE: packages/chameleon-errors-webpack-plugin/src/core/formatErrors.js
  function formatErrors (line 11) | function formatErrors(errors, formatters, errorType) {

FILE: packages/chameleon-errors-webpack-plugin/src/core/transformErrors.js
  function processErrors (line 27) | function processErrors (errors, transformers) {

FILE: packages/chameleon-errors-webpack-plugin/src/formatters/defaultError.js
  function displayError (line 6) | function displayError(severity, error) {
  function removeLoaders (line 19) | function removeLoaders(file) {
  function isDefaultError (line 28) | function isDefaultError(error) {
  function format (line 35) | function format(errors, type) {

FILE: packages/chameleon-errors-webpack-plugin/src/formatters/eslintError.js
  function displayError (line 12) | function displayError(error) {
  function format (line 16) | function format(errors, type) {

FILE: packages/chameleon-errors-webpack-plugin/src/formatters/moduleNotFound.js
  function isRelative (line 4) | function isRelative (module) {
  function formatFileList (line 8) | function formatFileList (files) {
  function formatGroup (line 14) | function formatGroup (group) {
  function forgetToInstall (line 20) | function forgetToInstall (missingDependencies) {
  function dependenciesNotFound (line 30) | function dependenciesNotFound (dependencies) {
  function relativeModulesNotFound (line 42) | function relativeModulesNotFound (modules) {
  function groupModules (line 52) | function groupModules (errors) {
  function formatErrors (line 69) | function formatErrors (errors) {
  function format (line 86) | function format (errors) {

FILE: packages/chameleon-errors-webpack-plugin/src/friendly-errors-plugin.js
  class FriendlyErrorsWebpackPlugin (line 26) | class FriendlyErrorsWebpackPlugin {
    method constructor (line 28) | constructor(options) {
    method apply (line 39) | apply(compiler) {
    method clearConsole (line 92) | clearConsole() {
    method displaySuccess (line 98) | displaySuccess(stats) {
    method displayErrors (line 111) | displayErrors(errors, severity) {
  function extractErrorsFromStats (line 131) | function extractErrorsFromStats(stats, type) {
  function getCompileTime (line 142) | function getCompileTime(stats) {
  function isMultiStats (line 152) | function isMultiStats(stats) {
  function getMaxSeverityErrors (line 156) | function getMaxSeverityErrors(errors) {
  function getMaxInt (line 161) | function getMaxInt(collection, propertyName) {

FILE: packages/chameleon-errors-webpack-plugin/src/output.js
  class Debugger (line 8) | class Debugger {
    method constructor (line 10) | constructor () {
    method enable (line 16) | enable () {
    method capture (line 20) | capture () {
    method endCapture (line 25) | endCapture () {
    method log (line 31) | log () {
    method info (line 37) | info (message) {
    method note (line 44) | note (message) {
    method title (line 51) | title (severity, title, subtitle) {
    method clearConsole (line 77) | clearConsole () {
    method captureLogs (line 87) | captureLogs (fun) {
    method captureConsole (line 99) | captureConsole (args, method) {
  function capitalizeFirstLetter (line 108) | function capitalizeFirstLetter (string) {

FILE: packages/chameleon-errors-webpack-plugin/src/transformers/babelSyntax.js
  function cleanStackTrace (line 7) | function cleanStackTrace(message) {
  function cleanMessage (line 12) | function cleanMessage(message) {
  function isBabelSyntaxError (line 21) | function isBabelSyntaxError(e) {
  function transform (line 26) | function transform(error) {

FILE: packages/chameleon-errors-webpack-plugin/src/transformers/esLintError.js
  function isEslintError (line 3) | function isEslintError (e) {
  function transform (line 8) | function transform(error) {

FILE: packages/chameleon-errors-webpack-plugin/src/transformers/moduleNotFound.js
  constant TYPE (line 3) | const TYPE = 'module-not-found';
  function isModuleNotFoundError (line 5) | function isModuleNotFoundError (e) {
  function transform (line 13) | function transform(error) {

FILE: packages/chameleon-errors-webpack-plugin/src/utils/colors.js
  function formatTitle (line 5) | function formatTitle(severity, message) {
  function formatText (line 9) | function formatText(severity, message) {
  function bgColor (line 13) | function bgColor(severity) {
  function textColor (line 18) | function textColor(serverity) {
  function capitalizeFirstLetter (line 29) | function capitalizeFirstLetter(string) {

FILE: packages/chameleon-errors-webpack-plugin/src/utils/index.js
  function concat (line 7) | function concat() {
  function uniqueBy (line 20) | function uniqueBy(arr, fun) {

FILE: packages/chameleon-linter/checkers/script.js
  function getCompClassDef (line 46) | function getCompClassDef(ast) {
  function getInterfacePortionClassDef (line 119) | function getInterfacePortionClassDef(ast) {

FILE: packages/chameleon-linter/checkers/style.js
  function getCmlType (line 3) | function getCmlType(mediaParams = '') {
  function detectFloatProp (line 18) | function detectFloatProp(rule, result) {
  function isMediaNode (line 29) | function isMediaNode(node) {
  constant RULER_MAP (line 33) | const RULER_MAP = {
  constant SELECTOR_MAP (line 92) | const SELECTOR_MAP = {

FILE: packages/chameleon-linter/checkers/template/index.js
  class TemplateChecker (line 6) | class TemplateChecker {
    method constructor (line 17) | constructor(filePath = '', lintedResult = {}) {
    method parseAllParts (line 32) | parseAllParts() {
    method checkCustomizedComponents (line 41) | checkCustomizedComponents() {
    method checkTemplateAndScript (line 85) | checkTemplateAndScript() {
    method check (line 115) | check() {

FILE: packages/chameleon-linter/checkers/template/lib/js-ast-parser.js
  function getParseResults (line 4) | function getParseResults(astTree) {

FILE: packages/chameleon-linter/checkers/template/lib/json-ast-parser.js
  function getUsingComponents (line 6) | function getUsingComponents(jsonAst, filePath = '') {

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/customized-node.js
  class CustomizedNode (line 4) | class CustomizedNode {
    method constructor (line 5) | constructor(tag, lang = 'cml') {
    method attrs (line 11) | get attrs() {

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/rule-loader.js
  class RuleLoader (line 1) | class RuleLoader {
    method constructor (line 2) | constructor(rules) {
    method addSubscribers (line 9) | addSubscribers(rules) {
    method getRuleByName (line 21) | getRuleByName(ruleName) {

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/suspicious-node.js
  class SuspiciousNode (line 4) | class SuspiciousNode {
    method constructor (line 6) | constructor({name = '', rawValue = '', valuePos = [], lang = 'cml', sc...

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/index.js
  function getParseResults (line 12) | function getParseResults(templateAst, {usingComponents = [], platform = ...

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/lib/ast-tree-traversal.js
  function _clean (line 13) | function _clean() {
  function saveToCustomizedComponents (line 18) | function saveToCustomizedComponents(tag) {
  function saveToTextNodes (line 22) | function saveToTextNodes(node, scope) {
  function saveToPossibleAttrs (line 35) | function saveToPossibleAttrs(attrs) {
  function _travel (line 48) | function _travel(tag) {
  function travel (line 84) | function travel({root, lang = 'cml', platform = 'cml', usingComponents =...

FILE: packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/parse-single-expression.js
  function getStartPos (line 11) | function getStartPos(loc, isFakeBlock = false) {
  function getVarFromIdentifier (line 24) | function getVarFromIdentifier(node, isFakeBlock, method = false) {
  method Identifier (line 57) | Identifier(path) {
  method MemberExpression (line 62) | MemberExpression(path) {
  method LogicalExpression (line 70) | LogicalExpression(path) {
  method BinaryExpression (line 78) | BinaryExpression(path) {
  method LogicalExpression (line 86) | LogicalExpression(path) {
  method SequenceExpression (line 94) | SequenceExpression(path) {
  method ConditionalExpression (line 101) | ConditionalExpression(path) {
  method CallExpression (line 108) | CallExpression(path) {
  method ArrayExpression (line 118) | ArrayExpression(path) {
  method ObjectExpression (line 125) | ObjectExpression(path) {

FILE: packages/chameleon-linter/classes/message.js
  class Message (line 4) | class Message {
    method constructor (line 5) | constructor({ line = undefined, column = undefined, token = '', msg = ...

FILE: packages/chameleon-linter/linters/script.js
  function checkArrowFun (line 13) | function checkArrowFun(path) {
  function handleProperty (line 42) | function handleProperty(property, propertyName) {
  function getForbiddenGlobalTokens (line 58) | function getForbiddenGlobalTokens(platform = 'all') {
  function checkGlobal (line 74) | function checkGlobal(path, tokenList) {
  method ClassProperty (line 118) | ClassProperty(path) {
  method Program (line 122) | Program(path) {

FILE: packages/chameleon-linter/linters/template.js
  constant CML_METHODNAME_REGEX (line 12) | const CML_METHODNAME_REGEX = /(?:c-bind:|c-catch:)(\w+)/;
  constant VUE_METHODNAME_REGEX (line 13) | const VUE_METHODNAME_REGEX = /(?:v-on:|v-once:|@)(\w+)/;
  constant VUE_PROP_REGEX (line 14) | const VUE_PROP_REGEX = /(?:v-bind:|:)((?:\w|-)+)/;
  constant APP_ENTRANCE_FILENAME (line 16) | const APP_ENTRANCE_FILENAME = 'app.cml';
  function getCustimizedTags (line 23) | function getCustimizedTags(jsonAst, {platform = '', templatePath = ''}) {
  function getLintOptions (line 55) | function getLintOptions(params) {
  function addFakeComp (line 122) | function addFakeComp(options, comp) {
  function isAppEntranceFile (line 131) | function isAppEntranceFile(file) {

FILE: packages/chameleon-linter/test/checker/cml/script/include/src/someplatform-mis-class.js
  class ExtendInterfaceInterface (line 1) | class Method implements ExtendInterfaceInterface {
    method getMsg (line 2) | getMsg(msg) {

FILE: packages/chameleon-linter/test/checker/cml/script/include/src/someplatform-mis-prop.js
  class OnlyInterfaceInterface (line 1) | class Method implements OnlyInterfaceInterface {
    method getMsg (line 2) | getMsg(msg) {

FILE: packages/chameleon-linter/test/template/checker/template-lib-js.test.js
  function getParseResults (line 11) | async function getParseResults(filepath) {

FILE: packages/chameleon-linter/test/template/checker/template-lib-json.test.js
  function getParseResults (line 10) | async function getParseResults(filepath) {

FILE: packages/chameleon-linter/test/template/checker/template-lib-template.test.js
  function getParseResults (line 12) | async function getParseResults(filepath) {

FILE: packages/chameleon-linter/test/template/checker/template.test.js
  function getParseResults (line 9) | async function getParseResults(filepath) {
  function resortIssues (line 22) | function resortIssues(issues = []) {

FILE: packages/chameleon-linter/utils.js
  function _retrieveParts (line 127) | function _retrieveParts(interfaceFilePath) {

FILE: packages/chameleon-loader/src/cml-compile/runtime/common/util.js
  function copyProtoProperty (line 8) | function copyProtoProperty(obj = {}) {

FILE: packages/chameleon-loader/src/cml-compile/runtime/web/util.js
  function genConfig (line 7) | function genConfig(obj) {

FILE: packages/chameleon-loader/src/cml-compile/runtime/weex/util.js
  function genConfig (line 8) | function genConfig(obj) {

FILE: packages/chameleon-loader/src/cml-compile/runtime/wx/util.js
  function type (line 3) | function type(n) {
  function middleware (line 7) | function middleware(obj, map, lifecycle) {
  function lifecycleHandler (line 25) | function lifecycleHandler(obj, map, lifecycle) {
  function rename (line 58) | function rename(obj, oldKey, newKey) {
  function propsHandler (line 74) | function propsHandler(obj) {

FILE: packages/chameleon-loader/src/helpers.js
  function getRawRequest (line 31) | function getRawRequest (
  function ensureLoader (line 45) | function ensureLoader (lang) {
  function ensureBang (line 58) | function ensureBang (loader) {
  function resolveLoaders (line 66) | function resolveLoaders (
  function getRequire (line 140) | function getRequire (type, part, index, scoped) {
  function getWxmlRequest (line 144) | function getWxmlRequest(type) {
  function getWxmlRequestString (line 148) | function getWxmlRequestString(type) {
  function getImport (line 175) | function getImport (type, part, index, scoped) {
  function getNamedExports (line 182) | function getNamedExports (type, part, index, scoped) {
  function getRequestString (line 189) | function getRequestString (type, part, index, scoped) {
  function getRequireForSrc (line 213) | function getRequireForSrc (type, impt, scoped) {
  function getImportForSrc (line 217) | function getImportForSrc (type, impt, scoped) {
  function getNamedExportsForSrc (line 224) | function getNamedExportsForSrc (type, impt, scoped) {
  function getSrcRequestString (line 231) | function getSrcRequestString (type, impt, scoped) {
  function addCssModulesToLoader (line 238) | function addCssModulesToLoader (loader, part, index) {
  function buildCustomBlockLoaderString (line 264) | function buildCustomBlockLoaderString (attrs) {
  function stringifyLoaders (line 272) | function stringifyLoaders (loaders) {
  function getLoaderString (line 284) | function getLoaderString (type, part, index, scoped) {
  function getLangString (line 296) | function getLangString (type, { lang }) {
  function getRawLoaderString (line 304) | function getRawLoaderString (type, part, index, scoped) {
  function getSelectorString (line 367) | function getSelectorString (type, index) {

FILE: packages/chameleon-loader/src/interface-check/check.js
  method enter (line 24) | enter(path) {
  function getCheckCode (line 57) | function getCheckCode(interfaceCode, cmlCode, interfacePath, cmlPath, cm...

FILE: packages/chameleon-loader/src/interface-check/getScriptCode.js
  function getScriptCode (line 5) | function getScriptCode(loaderContext, cmlType, cmlCode, media, check = {...

FILE: packages/chameleon-loader/src/loader.js
  function ASTcompileTemplate (line 196) | function ASTcompileTemplate(templateContent, options = {}) {
  function miniAppRawComponentHandler (line 217) | function miniAppRawComponentHandler() {
  function miniAppHandler (line 245) | function miniAppHandler() {
  function emitJSFile (line 333) | function emitJSFile(jsFileName) {
  function webWeexHandler (line 368) | function webWeexHandler() {
  function getComponents (line 449) | function getComponents() {
  function toUpperCase (line 512) | function toUpperCase(content) {
  function prepareParseUsingComponents (line 531) | function prepareParseUsingComponents(originObj) {

FILE: packages/chameleon-loader/src/miniapp-script.js
  method enter (line 241) | enter(path) {

FILE: packages/chameleon-loader/src/runtime/check.js
  function isFunc (line 42) | function isFunc(target) {
  function is (line 46) | function is(source, type) {
  function checkProps (line 81) | function checkProps() {

FILE: packages/chameleon-loader/src/runtime/component-normalizer.js
  function normalizeComponent (line 7) | function normalizeComponent (

FILE: packages/chameleon-loader/src/selector.js
  function queryParse (line 67) | function queryParse(search) {

FILE: packages/chameleon-loader/src/utils/normalize.js
  constant IS_TEST (line 1) | const IS_TEST = !!process.env.VUE_LOADER_TEST

FILE: packages/chameleon-loader/test/src/cml-compile.test/runtime/all-properties.js
  function Person (line 1) | function Person(name,age){

FILE: packages/chameleon-miniapp-target/src/JsonpChunkTemplatePlugin.js
  class JsonpChunkTemplatePlugin (line 6) | class JsonpChunkTemplatePlugin {
    method apply (line 7) | apply(chunkTemplate) {

FILE: packages/chameleon-miniapp-target/src/JsonpHotUpdateChunkTemplatePlugin.js
  class JsonpHotUpdateChunkTemplatePlugin (line 6) | class JsonpHotUpdateChunkTemplatePlugin {
    method apply (line 7) | apply(hotUpdateChunkTemplate) {

FILE: packages/chameleon-miniapp-target/src/JsonpMainTemplatePlugin.js
  class JsonpMainTemplatePlugin (line 7) | class JsonpMainTemplatePlugin {
    method apply (line 9) | apply(mainTemplate) {

FILE: packages/chameleon-miniapp-target/src/JsonpTemplatePlugin.js
  class JsonpTemplatePlugin (line 8) | class JsonpTemplatePlugin {
    method apply (line 9) | apply(compiler) {

FILE: packages/chameleon-mixins/alipay-mixins.js
  function titleLize (line 20) | function titleLize (word) { // 将开头字母转化为大写

FILE: packages/chameleon-mixins/common.js
  function styleToObj (line 27) | function styleToObj(str) {

FILE: packages/chameleon-mixins/miniapp-utils/px2cpx.js
  function getViewportSize (line 6) | function getViewportSize() {

FILE: packages/chameleon-mixins/web-mixins.js
  method [_.inlineStatementEventProxy] (line 12) | [_.inlineStatementEventProxy](...args){
  method [_.modelEventProxyName] (line 35) | [_.modelEventProxyName](e,modelKey){
  method [_.eventProxyName] (line 40) | [_.eventProxyName](e, originFuncName,isStopBubble) {
  method [_.eventEmitName] (line 54) | [_.eventEmitName](eventKey, detail){
  method [_.styleParseName] (line 65) | [_.styleParseName](content) {
  method [_.styleProxyName] (line 78) | [_.styleProxyName](content,options) {
  method [_.mergeStyleName] (line 81) | [_.mergeStyleName](...args) {
  function getNewEvent (line 87) | function getNewEvent(e) {

FILE: packages/chameleon-mixins/web-utils/px2cpx.js
  function getViewportSize (line 4) | function getViewportSize() {

FILE: packages/chameleon-mixins/weex-mixins.js
  method [_.inlineStatementEventProxy] (line 13) | [_.inlineStatementEventProxy](...args) {
  method [_.modelEventProxyName] (line 42) | [_.modelEventProxyName](e, modelKey) {
  method [_.eventProxyName] (line 46) | [_.eventProxyName](e, originFuncName,isStopBubble) {
  method [_.eventEmitName] (line 60) | [_.eventEmitName](eventKey, detail) {
  method [_.styleParseName] (line 71) | [_.styleParseName](content) {
  method [_.styleProxyName] (line 75) | [_.styleProxyName](content) {
  method [_.mergeStyleName] (line 98) | [_.mergeStyleName](...args) {
  method [_.weexClassProxy] (line 102) | [_.weexClassProxy](value) {
  function getNewEvent (line 119) | function getNewEvent(e) {

FILE: packages/chameleon-mixins/wx-alipay-common-mixins.js
  method [_.inlineStatementEventProxy] (line 25) | [_.inlineStatementEventProxy](e) {
  method [_.modelEventProxyName] (line 51) | [_.modelEventProxyName](e) {
  method [_.eventProxyName] (line 59) | [_.eventProxyName](e) {
  method [_.styleParseName] (line 73) | [_.styleParseName](content) {
  method [_.mergeStyleName] (line 84) | [_.mergeStyleName](...args) {
  method [_.animationProxy] (line 87) | [_.animationProxy](...args) {
  function getNewEvent (line 108) | function getNewEvent(e) {

FILE: packages/chameleon-template-parse/src/common/process-template.js
  function advance (line 156) | function advance (n) {
  function parseStartTag (line 160) | function parseStartTag () {
  function parseEndTag (line 192) | function parseEndTag() {
  method enter (line 307) | enter(path) {
  method enter (line 379) | enter(path) {
  method enter (line 411) | enter(path) {
  method enter (line 520) | enter(path) {
  method enter (line 552) | enter(path) {
  method enter (line 611) | enter(path) {

FILE: packages/chameleon-template-parse/src/common/utils.js
  method enter (line 184) | enter(path) {

FILE: packages/chameleon-template-parse/src/compile-template-cml.js
  function compileWebTemplate (line 63) | function compileWebTemplate(source, type, options) {
  function compileWeexTemplate (line 94) | function compileWeexTemplate(source, type, options) {
  function compileWxTemplate (line 122) | function compileWxTemplate(source, type, options) {
  function compileQqTemplate (line 159) | function compileQqTemplate(source, type, options) {
  function compileAliPayTemplate (line 196) | function compileAliPayTemplate(source, type, options) {
  function compileBaiduTemplate (line 232) | function compileBaiduTemplate(source, type, options) {
  function compileTtTemplate (line 268) | function compileTtTemplate(source, type, options) {

FILE: packages/chameleon-template-parse/src/compile-template-vue.js
  function compileWebTemplate (line 65) | function compileWebTemplate(source, type, options) {
  function compileWeexTemplate (line 94) | function compileWeexTemplate(source, type, options) {
  function compileWxTemplate (line 121) | function compileWxTemplate(source, type, options) {
  function compileQqTemplate (line 149) | function compileQqTemplate(source, type, options) {
  function compileAliPayTemplate (line 177) | function compileAliPayTemplate(source, type, options) {
  function compileBaiduTemplate (line 203) | function compileBaiduTemplate(source, type, options) {
  function compileTtTemplate (line 229) | function compileTtTemplate(source, type, options) {

FILE: packages/chameleon-template-parse/test/parser/index.cml.test.js
  function compileTemplate (line 39) | function compileTemplate(source, type, options, callback) {

FILE: packages/chameleon-template-parse/test/parser/index.vue.test.js
  function compileTemplate (line 38) | function compileTemplate(source, type, options, callback) {

FILE: packages/chameleon-templates/server/fisdata/FISData.class.php
  class FISData (line 3) | abstract class FISData {
    method getDatatype (line 7) | public function getDatatype() {
    method existDataFile (line 11) | protected function existDataFile($id) {
    method getId (line 22) | protected function getId($tmpl) {
    method getCookieId (line 33) | public function getCookieId() {
    method getData (line 51) | public function getData($tmpl) {}
    method getFile (line 58) | protected function getFile($tmpl) {
    method getDataList (line 82) | public function getDataList($tmpl) {
    method get (line 96) | public function get($post) {
    method save (line 105) | public function save($post) {
    method getCurrentFilePath (line 121) | public function getCurrentFilePath($tmpl) {

FILE: packages/chameleon-templates/server/fisdata/Manager.class.php
  class Manager (line 6) | class Manager {
    method __construct (line 15) | public function __construct($data_arr, $tmpl) {
    method getDefault (line 20) | public function getDefault() {
    method getCurrentDatatype (line 32) | public function getCurrentDatatype() {
    method getRenderData (line 40) | public function getRenderData() {
    method render (line 52) | public function render() {

FILE: packages/chameleon-templates/server/fisdata/TestData.class.php
  class TestData (line 12) | class TestData {
    method register (line 70) | public static function register(FISData $data_instance) {
    method init (line 74) | public static function init() {
    method renderHelper (line 96) | public static function renderHelper($template_instance, $candidate_tmp...
    method router (line 123) | public static function router() {
    method doAction (line 147) | private static function doAction($action) {

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/CommonHelper.php
  class CommonHelper (line 6) | class CommonHelper
    method makeDir (line 8) | public static function makeDir($dirPath)
    method json_format (line 19) | public static function json_format($json)
    method json_Html_format (line 98) | public static function json_Html_format($json)
    method remove_redundant_backslash (line 181) | public static function remove_redundant_backslash($json) //ɾ��������js...
    method array_utf8_encode (line 192) | public static function array_utf8_encode($arrSrc)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/adocParser.php
  class AdocParser (line 11) | class AdocParser
    method getJsonNotes (line 15) | public function getJsonNotes($adocFilePath)
    method getPhpNotes (line 33) | public function getPhpNotes($adocFilePath)
    method changeArrowInNote (line 57) | public function changeArrowInNote($note)
    method changeArrowBack (line 101) | function changeArrowBack($value)
    method changeCommaInNote (line 111) | public function changeCommaInNote($note)
    method array_all (line 159) | public function array_all($key, $arrSrc, $parentKey, &$posNote)
    method getJsonBlock (line 258) | public function getJsonBlock($adocPath)
    method getDefineBlock (line 267) | public function getDefineBlock($adocPath){
    method getUrlBlock (line 273) | public function getUrlBlock($adocPath)
    method getAdocTypeBlock (line 284) | public function getAdocTypeBlock($adocPath)
    method getRefPathArr (line 293) | public function getRefPathArr($adocPath)
    method getParentAdocPath (line 299) | public function getParentAdocPath($adocPath)
    method getAddonArr (line 308) | public function getAddonArr($adocPath)
    method getDataBlock (line 324) | private function getDataBlock($adocPath,$blockName)
    method pushJsonPos (line 389) | private function pushJsonPos($arrPos,$key)
    method popJsonPos (line 417) | private function popJsonPos($arrPos)
    method pushArrIndex (line 457) | private function pushArrIndex($arrIndex,$key)
    method popArrIndex (line 468) | private function popArrIndex($arrIndex)
    method getTopArrIndex (line 499) | private function getTopArrIndex($arrIndex)
    method getJsonNewAdocArray (line 520) | public function getJsonNewAdocArray($jsonFileContent)
    method getPhpNewAdocArray (line 712) | public function getPhpNewAdocArray($jsonFileContent)
    method getJsonInheritNewAdoc (line 885) | public function getJsonInheritNewAdoc($adocFilePath)
    method getPhpInheritNewAdoc (line 916) | public function getPhpInheritNewAdoc($adocFilePath)
    method getInheritResult (line 951) | public function getInheritResult($parentNewAdocArray, $childNewAdocArray)
    method getParentContent (line 985) | public function getParentContent($adocFilePath)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genArray.php
  class genArray (line 4) | class genArray
    method __construct (line 6) | public function __construct()
    method getJsonInheritStandArray (line 11) | public function getJsonInheritStandArray($jsonFilePath, $adocFilePath)
    method getPhpInheritStandArray (line 43) | public function getPhpInheritStandArray($jsonFilePath, $adocFilePath)
    method getInheritStand (line 74) | public function getInheritStand($parentStandArr, $childStandArr)
    method getJsonArray (line 106) | public function getJsonArray($jsonFilePath)
    method getPhpArray (line 137) | public function getPhpArray($jsonFilePath)
    method gen_JsonData (line 179) | function gen_JsonData($pathAdoc,$keyStartAdoc="main")
    method reduce_string (line 221) | function reduce_string($str)
    method trim_string (line 251) | function trim_string($filePath,$split = "")
    method process_json (line 281) | function process_json($line)
    method sbc2dbc (line 347) | function sbc2dbc($str)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genCase.php
  class genCase (line 6) | class genCase
    method __construct (line 13) | public function __construct($standJson,$arrC)
    method getCase (line 21) | public function getCase()
    method getHtmlCase (line 304) | public function getHtmlCase($srcArrReCase)
    method getRandomInfoArray (line 577) | public function getRandomInfoArray()
    method changeCommaBack (line 662) | function changeCommaBack($value)
    method dfs (line 670) | function dfs(&$arr,$substr,&$index,$flag,&$i)
    method changeIndex (line 707) | function changeIndex($tmpArrNormal,$n,$keys)
    method searchIndex (line 724) | function searchIndex(&$count, &$Arr, $ArrNormal, $tmpArr, $parent, $n)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genConf.php
  class Config (line 2) | class Config{

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genFile.php
  class genFile (line 6) | class genFile
    method __construct (line 9) | public function __construct($arr)
    method getFISFile (line 15) | public function getFISFile($strUrl)
    method getFISHtmlFile (line 57) | public function getFISHtmlFile($strUrl)
    method getFile (line 154) | public function getFile()

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genInterface.php
  class genInterface (line 9) | class genInterface
    method __construct (line 13) | public function __construct()
    method genCaseData (line 37) | public function genCaseData($adocFileContent,$asyncBasePath="")
    method genJsonCaseData (line 56) | public function genJsonCaseData($adocFileContent,$asyncBasePath)
    method genPhpCaseData (line 95) | public function genPhpCaseData($adocFileContent,$asyncBasePath)
    method saveAsyncFileNames (line 143) | private function saveAsyncFileNames($caseRelationArray,$mainFisFileName)
    method saveHtmlAsyncFileNames (line 171) | private function saveHtmlAsyncFileNames($caseRelationArray,$mainFisFil...
    method getAsyncLocalAdocPaths (line 200) | private function getAsyncLocalAdocPaths($asyncPathArr,$asyncBasePath="")
    method translatePhpAdocToCase (line 228) | private function translatePhpAdocToCase($phpAdocFilePath)
    method translateJsonAdocToCase (line 318) | private function translateJsonAdocToCase($jsonAdocFilePath)
    method url_file_exists (line 474) | private function url_file_exists($url)
    method getCaseData (line 506) | public function getCaseData($url = "")
    method getHtmlCaseData (line 534) | public function getHtmlCaseData($url = "")
    method getLocalFilePath (line 556) | private function getLocalFilePath($url)
    method getAsyncFileArray (line 581) | private function getAsyncFileArray($dataPath)
    method getHtmlAsyncFileArray (line 608) | private function getHtmlAsyncFileArray($dataPath)
    method setPath (line 638) | public function setPath($caseFilePath = "")
    method adjustCaseOrder (line 657) | public function adjustCaseOrder($arrCase)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genLog.php
  class Json_Log (line 2) | class Json_Log
    method __construct (line 21) | private function __construct($logFile)
    method init (line 26) | public static function init($logFile="")
    method debug (line 43) | public static function debug($str,$file="",$line="")
    method trace (line 48) | public static function trace($str,$file="",$line="")
    method notice (line 53) | public static function notice($str,$file="",$line="")
    method warning (line 58) | public static function warning($str,$file="",$line="")
    method fatal (line 63) | public static function fatal($str,$file="",$line="")
    method writeLog (line 68) | public static function writeLog($intLevel,$str,$file,$line)

FILE: packages/chameleon-templates/server/fisdata/libs/JsonPro/genValue.php
  class genValue (line 6) | class genValue
    method __construct (line 10) | public function __construct($nt,$ty)
    method getValue (line 20) | public function getValue($value)

FILE: packages/chameleon-templates/server/fisdata/libs/Util.class.php
  class Util (line 3) | class Util {
    method normalizePath (line 17) | public static function normalizePath($path) {
    method filter (line 41) | public static function filter($file, $include = null, $exclude = null,...
    method find (line 56) | public static function find($path, $include = null, $exclude = null, $...

FILE: packages/chameleon-templates/server/fisdata/plugin/ChameleonData.class.php
  class ChameleonData (line 3) | class ChameleonData {
    method __construct (line 4) | public function __construct() {
    method getData (line 7) | public function getData($file) {
    method getProjectName (line 18) | public function getProjectName() {
    method getMockContent (line 25) | public function getMockContent() {

FILE: packages/chameleon-templates/server/fisdata/plugin/FISADOCData.class.php
  class FISADOCData (line 3) | class FISADOCData extends FISData {
    method __construct (line 7) | public function __construct() {
    method getId (line 12) | protected function getId($tmpl) {
    method getFile (line 25) | protected function getFile($tmpl) {
    method parseAdocFile (line 31) | private function parseAdocFile($filepath) {
    method getData (line 39) | public function getData($tmpl) {
    method fetchRemoteData (line 61) | public function fetchRemoteData($tmpl_id) {
    method getDataList (line 64) | public function getDataList($tmpl) {
    method save (line 80) | public function save($post) {

FILE: packages/chameleon-templates/server/fisdata/plugin/FISJSONData.class.php
  class FISJSONData (line 3) | class FISJSONData extends FISData {
    method __construct (line 4) | public function __construct() {
    method getData (line 8) | public function getData($tmpl) {

FILE: packages/chameleon-templates/server/fisdata/plugin/FISPHPData.class.php
  class FISPHPData (line 3) | class FISPHPData extends FISData {
    method __construct (line 4) | public function __construct() {
    method getData (line 8) | public function getData($tmpl) {

FILE: packages/chameleon-templates/server/index.php
  class CITpl (line 9) | class CITpl {
    method display (line 11) | public function display($candidate_tmpl){
    method assign (line 20) | public function assign( $data ){
    method object_to_array (line 23) | function object_to_array($object)
  function fis_debug_render_smarty (line 47) | function fis_debug_render_smarty($tpl = null, $data = array()) {
  function fis_debug_template_rewrite_rule (line 76) | function fis_debug_template_rewrite_rule($rewrite, $url, $root, $matches) {
  function fis_debug_render_php_older (line 85) | function fis_debug_render_php_older($tpl = null, $data = array()){
  function fis_debug_render_php (line 117) | function fis_debug_render_php($tpl = null, $data = array()) {

FILE: packages/chameleon-templates/server/rewrite/Rewrite.php
  class Rewrite (line 3) | class Rewrite{
    method header (line 74) | public static function header($code = 200, $status = null) {
    method addRewriteRule (line 91) | public static function addRewriteRule($type, $callback){
    method setRoot (line 98) | public static function setRoot($root){
    method getRoot (line 102) | public static function getRoot(){
    method padString (line 106) | private static function padString($path, $matches) {
    method match (line 121) | public static function match($url, &$matches = null){
    method _match (line 155) | private static function _match($rule, $root, $url, &$matches = null){
    method includePhp (line 198) | private static function includePhp($file, $matches){
    method getConfigFiles (line 203) | private static function  getConfigFiles($path){

FILE: packages/chameleon-templates/server/smarty/Smarty.class.php
  class Smarty (line 107) | class Smarty extends Smarty_Internal_TemplateBase {
    method __construct (line 610) | public function __construct()
    method __destruct (line 635) | public function __destruct()
    method __clone (line 643) | public function __clone()
    method __get (line 658) | public function __get($name)
    method __set (line 684) | public function __set($name, $value)
    method templateExists (line 707) | public function templateExists($resource_name)
    method getGlobal (line 725) | public function getGlobal($varname = null)
    method clearAllCache (line 749) | function clearAllCache($exp_time = null, $type = null)
    method clearCache (line 767) | public function clearCache($template_name, $cache_id = null, $compile_...
    method enableSecurity (line 782) | public function enableSecurity($security_class = null)
    method disableSecurity (line 808) | public function disableSecurity()
    method setTemplateDir (line 821) | public function setTemplateDir($template_dir)
    method addTemplateDir (line 840) | public function addTemplateDir($template_dir, $key=null)
    method getTemplateDir (line 872) | public function getTemplateDir($index=null)
    method setConfigDir (line 887) | public function setConfigDir($config_dir)
    method addConfigDir (line 905) | public function addConfigDir($config_dir, $key=null)
    method getConfigDir (line 938) | public function getConfigDir($index=null)
    method setPluginsDir (line 953) | public function setPluginsDir($plugins_dir)
    method addPluginsDir (line 970) | public function addPluginsDir($plugins_dir)
    method getPluginsDir (line 999) | public function getPluginsDir()
    method setCompileDir (line 1010) | public function setCompileDir($compile_dir)
    method getCompileDir (line 1024) | public function getCompileDir()
    method setCacheDir (line 1035) | public function setCacheDir($cache_dir)
    method getCacheDir (line 1049) | public function getCacheDir()
    method setDefaultModifiers (line 1060) | public function setDefaultModifiers($modifiers)
    method addDefaultModifiers (line 1072) | public function addDefaultModifiers($modifiers)
    method getDefaultModifiers (line 1088) | public function getDefaultModifiers()
    method setAutoloadFilters (line 1101) | public function setAutoloadFilters($filters, $type=null)
    method addAutoloadFilters (line 1119) | public function addAutoloadFilters($filters, $type=null)
    method getAutoloadFilters (line 1146) | public function getAutoloadFilters($type=null)
    method getDebugTemplate (line 1160) | public function getDebugTemplate()
    method setDebugTemplate (line 1172) | public function setDebugTemplate($tpl_name)
    method createTemplate (line 1192) | public function createTemplate($template, $cache_id = null, $compile_i...
    method loadPlugin (line 1258) | public function loadPlugin($plugin_name, $check = true)
    method compileAllTemplates (line 1326) | public function compileAllTemplates($extention = '.tpl', $force_compil...
    method compileAllConfig (line 1340) | public function compileAllConfig($extention = '.conf', $force_compile ...
    method clearCompiledTemplate (line 1353) | public function clearCompiledTemplate($resource_name = null, $compile_...
    method getTags (line 1365) | public function getTags(Smarty_Internal_Template $template)
    method testInstall (line 1376) | public function testInstall(&$errors=null)
    method mutingErrorHandler (line 1388) | public static function mutingErrorHandler($errno, $errstr, $errfile, $...
    method muteExpectedErrors (line 1440) | public static function muteExpectedErrors()
    method unmuteExpectedErrors (line 1472) | public static function unmuteExpectedErrors()
  class SmartyException (line 1490) | class SmartyException extends Exception {
    method __construct (line 1492) | public function __construct($message) {
  class SmartyCompilerException (line 1501) | class SmartyCompilerException extends SmartyException  {
  function smartyAutoload (line 1507) | function smartyAutoload($class)

FILE: packages/chameleon-templates/server/smarty/SmartyBC.class.php
  class SmartyBC (line 42) | class SmartyBC extends Smarty {
    method __construct (line 55) | public function __construct(array $options=array())
    method assign_by_ref (line 68) | public function assign_by_ref($tpl_var, &$value)
    method append_by_ref (line 80) | public function append_by_ref($tpl_var, &$value, $merge = false)
    method clear_assign (line 90) | public function clear_assign($tpl_var)
    method register_function (line 103) | public function register_function($function, $function_impl, $cacheabl...
    method unregister_function (line 113) | public function unregister_function($function)
    method register_object (line 127) | public function register_object($object, $object_impl, $allowed = arra...
    method unregister_object (line 139) | public function unregister_object($object)
    method register_block (line 152) | public function register_block($block, $block_impl, $cacheable=true, $...
    method unregister_block (line 162) | public function unregister_block($block)
    method register_compiler_function (line 174) | public function register_compiler_function($function, $function_impl, ...
    method unregister_compiler_function (line 184) | public function unregister_compiler_function($function)
    method register_modifier (line 195) | public function register_modifier($modifier, $modifier_impl)
    method unregister_modifier (line 205) | public function unregister_modifier($modifier)
    method register_resource (line 216) | public function register_resource($type, $functions)
    method unregister_resource (line 226) | public function unregister_resource($type)
    method register_prefilter (line 237) | public function register_prefilter($function)
    method unregister_prefilter (line 247) | public function unregister_prefilter($function)
    method register_postfilter (line 258) | public function register_postfilter($function)
    method unregister_postfilter (line 268) | public function unregister_postfilter($function)
    method register_outputfilter (line 279) | public function register_outputfilter($function)
    method unregister_outputfilter (line 289) | public function unregister_outputfilter($function)
    method load_filter (line 300) | public function load_filter($type, $name)
    method clear_cache (line 314) | public function clear_cache($tpl_file = null, $cache_id = null, $compi...
    method clear_all_cache (line 325) | public function clear_all_cache($exp_time = null)
    method is_cached (line 338) | public function is_cached($tpl_file, $cache_id = null, $compile_id = n...
    method clear_all_assign (line 346) | public function clear_all_assign()
    method clear_compiled_tpl (line 361) | public function clear_compiled_tpl($tpl_file = null, $compile_id = nul...
    method template_exists (line 372) | public function template_exists($tpl_file)
    method get_template_vars (line 383) | public function get_template_vars($name=null)
    method get_config_vars (line 394) | public function get_config_vars($name=null)
    method config_load (line 406) | public function config_load($file, $section = null, $scope = 'global')
    method get_registered_object (line 417) | public function get_registered_object($name)
    method clear_config (line 427) | public function clear_config($var = null)
    method trigger_error (line 438) | public function trigger_error($error_msg, $error_type = E_USER_WARNING)
  function smarty_php_tag (line 454) | function smarty_php_tag($params, $content, $template, &$repeat)

FILE: packages/chameleon-templates/server/smarty/plugins/block.textformat.php
  function smarty_block_textformat (line 35) | function smarty_block_textformat($params, $content, $template, &$repeat)

FILE: packages/chameleon-templates/server/smarty/plugins/function.counter.php
  function smarty_function_counter (line 22) | function smarty_function_counter($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.cycle.php
  function smarty_function_cycle (line 46) | function smarty_function_cycle($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.fetch.php
  function smarty_function_fetch (line 23) | function smarty_function_fetch($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_checkboxes.php
  function smarty_function_html_checkboxes (line 45) | function smarty_function_html_checkboxes($params, $template)
  function smarty_function_html_checkboxes_output (line 170) | function smarty_function_html_checkboxes_output($name, $value, $output, ...

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_image.php
  function smarty_function_html_image (line 37) | function smarty_function_html_image($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_options.php
  function smarty_function_html_options (line 36) | function smarty_function_html_options($params, $template)
  function smarty_function_html_options_optoutput (line 149) | function smarty_function_html_options_optoutput($key, $value, $selected,...
  function smarty_function_html_options_optgroup (line 183) | function smarty_function_html_options_optgroup($key, $values, $selected,...

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_radios.php
  function smarty_function_html_radios (line 45) | function smarty_function_html_radios($params, $template)
  function smarty_function_html_radios_output (line 157) | function smarty_function_html_radios_output($name, $value, $output, $sel...

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_select_date.php
  function smarty_function_html_select_date (line 54) | function smarty_function_html_select_date($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_select_time.php
  function smarty_function_html_select_time (line 34) | function smarty_function_html_select_time($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.html_table.php
  function smarty_function_html_table (line 50) | function smarty_function_html_table($params, $template)
  function smarty_function_html_table_cycle (line 166) | function smarty_function_html_table_cycle($name, $var, $no)

FILE: packages/chameleon-templates/server/smarty/plugins/function.mailto.php
  function smarty_function_mailto (line 51) | function smarty_function_mailto($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/function.math.php
  function smarty_function_math (line 24) | function smarty_function_math($params, $template)

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.capitalize.php
  function smarty_modifier_capitalize (line 25) | function smarty_modifier_capitalize($string, $uc_digits = false, $lc_res...

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.date_format.php
  function smarty_modifier_date_format (line 29) | function smarty_modifier_date_format($string, $format=null, $default_dat...

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.debug_print_var.php
  function smarty_modifier_debug_print_var (line 22) | function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.escape.php
  function smarty_modifier_escape (line 24) | function smarty_modifier_escape($string, $esc_type = 'html', $char_set =...

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.regex_replace.php
  function smarty_modifier_regex_replace (line 24) | function smarty_modifier_regex_replace($string, $search, $replace)
  function _smarty_regex_replace_check (line 41) | function _smarty_regex_replace_check($search)

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.replace.php
  function smarty_modifier_replace (line 23) | function smarty_modifier_replace($string, $search, $replace)

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.spacify.php
  function smarty_modifier_spacify (line 21) | function smarty_modifier_spacify($string, $spacify_char = ' ')

FILE: packages/chameleon-templates/server/smarty/plugins/modifier.truncate.php
  function smarty_modifier_truncate (line 27) | function smarty_modifier_truncate($string, $length = 80, $etc = '...', $...

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.cat.php
  function smarty_modifiercompiler_cat (line 25) | function smarty_modifiercompiler_cat($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.count_characters.php
  function smarty_modifiercompiler_count_characters (line 21) | function smarty_modifiercompiler_count_characters($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.count_paragraphs.php
  function smarty_modifiercompiler_count_paragraphs (line 22) | function smarty_modifiercompiler_count_paragraphs($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.count_sentences.php
  function smarty_modifiercompiler_count_sentences (line 22) | function smarty_modifiercompiler_count_sentences($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.count_words.php
  function smarty_modifiercompiler_count_words (line 21) | function smarty_modifiercompiler_count_words($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.default.php
  function smarty_modifiercompiler_default (line 21) | function smarty_modifiercompiler_default ($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.escape.php
  function smarty_modifiercompiler_escape (line 26) | function smarty_modifiercompiler_escape($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.from_charset.php
  function smarty_modifiercompiler_from_charset (line 20) | function smarty_modifiercompiler_from_charset($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.indent.php
  function smarty_modifiercompiler_indent (line 21) | function smarty_modifiercompiler_indent($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.lower.php
  function smarty_modifiercompiler_lower (line 22) | function smarty_modifiercompiler_lower($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.noprint.php
  function smarty_modifiercompiler_noprint (line 20) | function smarty_modifiercompiler_noprint($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.string_format.php
  function smarty_modifiercompiler_string_format (line 21) | function smarty_modifiercompiler_string_format($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.strip.php
  function smarty_modifiercompiler_strip (line 25) | function smarty_modifiercompiler_strip($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.strip_tags.php
  function smarty_modifiercompiler_strip_tags (line 21) | function smarty_modifiercompiler_strip_tags($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.to_charset.php
  function smarty_modifiercompiler_to_charset (line 20) | function smarty_modifiercompiler_to_charset($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.unescape.php
  function smarty_modifiercompiler_unescape (line 20) | function smarty_modifiercompiler_unescape($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.upper.php
  function smarty_modifiercompiler_upper (line 21) | function smarty_modifiercompiler_upper($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/modifiercompiler.wordwrap.php
  function smarty_modifiercompiler_wordwrap (line 21) | function smarty_modifiercompiler_wordwrap($params, $compiler)

FILE: packages/chameleon-templates/server/smarty/plugins/outputfilter.trimwhitespace.php
  function smarty_outputfilter_trimwhitespace (line 20) | function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Tem...

FILE: packages/chameleon-templates/server/smarty/plugins/shared.escape_special_chars.php
  function smarty_function_escape_special_chars (line 21) | function smarty_function_escape_special_chars($string)
  function smarty_function_escape_special_chars (line 40) | function smarty_function_escape_special_chars($string)

FILE: packages/chameleon-templates/server/smarty/plugins/shared.literal_compiler_param.php
  function smarty_literal_compiler_param (line 19) | function smarty_literal_compiler_param($params, $index, $default=null)

FILE: packages/chameleon-templates/server/smarty/plugins/shared.make_timestamp.php
  function smarty_make_timestamp (line 17) | function smarty_make_timestamp($string)

FILE: packages/chameleon-templates/server/smarty/plugins/shared.mb_str_replace.php
  function smarty_mb_str_replace (line 20) | function smarty_mb_str_replace($search, $replace, $subject, &$count=0)

FILE: packages/chameleon-templates/server/smarty/plugins/shared.mb_unicode.php
  function smarty_mb_to_unicode (line 18) | function smarty_mb_to_unicode($string, $encoding=null) {
  function smarty_mb_from_unicode (line 36) | function smarty_mb_from_unicode($unicode, $encoding=null) {

FILE: packages/chameleon-templates/server/smarty/plugins/shared.mb_wordwrap.php
  function smarty_mb_wordwrap (line 22) | function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)

FILE: packages/chameleon-templates/server/smarty/plugins/variablefilter.htmlspecialchars.php
  function smarty_variablefilter_htmlspecialchars (line 16) | function smarty_variablefilter_htmlspecialchars($source, $smarty)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_cacheresource.php
  class Smarty_CacheResource (line 16) | abstract class Smarty_CacheResource {
    method populate (line 38) | public abstract function populate(Smarty_Template_Cached $cached, Smar...
    method populateTimestamp (line 46) | public abstract function populateTimestamp(Smarty_Template_Cached $cac...
    method process (line 55) | public abstract function process(Smarty_Internal_Template $_template, ...
    method writeCachedContent (line 64) | public abstract function writeCachedContent(Smarty_Internal_Template $...
    method getCachedContent (line 72) | public function getCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 89) | public abstract function clearAll(Smarty $smarty, $exp_time=null);
    method clear (line 101) | public abstract function clear(Smarty $smarty, $resource_name, $cache_...
    method locked (line 104) | public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
    method hasLock (line 120) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 126) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 132) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method load (line 146) | public static function load(Smarty $smarty, $type = null)
    method invalidLoadedCache (line 187) | public static function invalidLoadedCache(Smarty $smarty)
  class Smarty_Template_Cached (line 207) | class Smarty_Template_Cached {
    method __construct (line 285) | public function __construct(Smarty_Internal_Template $_template)
    method write (line 364) | public function write(Smarty_Internal_Template $_template, $content)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_cacheresource_custom.php
  class Smarty_CacheResource_Custom (line 16) | abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
    method fetch (line 29) | protected abstract function fetch($id, $name, $cache_id, $compile_id, ...
    method fetchTimestamp (line 43) | protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
    method save (line 59) | protected abstract function save($id, $name, $cache_id, $compile_id, $...
    method delete (line 70) | protected abstract function delete($name, $cache_id, $compile_id, $exp...
    method populate (line 79) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 94) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 115) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 147) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 166) | public function clearAll(Smarty $smarty, $exp_time=null)
    method clear (line 182) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 195) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 214) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 229) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_cacheresource_keyvaluestore.php
  class Smarty_CacheResource_KeyValueStore (line 34) | abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheRe...
    method populate (line 54) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 70) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 87) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 114) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 131) | public function clearAll(Smarty $smarty, $exp_time=null)
    method clear (line 154) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method getTemplateUid (line 171) | protected function getTemplateUid(Smarty $smarty, $resource_name, $cac...
    method sanitize (line 200) | protected function sanitize($string)
    method fetch (line 222) | protected function fetch($cid, $resource_name = null, $cache_id = null...
    method addMetaTimestamp (line 246) | protected function addMetaTimestamp(&$content)
    method getMetaTimestamp (line 259) | protected function getMetaTimestamp(&$content)
    method invalidate (line 277) | protected function invalidate($cid = null, $resource_name = null, $cac...
    method getLatestInvalidationTimestamp (line 314) | protected function getLatestInvalidationTimestamp($cid, $resource_name...
    method listInvalidationKeys (line 347) | protected function listInvalidationKeys($cid, $resource_name = null, $...
    method hasLock (line 393) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 406) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 419) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method read (line 432) | protected abstract function read(array $keys);
    method write (line 441) | protected abstract function write(array $keys, $expire=null);
    method delete (line 449) | protected abstract function delete(array $keys);
    method purge (line 456) | protected function purge()

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_config_source.php
  class Smarty_Config_Source (line 22) | class Smarty_Config_Source extends Smarty_Template_Source {
    method __construct (line 34) | public function __construct(Smarty_Resource $handler, Smarty $smarty, ...
    method __set (line 57) | public function __set($property_name, $value)
    method __get (line 77) | public function __get($property_name)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_cacheresource_file.php
  class Smarty_Internal_CacheResource_File (line 19) | class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
    method populate (line 28) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 74) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 87) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 100) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 119) | public function clearAll(Smarty $smarty, $exp_time = null)
    method clear (line 134) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 230) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 247) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 259) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_append.php
  class Smarty_Internal_Compile_Append (line 18) | class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Ass...
    method compile (line 28) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_block.php
  class Smarty_Internal_Compile_Block (line 19) | class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
    method compile (line 52) | public function compile($args, $compiler) {
    method saveBlockData (line 78) | public static function saveBlockData($block_content, $block_tag, $temp...
    method compileChildBlock (line 160) | public static function compileChildBlock($compiler, $_name = null) {
  class Smarty_Internal_Compile_Blockclose (line 235) | class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile...
    method compile (line 244) | public function compile($args, $compiler) {

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_break.php
  class Smarty_Internal_Compile_Break (line 17) | class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
    method compile (line 42) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_call.php
  class Smarty_Internal_Compile_Call (line 18) | class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
    method compile (line 50) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_capture.php
  class Smarty_Internal_Compile_Capture (line 18) | class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
    method compile (line 42) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_CaptureClose (line 67) | class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_Compi...
    method compile (line 76) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_config_load.php
  class Smarty_Internal_Compile_Config_Load (line 18) | class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_Compil...
    method compile (line 49) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_continue.php
  class Smarty_Internal_Compile_Continue (line 18) | class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBa...
    method compile (line 43) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_debug.php
  class Smarty_Internal_Compile_Debug (line 19) | class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_eval.php
  class Smarty_Internal_Compile_Eval (line 18) | class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_extends.php
  class Smarty_Internal_Compile_Extends (line 19) | class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_for.php
  class Smarty_Internal_Compile_For (line 18) | class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
    method compile (line 39) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_foreach.php
  class Smarty_Internal_Compile_Foreach (line 18) | class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Foreachelse (line 176) | class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_Compil...
    method compile (line 186) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Foreachclose (line 205) | class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_Compi...
    method compile (line 215) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_function.php
  class Smarty_Internal_Compile_Function (line 18) | class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBa...
    method compile (line 50) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Functionclose (line 100) | class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_Comp...
    method compile (line 110) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_if.php
  class Smarty_Internal_Compile_If (line 18) | class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Else (line 73) | class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
    method compile (line 83) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Elseif (line 99) | class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
    method compile (line 109) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Ifclose (line 181) | class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
    method compile (line 191) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_include.php
  class Smarty_Internal_Compile_Include (line 18) | class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
    method compile (line 61) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_include_php.php
  class Smarty_Internal_Compile_Include_Php (line 18) | class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_Compil...
    method compile (line 49) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_insert.php
  class Smarty_Internal_Compile_Insert (line 19) | class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
    method compile (line 50) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_ldelim.php
  class Smarty_Internal_Compile_Ldelim (line 18) | class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_nocache.php
  class Smarty_Internal_Compile_Nocache (line 18) | class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
    method compile (line 29) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Nocacheclose (line 50) | class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_Compi...
    method compile (line 61) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php
  class Smarty_Internal_Compile_Private_Block_Plugin (line 18) | class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Intern...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $function)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php
  class Smarty_Internal_Compile_Private_Function_Plugin (line 18) | class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Int...
    method compile (line 45) | public function compile($args, $compiler, $parameter, $tag, $function)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_modifier.php
  class Smarty_Internal_Compile_Private_Modifier (line 19) | class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_C...
    method compile (line 29) | public function compile($args, $compiler, $parameter) {

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php
  class Smarty_Internal_Compile_Private_Object_Block_Function (line 18) | class Smarty_Internal_Compile_Private_Object_Block_Function extends Smar...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $method)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_object_function.php
  class Smarty_Internal_Compile_Private_Object_Function (line 18) | class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Int...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $method)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_print_expression.php
  class Smarty_Internal_Compile_Private_Print_Expression (line 18) | class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_In...
    method compile (line 43) | public function compile($args, $compiler, $parameter)
    method compile_output_filter (line 135) | private function compile_output_filter($compiler, $name, $output)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_registered_block.php
  class Smarty_Internal_Compile_Private_Registered_Block (line 18) | class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_In...
    method compile (line 37) | public function compile($args, $compiler, $parameter, $tag)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_registered_function.php
  class Smarty_Internal_Compile_Private_Registered_Function (line 18) | class Smarty_Internal_Compile_Private_Registered_Function extends Smarty...
    method compile (line 37) | public function compile($args, $compiler, $parameter, $tag)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_private_special_variable.php
  class Smarty_Internal_Compile_Private_Special_Variable (line 18) | class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_In...
    method compile (line 27) | public function compile($args, $compiler, $parameter)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_rdelim.php
  class Smarty_Internal_Compile_Rdelim (line 17) | class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_section.php
  class Smarty_Internal_Compile_Section (line 18) | class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Sectionelse (line 145) | class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_Compil...
    method compile (line 154) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Sectionclose (line 173) | class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_Compi...
    method compile (line 182) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_setfilter.php
  class Smarty_Internal_Compile_Setfilter (line 18) | class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileB...
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Setfilterclose (line 45) | class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_Com...
    method compile (line 56) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compile_while.php
  class Smarty_Internal_Compile_While (line 18) | class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Whileclose (line 73) | class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_Compile...
    method compile (line 82) | public function compile($args, $compiler)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_compilebase.php
  class Smarty_Internal_CompileBase (line 16) | abstract class Smarty_Internal_CompileBase {
    method getAttributes (line 56) | public function getAttributes($compiler, $attributes)
    method openTag (line 136) | public function openTag($compiler, $openTag, $data = null)
    method closeTag (line 150) | public function closeTag($compiler, $expectedTag)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_config.php
  class Smarty_Internal_Config (line 22) | class Smarty_Internal_Config {
    method __construct (line 78) | public function __construct($config_resource, $smarty, $data = null)
    method getCompiledFilepath (line 90) | public function getCompiledFilepath()
    method buildCompiledFilepath (line 102) | public function buildCompiledFilepath()
    method getCompiledTimestamp (line 128) | public function getCompiledTimestamp()
    method mustCompile (line 142) | public function mustCompile()
    method getCompiledConfig (line 156) | public function getCompiledConfig()
    method compileConfigSource (line 174) | public function compileConfigSource()
    method loadConfigVars (line 208) | public function loadConfigVars($sections = null, $scope = 'local')
    method __set (line 264) | public function __set($property_name, $value)
    method __get (line 282) | public function __get($property_name)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_config_file_compiler.php
  class Smarty_Internal_Config_File_Compiler (line 19) | class Smarty_Internal_Config_File_Compiler {
    method __construct (line 61) | public function __construct($smarty)
    method compileSource (line 74) | public function compileSource(Smarty_Internal_Config $config)
    method trigger_config_file_error (line 110) | public function trigger_config_file_error($args = null)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_configfilelexer.php
  class Smarty_Internal_Configfilelexer (line 13) | class Smarty_Internal_Configfilelexer
    method __construct (line 27) | function __construct($data, $smarty)
    method instance (line 37) | public static function &instance($new_instance = null)
    method yylex (line 50) | function yylex()
    method yypushstate (line 55) | function yypushstate($state)
    method yypopstate (line 61) | function yypopstate()
    method yybegin (line 66) | function yybegin($state)
    method yylex1 (line 74) | function yylex1()
    method yy_r1_1 (line 139) | function yy_r1_1($yy_subpatterns)
    method yy_r1_2 (line 145) | function yy_r1_2($yy_subpatterns)
    method yy_r1_3 (line 151) | function yy_r1_3($yy_subpatterns)
    method yy_r1_4 (line 156) | function yy_r1_4($yy_subpatterns)
    method yy_r1_5 (line 162) | function yy_r1_5($yy_subpatterns)
    method yy_r1_6 (line 167) | function yy_r1_6($yy_subpatterns)
    method yy_r1_7 (line 172) | function yy_r1_7($yy_subpatterns)
    method yy_r1_8 (line 177) | function yy_r1_8($yy_subpatterns)
    method yylex2 (line 185) | function yylex2()
    method yy_r2_1 (line 251) | function yy_r2_1($yy_subpatterns)
    method yy_r2_2 (line 256) | function yy_r2_2($yy_subpatterns)
    method yy_r2_3 (line 262) | function yy_r2_3($yy_subpatterns)
    method yy_r2_4 (line 268) | function yy_r2_4($yy_subpatterns)
    method yy_r2_5 (line 274) | function yy_r2_5($yy_subpatterns)
    method yy_r2_6 (line 280) | function yy_r2_6($yy_subpatterns)
    method yy_r2_7 (line 286) | function yy_r2_7($yy_subpatterns)
    method yy_r2_8 (line 298) | function yy_r2_8($yy_subpatterns)
    method yy_r2_9 (line 304) | function yy_r2_9($yy_subpatterns)
    method yylex3 (line 314) | function yylex3()
    method yy_r3_1 (line 372) | function yy_r3_1($yy_subpatterns)
    method yylex4 (line 381) | function yylex4()
    method yy_r4_1 (line 441) | function yy_r4_1($yy_subpatterns)
    method yy_r4_2 (line 446) | function yy_r4_2($yy_subpatterns)
    method yy_r4_3 (line 451) | function yy_r4_3($yy_subpatterns)
    method yylex5 (line 460) | function yylex5()
    method yy_r5_1 (line 519) | function yy_r5_1($yy_subpatterns)
    method yy_r5_2 (line 524) | function yy_r5_2($yy_subpatterns)
    method yylex6 (line 532) | function yylex6()
    method yy_r6_1 (line 591) | function yy_r6_1($yy_subpatterns)
    method yy_r6_2 (line 598) | function yy_r6_2($yy_subpatterns)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_configfileparser.php
  class TPC_yyToken (line 12) | class TPC_yyToken implements ArrayAccess
    method __construct (line 17) | function __construct($s, $m = array())
    method __toString (line 32) | function __toString()
    method offsetExists (line 37) | function offsetExists($offset)
    method offsetGet (line 42) | function offsetGet($offset)
    method offsetSet (line 47) | function offsetSet($offset, $value)
    method offsetUnset (line 70) | function offsetUnset($offset)
  class TPC_yyStackEntry (line 76) | class TPC_yyStackEntry
  class Smarty_Internal_Configfileparser (line 87) | class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfi...
    method __construct (line 97) | function __construct($lex, $compiler) {
    method instance (line 104) | public static function &instance($new_instance = null)
    method parse_bool (line 112) | private function parse_bool($str) {
    method parse_single_quoted_string (line 123) | private static function parse_single_quoted_string($qstr) {
    method parse_double_quoted_string (line 142) | private static function parse_double_quoted_string($qstr) {
    method parse_tripple_double_quoted_string (line 147) | private static function parse_tripple_double_quoted_string($qstr) {
    method set_var (line 151) | private function set_var(Array $var, Array &$target_array) {
    method add_global_vars (line 163) | private function add_global_vars(Array $vars) {
    method add_section_vars (line 172) | private function add_section_vars($section_name, Array $vars) {
    method Trace (line 282) | static function Trace($TraceFILE, $zTracePrompt)
    method PrintTrace (line 293) | static function PrintTrace()
    method tokenName (line 340) | function tokenName($tokenType)
    method yy_destructor (line 352) | static function yy_destructor($yymajor, $yypminor)
    method yy_pop_parser_stack (line 359) | function yy_pop_parser_stack()
    method __destruct (line 376) | function __destruct()
    method yy_get_expected_tokens (line 386) | function yy_get_expected_tokens($token)
    method yy_is_expected_token (line 454) | function yy_is_expected_token($token)
    method yy_find_shift_action (line 525) | function yy_find_shift_action($iLookAhead)
    method yy_find_reduce_action (line 559) | function yy_find_reduce_action($stateno, $iLookAhead)
    method yy_shift (line 582) | function yy_shift($yyNewState, $yyMajor, $yypMinor)
    method yy_r0 (line 667) | function yy_r0(){
    method yy_r1 (line 672) | function yy_r1(){
    method yy_r4 (line 677) | function yy_r4(){
    method yy_r5 (line 683) | function yy_r5(){
    method yy_r6 (line 691) | function yy_r6(){
    method yy_r7 (line 696) | function yy_r7(){
    method yy_r8 (line 701) | function yy_r8(){
    method yy_r9 (line 706) | function yy_r9(){
    method yy_r10 (line 711) | function yy_r10(){
    method yy_r11 (line 716) | function yy_r11(){
    method yy_r12 (line 721) | function yy_r12(){
    method yy_r13 (line 726) | function yy_r13(){
    method yy_r14 (line 731) | function yy_r14(){
    method yy_r15 (line 736) | function yy_r15(){
    method yy_r16 (line 741) | function yy_r16(){
    method yy_r17 (line 746) | function yy_r17(){
    method yy_reduce (line 753) | function yy_reduce($yyruleno)
    method yy_parse_failed (line 794) | function yy_parse_failed()
    method yy_syntax_error (line 804) | function yy_syntax_error($yymajor, $TOKEN)
    method yy_accept (line 814) | function yy_accept()
    method doParse (line 831) | function doParse($yymajor, $yytokenvalue)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_data.php
  class Smarty_Internal_Data (line 18) | class Smarty_Internal_Data {
    method assign (line 54) | public function assign($tpl_var, $value = null, $nocache = false)
    method assignGlobal (line 79) | public function assignGlobal($varname, $value = null, $nocache = false)
    method assignByRef (line 100) | public function assignByRef($tpl_var, &$value, $nocache = false)
    method append (line 119) | public function append($tpl_var, $value = null, $merge = false, $nocac...
    method appendByRef (line 179) | public function appendByRef($tpl_var, &$value, $merge = false)
    method getTemplateVars (line 208) | public function getTemplateVars($varname = null, $_ptr = null, $search...
    method clearAssign (line 251) | public function clearAssign($tpl_var)
    method clearAllAssign (line 268) | public function clearAllAssign()
    method configLoad (line 281) | public function configLoad($config_file, $sections = null)
    method getVariable (line 297) | public function getVariable($variable, $_ptr = null, $search_parents =...
    method getConfigVariable (line 330) | public function getConfigVariable($variable, $error_enable = true)
    method getStreamVariable (line 354) | public function getStreamVariable($variable)
    method getConfigVars (line 379) | public function getConfigVars($varname = null, $search_parents = true)
    method clearConfig (line 411) | public function clearConfig($varname = null)
  class Smarty_Data (line 431) | class Smarty_Data extends Smarty_Internal_Data {
    method __construct (line 446) | public function __construct ($_parent = null, $smarty = null)
  class Smarty_Variable (line 472) | class Smarty_Variable {
    method __construct (line 500) | public function __construct($value = null, $nocache = false, $scope = ...
    method __toString (line 512) | public function __toString()
  class Undefined_Smarty_Variable (line 527) | class Undefined_Smarty_Variable {
    method __get (line 535) | public function __get($name)
    method __toString (line 549) | public function __toString()

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_debug.php
  class Smarty_Internal_Debug (line 18) | class Smarty_Internal_Debug extends Smarty_Internal_Data {
    method start_compile (line 32) | public static function start_compile($template)
    method end_compile (line 43) | public static function end_compile($template)
    method start_render (line 54) | public static function start_render($template)
    method end_render (line 65) | public static function end_render($template)
    method start_cache (line 76) | public static function start_cache($template)
    method end_cache (line 87) | public static function end_cache($template)
    method display_debug (line 98) | public static function display_debug($obj)
    method get_debug_vars (line 144) | public static function get_debug_vars($obj)
    method get_key (line 181) | private static function get_key($template)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_filter_handler.php
  class Smarty_Internal_Filter_Handler (line 18) | class Smarty_Internal_Filter_Handler {
    method runFilter (line 33) | public static function runFilter($type, $content, Smarty_Internal_Temp...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_function_call_handler.php
  class Smarty_Internal_Function_Call_Handler (line 16) | class Smarty_Internal_Function_Call_Handler {
    method call (line 28) | public static function call($_name, Smarty_Internal_Template $_templat...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_get_include_path.php
  class Smarty_Internal_Get_Include_Path (line 16) | class Smarty_Internal_Get_Include_Path {
    method getIncludePath (line 24) | public static function getIncludePath($filepath)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_nocache_insert.php
  class Smarty_Internal_Nocache_Insert (line 18) | class Smarty_Internal_Nocache_Insert {
    method compile (line 30) | public static function compile($_function, $_attr, $_template, $_scrip...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_parsetree.php
  class _smarty_parsetree (line 18) | abstract class _smarty_parsetree {
    method to_smarty_php (line 36) | abstract public function to_smarty_php();
  class _smarty_tag (line 47) | class _smarty_tag extends _smarty_parsetree {
    method __construct (line 61) | public function __construct($parser, $data)
    method to_smarty_php (line 73) | public function to_smarty_php()
    method assign_to_var (line 83) | public function assign_to_var()
  class _smarty_code (line 99) | class _smarty_code extends _smarty_parsetree {
    method __construct (line 108) | public function __construct($parser, $data)
    method to_smarty_php (line 119) | public function to_smarty_php()
  class _smarty_doublequoted (line 133) | class _smarty_doublequoted extends _smarty_parsetree {
    method __construct (line 141) | public function __construct($parser, _smarty_parsetree $subtree)
    method append_subtree (line 155) | public function append_subtree(_smarty_parsetree $subtree)
    method to_smarty_php (line 179) | public function to_smarty_php()
  class _smarty_dq_content (line 210) | class _smarty_dq_content extends _smarty_parsetree {
    method __construct (line 219) | public function __construct($parser, $data)
    method to_smarty_php (line 230) | public function to_smarty_php()
  class _smarty_template_buffer (line 244) | class _smarty_template_buffer extends _smarty_parsetree {
    method __construct (line 258) | public function __construct($parser)
    method append_subtree (line 268) | public function append_subtree(_smarty_parsetree $subtree)
    method to_smarty_php (line 278) | public function to_smarty_php()
  class _smarty_text (line 335) | class _smarty_text extends _smarty_parsetree {
    method __construct (line 344) | public function __construct($parser, $data)
    method to_smarty_php (line 355) | public function to_smarty_php()
  class _smarty_linebreak (line 369) | class _smarty_linebreak extends _smarty_parsetree {
    method __construct (line 377) | public function __construct($parser, $data)
    method to_smarty_php (line 388) | public function to_smarty_php()

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_eval.php
  class Smarty_Internal_Resource_Eval (line 21) | class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
    method populate (line 30) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 55) | protected function decode($string)
    method buildUniqueResourceName (line 76) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...
    method getBasename (line 87) | protected function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_extends.php
  class Smarty_Internal_Resource_Extends (line 19) | class Smarty_Internal_Resource_Extends extends Smarty_Resource {
    method populate (line 34) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 67) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 83) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 155) | public function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_file.php
  class Smarty_Internal_Resource_File (line 19) | class Smarty_Internal_Resource_File extends Smarty_Resource {
    method populate (line 27) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 49) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 62) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 79) | public function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_php.php
  class Smarty_Internal_Resource_PHP (line 13) | class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
    method __construct (line 24) | public function __construct()
    method populate (line 36) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 59) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 72) | public function getContent(Smarty_Template_Source $source)
    method renderUncompiled (line 88) | public function renderUncompiled(Smarty_Template_Source $source, Smart...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_registered.php
  class Smarty_Internal_Resource_Registered (line 20) | class Smarty_Internal_Resource_Registered extends Smarty_Resource {
    method populate (line 29) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 45) | public function populateTimestamp(Smarty_Template_Source $source)
    method getTemplateTimestamp (line 57) | public function getTemplateTimestamp(Smarty_Template_Source $source)
    method getContent (line 72) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 88) | protected function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_stream.php
  class Smarty_Internal_Resource_Stream (line 22) | class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
    method populate (line 31) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 51) | public function getContent(Smarty_Template_Source $source)
    method buildUniqueResourceName (line 74) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_resource_string.php
  class Smarty_Internal_Resource_String (line 21) | class Smarty_Internal_Resource_String extends Smarty_Resource {
    method populate (line 30) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 55) | protected function decode($string)
    method buildUniqueResourceName (line 76) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...
    method getBasename (line 89) | protected function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php
  class Smarty_Internal_SmartyTemplateCompiler (line 23) | class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_Tem...
    method __construct (line 74) | public function __construct($lexer_class, $parser_class, $smarty)
    method doCompile (line 89) | protected function doCompile($_content)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_template.php
  class Smarty_Internal_Template (line 22) | class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
    method __construct (line 116) | public function __construct($template_resource, $smarty, $_parent = nu...
    method mustCompile (line 142) | public function mustCompile()
    method compileTemplateSource (line 164) | public function compileTemplateSource()
    method writeCachedContent (line 217) | public function writeCachedContent($content)
    method getSubTemplate (line 245) | public function getSubTemplate($template, $cache_id, $compile_id, $cac...
    method setupInlineSubTemplate (line 302) | public function setupInlineSubTemplate($template, $cache_id, $compile_...
    method createTemplateCodeFrame (line 337) | public function createTemplateCodeFrame($content = '', $cache = false)
    method decodeProperties (line 427) | public function decodeProperties($properties, $cache = false)
    method createLocalArrayVariable (line 488) | public function createLocalArrayVariable($tpl_var, $nocache = false, $...
    method getScope (line 509) | public function &getScope($scope)
    method getScopePointer (line 532) | public function getScopePointer($scope)
    method _count (line 552) | public function _count($value)
    method capture_error (line 580) | public function capture_error()
    method clearCache (line 591) | public function clearCache($exp_time=null)
    method __set (line 603) | public function __set($property_name, $value)
    method __get (line 629) | public function __get($property_name)
    method __destruct (line 683) | public function __destruct()

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_templatebase.php
  class Smarty_Internal_TemplateBase (line 18) | abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
    method fetch (line 32) | public function fetch($template = null, $cache_id = null, $compile_id ...
    method display (line 371) | public function display($template = null, $cache_id = null, $compile_i...
    method isCached (line 386) | public function isCached($template = null, $cache_id = null, $compile_...
    method createData (line 407) | public function createData($parent = null)
    method registerPlugin (line 423) | public function registerPlugin($type, $tag, $callback, $cacheable = tr...
    method unregisterPlugin (line 443) | public function unregisterPlugin($type, $tag)
    method registerResource (line 459) | public function registerResource($type, $callback)
    method unregisterResource (line 471) | public function unregisterResource($type)
    method registerCacheResource (line 487) | public function registerCacheResource($type, Smarty_CacheResource $cal...
    method unregisterCacheResource (line 499) | public function unregisterCacheResource($type)
    method registerObject (line 520) | public function registerObject($object_name, $object_impl, $allowed = ...
    method getRegisteredObject (line 551) | public function getRegisteredObject($name)
    method unregisterObject (line 568) | public function unregisterObject($name)
    method registerClass (line 585) | public function registerClass($class_name, $class_impl)
    method registerDefaultPluginHandler (line 603) | public function registerDefaultPluginHandler($callback)
    method registerDefaultTemplateHandler (line 621) | public function registerDefaultTemplateHandler($callback)
    method registerDefaultConfigHandler (line 639) | public function registerDefaultConfigHandler($callback)
    method registerFilter (line 657) | public function registerFilter($type, $callback)
    method unregisterFilter (line 670) | public function unregisterFilter($type, $callback)
    method _get_filter_name (line 686) | public function _get_filter_name($function_name)
    method loadFilter (line 704) | public function loadFilter($type, $name)
    method unloadFilter (line 727) | public function unloadFilter($type, $name)
    method replaceCamelcase (line 743) | private function replaceCamelcase($match) {
    method __call (line 753) | public function __call($name, $args)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_templatecompilerbase.php
  class Smarty_Internal_TemplateCompilerBase (line 19) | abstract class Smarty_Internal_TemplateCompilerBase {
    method doCompile (line 145) | abstract protected function doCompile($_content);
    method __construct (line 150) | public function __construct() {
    method compileTemplate (line 160) | public function compileTemplate(Smarty_Internal_Template $template) {
    method compileTag (line 242) | public function compileTag($tag, $args, $parameter = array()) {
    method callTagCompiler (line 469) | public function callTagCompiler($tag, $args, $param1 = null, $param2 =...
    method getPlugin (line 497) | public function getPlugin($plugin_name, $plugin_type) {
    method getPluginFromDefaultHandler (line 551) | public function getPluginFromDefaultHandler($tag, $plugin_type) {
    method processNocacheCode (line 598) | public function processNocacheCode($content, $is_code) {
    method trigger_template_error (line 638) | public function trigger_template_error($args = null, $line = null) {

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_templatelexer.php
  class Smarty_Internal_Templatelexer (line 13) | class Smarty_Internal_Templatelexer
    method __construct (line 77) | function __construct($data,$compiler)
    method yylex (line 98) | function yylex()
    method yypushstate (line 103) | function yypushstate($state)
    method yypopstate (line 109) | function yypopstate()
    method yybegin (line 114) | function yybegin($state)
    method yylex1 (line 121) | function yylex1()
    method yy_r1_1 (line 200) | function yy_r1_1($yy_subpatterns)
    method yy_r1_2 (line 205) | function yy_r1_2($yy_subpatterns)
    method yy_r1_3 (line 210) | function yy_r1_3($yy_subpatterns)
    method yy_r1_5 (line 215) | function yy_r1_5($yy_subpatterns)
    method yy_r1_6 (line 220) | function yy_r1_6($yy_subpatterns)
    method yy_r1_7 (line 229) | function yy_r1_7($yy_subpatterns)
    method yy_r1_8 (line 234) | function yy_r1_8($yy_subpatterns)
    method yy_r1_9 (line 243) | function yy_r1_9($yy_subpatterns)
    method yy_r1_10 (line 249) | function yy_r1_10($yy_subpatterns)
    method yy_r1_11 (line 260) | function yy_r1_11($yy_subpatterns)
    method yy_r1_13 (line 271) | function yy_r1_13($yy_subpatterns)
    method yy_r1_14 (line 282) | function yy_r1_14($yy_subpatterns)
    method yy_r1_15 (line 293) | function yy_r1_15($yy_subpatterns)
    method yy_r1_16 (line 304) | function yy_r1_16($yy_subpatterns)
    method yy_r1_17 (line 315) | function yy_r1_17($yy_subpatterns)
    method yy_r1_18 (line 322) | function yy_r1_18($yy_subpatterns)
    method yy_r1_19 (line 329) | function yy_r1_19($yy_subpatterns)
    method yy_r1_20 (line 341) | function yy_r1_20($yy_subpatterns)
    method yy_r1_21 (line 346) | function yy_r1_21($yy_subpatterns)
    method yy_r1_22 (line 351) | function yy_r1_22($yy_subpatterns)
    method yy_r1_23 (line 356) | function yy_r1_23($yy_subpatterns)
    method yy_r1_24 (line 361) | function yy_r1_24($yy_subpatterns)
    method yylex2 (line 382) | function yylex2()
    method yy_r2_1 (line 507) | function yy_r2_1($yy_subpatterns)
    method yy_r2_2 (line 512) | function yy_r2_2($yy_subpatterns)
    method yy_r2_3 (line 523) | function yy_r2_3($yy_subpatterns)
    method yy_r2_5 (line 534) | function yy_r2_5($yy_subpatterns)
    method yy_r2_6 (line 545) | function yy_r2_6($yy_subpatterns)
    method yy_r2_7 (line 556) | function yy_r2_7($yy_subpatterns)
    method yy_r2_8 (line 567) | function yy_r2_8($yy_subpatterns)
    method yy_r2_9 (line 573) | function yy_r2_9($yy_subpatterns)
    method yy_r2_10 (line 580) | function yy_r2_10($yy_subpatterns)
    method yy_r2_11 (line 587) | function yy_r2_11($yy_subpatterns)
    method yy_r2_12 (line 593) | function yy_r2_12($yy_subpatterns)
    method yy_r2_13 (line 598) | function yy_r2_13($yy_subpatterns)
    method yy_r2_14 (line 603) | function yy_r2_14($yy_subpatterns)
    method yy_r2_15 (line 608) | function yy_r2_15($yy_subpatterns)
    method yy_r2_16 (line 613) | function yy_r2_16($yy_subpatterns)
    method yy_r2_17 (line 618) | function yy_r2_17($yy_subpatterns)
    method yy_r2_18 (line 623) | function yy_r2_18($yy_subpatterns)
    method yy_r2_19 (line 628) | function yy_r2_19($yy_subpatterns)
    method yy_r2_20 (line 633) | function yy_r2_20($yy_subpatterns)
    method yy_r2_22 (line 638) | function yy_r2_22($yy_subpatterns)
    method yy_r2_24 (line 643) | function yy_r2_24($yy_subpatterns)
    method yy_r2_26 (line 648) | function yy_r2_26($yy_subpatterns)
    method yy_r2_27 (line 653) | function yy_r2_27($yy_subpatterns)
    method yy_r2_28 (line 658) | function yy_r2_28($yy_subpatterns)
    method yy_r2_29 (line 663) | function yy_r2_29($yy_subpatterns)
    method yy_r2_30 (line 668) | function yy_r2_30($yy_subpatterns)
    method yy_r2_31 (line 673) | function yy_r2_31($yy_subpatterns)
    method yy_r2_32 (line 678) | function yy_r2_32($yy_subpatterns)
    method yy_r2_33 (line 683) | function yy_r2_33($yy_subpatterns)
    method yy_r2_34 (line 688) | function yy_r2_34($yy_subpatterns)
    method yy_r2_35 (line 693) | function yy_r2_35($yy_subpatterns)
    method yy_r2_36 (line 698) | function yy_r2_36($yy_subpatterns)
    method yy_r2_37 (line 703) | function yy_r2_37($yy_subpatterns)
    method yy_r2_38 (line 708) | function yy_r2_38($yy_subpatterns)
    method yy_r2_39 (line 713) | function yy_r2_39($yy_subpatterns)
    method yy_r2_40 (line 718) | function yy_r2_40($yy_subpatterns)
    method yy_r2_41 (line 723) | function yy_r2_41($yy_subpatterns)
    method yy_r2_42 (line 728) | function yy_r2_42($yy_subpatterns)
    method yy_r2_43 (line 733) | function yy_r2_43($yy_subpatterns)
    method yy_r2_47 (line 738) | function yy_r2_47($yy_subpatterns)
    method yy_r2_48 (line 743) | function yy_r2_48($yy_subpatterns)
    method yy_r2_49 (line 748) | function yy_r2_49($yy_subpatterns)
    method yy_r2_50 (line 753) | function yy_r2_50($yy_subpatterns)
    method yy_r2_51 (line 758) | function yy_r2_51($yy_subpatterns)
    method yy_r2_52 (line 763) | function yy_r2_52($yy_subpatterns)
    method yy_r2_53 (line 768) | function yy_r2_53($yy_subpatterns)
    method yy_r2_54 (line 773) | function yy_r2_54($yy_subpatterns)
    method yy_r2_55 (line 778) | function yy_r2_55($yy_subpatterns)
    method yy_r2_57 (line 783) | function yy_r2_57($yy_subpatterns)
    method yy_r2_59 (line 788) | function yy_r2_59($yy_subpatterns)
    method yy_r2_60 (line 793) | function yy_r2_60($yy_subpatterns)
    method yy_r2_61 (line 798) | function yy_r2_61($yy_subpatterns)
    method yy_r2_62 (line 803) | function yy_r2_62($yy_subpatterns)
    method yy_r2_63 (line 808) | function yy_r2_63($yy_subpatterns)
    method yy_r2_64 (line 813) | function yy_r2_64($yy_subpatterns)
    method yy_r2_65 (line 818) | function yy_r2_65($yy_subpatterns)
    method yy_r2_66 (line 824) | function yy_r2_66($yy_subpatterns)
    method yy_r2_67 (line 830) | function yy_r2_67($yy_subpatterns)
    method yy_r2_68 (line 835) | function yy_r2_68($yy_subpatterns)
    method yy_r2_69 (line 840) | function yy_r2_69($yy_subpatterns)
    method yy_r2_70 (line 845) | function yy_r2_70($yy_subpatterns)
    method yy_r2_71 (line 850) | function yy_r2_71($yy_subpatterns)
    method yy_r2_72 (line 855) | function yy_r2_72($yy_subpatterns)
    method yy_r2_73 (line 860) | function yy_r2_73($yy_subpatterns)
    method yy_r2_74 (line 872) | function yy_r2_74($yy_subpatterns)
    method yy_r2_75 (line 877) | function yy_r2_75($yy_subpatterns)
    method yy_r2_76 (line 882) | function yy_r2_76($yy_subpatterns)
    method yy_r2_77 (line 887) | function yy_r2_77($yy_subpatterns)
    method yylex3 (line 895) | function yylex3()
    method yy_r3_1 (line 959) | function yy_r3_1($yy_subpatterns)
    method yy_r3_2 (line 965) | function yy_r3_2($yy_subpatterns)
    method yy_r3_3 (line 971) | function yy_r3_3($yy_subpatterns)
    method yy_r3_4 (line 981) | function yy_r3_4($yy_subpatterns)
    method yy_r3_5 (line 986) | function yy_r3_5($yy_subpatterns)
    method yy_r3_6 (line 991) | function yy_r3_6($yy_subpatterns)
    method yy_r3_7 (line 996) | function yy_r3_7($yy_subpatterns)
    method yylex4 (line 1019) | function yylex4()
    method yy_r4_1 (line 1089) | function yy_r4_1($yy_subpatterns)
    method yy_r4_2 (line 1100) | function yy_r4_2($yy_subpatterns)
    method yy_r4_4 (line 1111) | function yy_r4_4($yy_subpatterns)
    method yy_r4_5 (line 1122) | function yy_r4_5($yy_subpatterns)
    method yy_r4_6 (line 1133) | function yy_r4_6($yy_subpatterns)
    method yy_r4_7 (line 1144) | function yy_r4_7($yy_subpatterns)
    method yy_r4_8 (line 1151) | function yy_r4_8($yy_subpatterns)
    method yy_r4_9 (line 1158) | function yy_r4_9($yy_subpatterns)
    method yy_r4_10 (line 1164) | function yy_r4_10($yy_subpatterns)
    method yy_r4_11 (line 1172) | function yy_r4_11($yy_subpatterns)
    method yy_r4_12 (line 1177) | function yy_r4_12($yy_subpatterns)
    method yy_r4_13 (line 1182) | function yy_r4_13($yy_subpatterns)
    method yy_r4_17 (line 1187) | function yy_r4_17($yy_subpatterns)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_templateparser.php
  class TP_yyToken (line 12) | class TP_yyToken implements ArrayAccess
    method __construct (line 17) | function __construct($s, $m = array())
    method __toString (line 32) | function __toString()
    method offsetExists (line 37) | function offsetExists($offset)
    method offsetGet (line 42) | function offsetGet($offset)
    method offsetSet (line 47) | function offsetSet($offset, $value)
    method offsetUnset (line 70) | function offsetUnset($offset)
  class TP_yyStackEntry (line 76) | class TP_yyStackEntry
  class Smarty_Internal_Templateparser (line 87) | class Smarty_Internal_Templateparser#line 79 "smarty_internal_templatepa...
    method __construct (line 101) | function __construct($lex, $compiler) {
    method escape_start_tag (line 120) | public static function escape_start_tag($tag_text) {
    method escape_end_tag (line 125) | public static function escape_end_tag($tag_text) {
    method compileVariable (line 129) | public function compileVariable($variable) {
    method Trace (line 1207) | static function Trace($TraceFILE, $zTracePrompt)
    method PrintTrace (line 1218) | static function PrintTrace()
    method tokenName (line 1471) | function tokenName($tokenType)
    method yy_destructor (line 1483) | static function yy_destructor($yymajor, $yypminor)
    method yy_pop_parser_stack (line 1490) | function yy_pop_parser_stack()
    method __destruct (line 1507) | function __destruct()
    method yy_get_expected_tokens (line 1517) | function yy_get_expected_tokens($token)
    method yy_is_expected_token (line 1585) | function yy_is_expected_token($token)
    method yy_find_shift_action (line 1656) | function yy_find_shift_action($iLookAhead)
    method yy_find_reduce_action (line 1690) | function yy_find_reduce_action($stateno, $iLookAhead)
    method yy_shift (line 1713) | function yy_shift($yyNewState, $yyMajor, $yypMinor)
    method yy_r0 (line 2161) | function yy_r0(){
    method yy_r1 (line 2166) | function yy_r1(){
    method yy_r4 (line 2171) | function yy_r4(){
    method yy_r5 (line 2183) | function yy_r5(){
    method yy_r6 (line 2188) | function yy_r6(){
    method yy_r7 (line 2193) | function yy_r7(){
    method yy_r8 (line 2209) | function yy_r8(){
    method yy_r9 (line 2228) | function yy_r9(){
    method yy_r10 (line 2252) | function yy_r10(){
    method yy_r11 (line 2273) | function yy_r11(){
    method yy_r12 (line 2282) | function yy_r12(){
    method yy_r13 (line 2291) | function yy_r13(){
    method yy_r14 (line 2300) | function yy_r14(){
    method yy_r15 (line 2306) | function yy_r15(){
    method yy_r16 (line 2312) | function yy_r16(){
    method yy_r17 (line 2317) | function yy_r17(){
    method yy_r18 (line 2322) | function yy_r18(){
    method yy_r20 (line 2327) | function yy_r20(){
    method yy_r22 (line 2332) | function yy_r22(){
    method yy_r24 (line 2337) | function yy_r24(){
    method yy_r25 (line 2342) | function yy_r25(){
    method yy_r26 (line 2347) | function yy_r26(){
    method yy_r27 (line 2352) | function yy_r27(){
    method yy_r28 (line 2357) | function yy_r28(){
    method yy_r29 (line 2362) | function yy_r29(){
    method yy_r30 (line 2367) | function yy_r30(){
    method yy_r32 (line 2372) | function yy_r32(){
    method yy_r34 (line 2377) | function yy_r34(){
    method yy_r35 (line 2382) | function yy_r35(){
    method yy_r36 (line 2387) | function yy_r36(){
    method yy_r37 (line 2392) | function yy_r37(){
    method yy_r38 (line 2397) | function yy_r38(){
    method yy_r39 (line 2402) | function yy_r39(){
    method yy_r40 (line 2408) | function yy_r40(){
    method yy_r41 (line 2414) | function yy_r41(){
    method yy_r42 (line 2420) | function yy_r42(){
    method yy_r43 (line 2426) | function yy_r43(){
    method yy_r45 (line 2432) | function yy_r45(){
    method yy_r46 (line 2437) | function yy_r46(){
    method yy_r48 (line 2442) | function yy_r48(){
    method yy_r49 (line 2447) | function yy_r49(){
    method yy_r50 (line 2452) | function yy_r50(){
    method yy_r51 (line 2457) | function yy_r51(){
    method yy_r52 (line 2462) | function yy_r52(){
    method yy_r53 (line 2467) | function yy_r53(){
    method yy_r54 (line 2472) | function yy_r54(){
    method yy_r55 (line 2477) | function yy_r55(){
    method yy_r56 (line 2482) | function yy_r56(){
    method yy_r57 (line 2487) | function yy_r57(){
    method yy_r58 (line 2492) | function yy_r58(){
    method yy_r59 (line 2497) | function yy_r59(){
    method yy_r60 (line 2502) | function yy_r60(){
    method yy_r61 (line 2507) | function yy_r61(){
    method yy_r62 (line 2512) | function yy_r62(){
    method yy_r63 (line 2518) | function yy_r63(){
    method yy_r64 (line 2523) | function yy_r64(){
    method yy_r65 (line 2528) | function yy_r65(){
    method yy_r66 (line 2541) | function yy_r66(){
    method yy_r68 (line 2546) | function yy_r68(){
    method yy_r71 (line 2551) | function yy_r71(){
    method yy_r73 (line 2556) | function yy_r73(){
    method yy_r74 (line 2562) | function yy_r74(){
    method yy_r79 (line 2567) | function yy_r79(){
    method yy_r80 (line 2572) | function yy_r80(){
    method yy_r84 (line 2577) | function yy_r84(){
    method yy_r85 (line 2582) | function yy_r85(){
    method yy_r86 (line 2587) | function yy_r86(){
    method yy_r87 (line 2592) | function yy_r87(){
    method yy_r89 (line 2597) | function yy_r89(){
    method yy_r90 (line 2602) | function yy_r90(){
    method yy_r91 (line 2607) | function yy_r91(){
    method yy_r92 (line 2612) | function yy_r92(){
    method yy_r93 (line 2617) | function yy_r93(){
    method yy_r94 (line 2622) | function yy_r94(){
    method yy_r100 (line 2627) | function yy_r100(){
    method yy_r101 (line 2634) | function yy_r101(){
    method yy_r102 (line 2639) | function yy_r102(){
    method yy_r105 (line 2644) | function yy_r105(){
    method yy_r110 (line 2649) | function yy_r110(){
    method yy_r111 (line 2654) | function yy_r111(){
    method yy_r112 (line 2659) | function yy_r112(){
    method yy_r113 (line 2664) | function yy_r113(){
    method yy_r115 (line 2677) | function yy_r115(){
    method yy_r118 (line 2682) | function yy_r118(){
    method yy_r119 (line 2695) | function yy_r119(){
    method yy_r120 (line 2704) | function yy_r120(){
    method yy_r122 (line 2711) | function yy_r122(){
    method yy_r123 (line 2724) | function yy_r123(){
    method yy_r125 (line 2729) | function yy_r125(){
    method yy_r126 (line 2734) | function yy_r126(){
    method yy_r127 (line 2739) | function yy_r127(){
    method yy_r128 (line 2744) | function yy_r128(){
    method yy_r129 (line 2749) | function yy_r129(){
    method yy_r131 (line 2754) | function yy_r131(){
    method yy_r132 (line 2759) | function yy_r132(){
    method yy_r133 (line 2764) | function yy_r133(){
    method yy_r134 (line 2769) | function yy_r134(){
    method yy_r135 (line 2774) | function yy_r135(){
    method yy_r136 (line 2779) | function yy_r136(){
    method yy_r137 (line 2784) | function yy_r137(){
    method yy_r138 (line 2789) | function yy_r138(){
    method yy_r140 (line 2794) | function yy_r140(){
    method yy_r142 (line 2799) | function yy_r142(){
    method yy_r143 (line 2804) | function yy_r143(){
    method yy_r144 (line 2809) | function yy_r144(){
    method yy_r145 (line 2814) | function yy_r145(){
    method yy_r146 (line 2823) | function yy_r146(){
    method yy_r147 (line 2828) | function yy_r147(){
    method yy_r148 (line 2833) | function yy_r148(){
    method yy_r149 (line 2841) | function yy_r149(){
    method yy_r150 (line 2849) | function yy_r150(){
    method yy_r151 (line 2857) | function yy_r151(){
    method yy_r152 (line 2865) | function yy_r152(){
    method yy_r153 (line 2870) | function yy_r153(){
    method yy_r154 (line 2906) | function yy_r154(){
    method yy_r155 (line 2914) | function yy_r155(){
    method yy_r156 (line 2924) | function yy_r156(){
    method yy_r159 (line 2929) | function yy_r159(){
    method yy_r160 (line 2934) | function yy_r160(){
    method yy_r162 (line 2939) | function yy_r162(){
    method yy_r163 (line 2944) | function yy_r163(){
    method yy_r170 (line 2949) | function yy_r170(){
    method yy_r171 (line 2954) | function yy_r171(){
    method yy_r172 (line 2959) | function yy_r172(){
    method yy_r173 (line 2964) | function yy_r173(){
    method yy_r174 (line 2969) | function yy_r174(){
    method yy_r175 (line 2974) | function yy_r175(){
    method yy_r176 (line 2979) | function yy_r176(){
    method yy_r177 (line 2984) | function yy_r177(){
    method yy_r178 (line 2989) | function yy_r178(){
    method yy_r179 (line 2994) | function yy_r179(){
    method yy_r180 (line 2999) | function yy_r180(){
    method yy_r181 (line 3004) | function yy_r181(){
    method yy_r182 (line 3009) | function yy_r182(){
    method yy_r183 (line 3014) | function yy_r183(){
    method yy_r184 (line 3019) | function yy_r184(){
    method yy_r186 (line 3024) | function yy_r186(){
    method yy_r188 (line 3029) | function yy_r188(){
    method yy_r189 (line 3034) | function yy_r189(){
    method yy_r191 (line 3039) | function yy_r191(){
    method yy_r192 (line 3044) | function yy_r192(){
    method yy_r193 (line 3049) | function yy_r193(){
    method yy_r194 (line 3055) | function yy_r194(){
    method yy_r195 (line 3060) | function yy_r195(){
    method yy_r197 (line 3065) | function yy_r197(){
    method yy_r199 (line 3070) | function yy_r199(){
    method yy_r200 (line 3075) | function yy_r200(){
    method yy_r201 (line 3080) | function yy_r201(){
    method yy_reduce (line 3087) | function yy_reduce($yyruleno)
    method yy_parse_failed (line 3128) | function yy_parse_failed()
    method yy_syntax_error (line 3138) | function yy_syntax_error($yymajor, $TOKEN)
    method yy_accept (line 3148) | function yy_accept()
    method doParse (line 3165) | function doParse($yymajor, $yytokenvalue)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_utility.php
  class Smarty_Internal_Utility (line 41) | class Smarty_Internal_Utility {
    method __construct (line 46) | private final function __construct()
    method compileAllTemplates (line 61) | public static function compileAllTemplates($extention, $force_compile,...
    method compileAllConfig (line 125) | public static function compileAllConfig($extention, $force_compile, $t...
    method clearCompiledTemplate (line 184) | public static function clearCompiledTemplate($resource_name, $compile_...
    method getTags (line 278) | public static function getTags(Smarty_Internal_Template $template)
    method testInstall (line 295) | public static function testInstall(Smarty $smarty, &$errors=null)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_internal_write_file.php
  class Smarty_Internal_Write_File (line 16) | class Smarty_Internal_Write_File {
    method writeFile (line 26) | public static function writeFile($_filepath, $_contents, Smarty $smarty)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_resource.php
  class Smarty_Resource (line 18) | abstract class Smarty_Resource {
    method getContent (line 74) | public abstract function getContent(Smarty_Template_Source $source);
    method populate (line 82) | public abstract function populate(Smarty_Template_Source $source, Smar...
    method populateTimestamp (line 89) | public function populateTimestamp(Smarty_Template_Source $source)
    method buildUniqueResourceName (line 102) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...
    method populateCompiledFilepath (line 113) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...
    method normalizePath (line 155) | protected function normalizePath($_path, $ds=true)
    method buildFilepath (line 201) | protected function buildFilepath(Smarty_Template_Source $source, Smart...
    method fileExists (line 347) | protected function fileExists(Smarty_Template_Source $source, $file)
    method getBasename (line 360) | protected function getBasename(Smarty_Template_Source $source)
    method load (line 372) | public static function load(Smarty $smarty, $type)
    method parseResourceName (line 458) | protected static function parseResourceName($resource_name, $default_r...
    method getUniqueTemplateName (line 488) | public static function getUniqueTemplateName($smarty, $template_resource)
    method source (line 506) | public static function source(Smarty_Internal_Template $_template=null...
    method config (line 542) | public static function config(Smarty_Internal_Config $_config)
  class Smarty_Template_Source (line 591) | class Smarty_Template_Source {
    method __construct (line 687) | public function __construct(Smarty_Resource $handler, Smarty $smarty, ...
    method getCompiled (line 710) | public function getCompiled(Smarty_Internal_Template $_template)
    method renderUncompiled (line 734) | public function renderUncompiled(Smarty_Internal_Template $_template)
    method __set (line 746) | public function __set($property_name, $value)
    method __get (line 770) | public function __get($property_name)
  class Smarty_Template_Compiled (line 799) | class Smarty_Template_Compiled {
    method __construct (line 850) | public function __construct(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_resource_custom.php
  class Smarty_Resource_Custom (line 18) | abstract class Smarty_Resource_Custom extends Smarty_Resource {
    method fetch (line 27) | protected abstract function fetch($name, &$source, &$mtime);
    method fetchTimestamp (line 38) | protected function fetchTimestamp($name)
    method populate (line 49) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 73) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 89) | protected function getBasename(Smarty_Template_Source $source)

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_resource_recompiled.php
  class Smarty_Resource_Recompiled (line 18) | abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
    method populateCompiledFilepath (line 27) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_resource_uncompiled.php
  class Smarty_Resource_Uncompiled (line 18) | abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
    method renderUncompiled (line 27) | public abstract function renderUncompiled(Smarty_Template_Source $sour...
    method populateCompiledFilepath (line 35) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...

FILE: packages/chameleon-templates/server/smarty/sysplugins/smarty_security.php
  class Smarty_Security (line 22) | class Smarty_Security {
    method __construct (line 172) | public function __construct($smarty)
    method isTrustedPhpFunction (line 185) | public function isTrustedPhpFunction($function_name, $compiler)
    method isTrustedStaticClass (line 203) | public function isTrustedStaticClass($class_name, $compiler)
    method isTrustedPhpModifier (line 221) | public function isTrustedPhpModifier($modifier_name, $compiler)
    method isTrustedTag (line 239) | public function isTrustedTag($tag_name, $compiler)
    method isTrustedModifier (line 269) | public function isTrustedModifier($modifier_name, $compiler)
    method isTrustedStream (line 297) | public function isTrustedStream($stream_name)
    method isTrustedResourceDir (line 313) | public function isTrustedResourceDir($filepath)
    method isTrustedUri (line 395) | public function isTrustedUri($uri)
    method isTrustedPHPDir (line 417) | public function isTrustedPHPDir($filepath)

FILE: packages/chameleon-templates/todo-demo/src/store/index/action-types.js
  constant INDEX_CHANGE_TODOS (line 4) | const INDEX_CHANGE_TODOS = 'INDEX_CHANGE_TODOS'
  constant INDEX_ADD_TODOS (line 6) | const INDEX_ADD_TODOS = 'INDEX_ADD_TODOS'
  constant INDEX_DELETE_TODOS (line 8) | const INDEX_DELETE_TODOS = 'INDEX_DELETE_TODOS'
  constant INDEX_TOP_TODOS (line 10) | const INDEX_TOP_TODOS = 'INDEX_TOP_TODOS'
  constant INDEX_CHANGE_TODOS_STATUS (line 12) | const INDEX_CHANGE_TODOS_STATUS = 'INDEX_CHANGE_TODOS_STATUS'
  constant INDEX_CHANGE_TODOS_CLEAR_COMPLETED (line 14) | const INDEX_CHANGE_TODOS_CLEAR_COMPLETED = 'INDEX_CHANGE_TODOS_CLEAR_COM...

FILE: packages/chameleon-templates/todo-demo/src/store/index/actions.js
  method [actionTypes.INDEX_ADD_TODOS] (line 5) | [actionTypes.INDEX_ADD_TODOS]({commit, state}, something) {
  method [actionTypes.INDEX_DELETE_TODOS] (line 16) | [actionTypes.INDEX_DELETE_TODOS]({commit, state}, index) {
  method [actionTypes.INDEX_TOP_TODOS] (line 21) | [actionTypes.INDEX_TOP_TODOS]({commit, state}, index) {
  method [actionTypes.INDEX_CHANGE_TODOS_STATUS] (line 27) | [actionTypes.INDEX_CHANGE_TODOS_STATUS]({commit, state}, {index, status}) {
  method [actionTypes.INDEX_CHANGE_TODOS_CLEAR_COMPLETED] (line 32) | [actionTypes.INDEX_CHANGE_TODOS_CLEAR_COMPLETED]({commit, state}) {

FILE: packages/chameleon-templates/todo-demo/src/store/index/getter-types.js
  constant INDEX_DESC_TODOS (line 2) | const INDEX_DESC_TODOS = 'INDEX_DESC_TODOS'

FILE: packages/chameleon-templates/todo-demo/src/store/index/mutation-types.js
  constant INDEX_CHANGE_TODOS (line 2) | const INDEX_CHANGE_TODOS = 'INDEX_CHANGE_TODOS'

FILE: packages/chameleon-templates/todo-demo/src/store/index/mutations.js
  method [types.INDEX_CHANGE_TODOS] (line 4) | [types.INDEX_CHANGE_TODOS](state, todos) {

FILE: packages/chameleon-templates/todo-demo/src/store/utils.js
  function checkDuplicate (line 2) | function checkDuplicate(list) {

FILE: packages/chameleon-tool-utils/src/index.js
  constant IS_WIN (line 6) | const IS_WIN = process.platform.indexOf('win') === 0;
  function find (line 885) | function find(interfacePath, content, cmlType) {
  function getPluginKey (line 1065) | function getPluginKey(type, key) {
  function addExport (line 1073) | function addExport(filePath) {

FILE: packages/chameleon-tool-utils/src/lib/splitParts.js
  function makeMap (line 4) | function makeMap(
  function cached (line 26) | function cached(fn) {
  function polyfillBind (line 56) | function polyfillBind(fn, ctx) {
  function decodeAttr (line 151) | function decodeAttr(value, shouldDecodeNewlines) {
  function parseHTML (line 158) | function parseHTML(html, options) {
  function splitParts (line 441) | function splitParts(

FILE: packages/chameleon-tool-utils/test/index.test.js
  method get (line 511) | get() {
  method get (line 524) | get() {
  method get (line 537) | get() {
  method get (line 556) | get() {
  method get (line 575) | get() {
  method get (line 592) | get() {
  method get (line 609) | get() {
  method get (line 626) | get() {
  method get (line 647) | get() {

FILE: packages/chameleon-tool/commanders/alipay/index.js
  function handlerCmd (line 43) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/commanders/baidu/index.js
  function handlerCmd (line 39) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/commanders/ext/index.js
  function handlerCmd (line 43) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/commanders/init/index.js
  function initMethod (line 91) | function initMethod(type) {
  function initProject (line 113) | function initProject() {
  function initPage (line 236) | function initPage() {
  function initComponent (line 272) | function initComponent() {

FILE: packages/chameleon-tool/commanders/qq/index.js
  function handlerCmd (line 42) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/commanders/server/index.js
  function handlerCmd (line 37) | function handlerCmd(cmd) {

FILE: packages/chameleon-tool/commanders/tt/index.js
  function handlerCmd (line 37) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/commanders/utils.js
  function startCmlLinter (line 221) | function startCmlLinter(media) {

FILE: packages/chameleon-tool/commanders/web/apiMiddleware.js
  function getJsFiles (line 6) | function getJsFiles (dir) {

FILE: packages/chameleon-tool/commanders/web/dev-server.js
  function startServer (line 146) | function startServer() {
  function updateServerTpl (line 259) | function updateServerTpl() {

FILE: packages/chameleon-tool/commanders/web/dynamicApiMiddleware.js
  function getJsFiles (line 5) | function getJsFiles(dir) {

FILE: packages/chameleon-tool/commanders/web/index.js
  function handlerCmd (line 40) | function handlerCmd(cmd) {

FILE: packages/chameleon-tool/commanders/weex/index.js
  function handlerCmd (line 41) | function handlerCmd(cmd) {

FILE: packages/chameleon-tool/commanders/weex/socket-server.js
  function broadcast (line 7) | function broadcast(message) {
  function startServer (line 23) | function startServer (options) {

FILE: packages/chameleon-tool/commanders/wx/index.js
  function handlerCmd (line 37) | function handlerCmd (cmd) {

FILE: packages/chameleon-tool/configs/component_export/dependencies.js
  class Dependencies (line 5) | class Dependencies {
    method constructor (line 6) | constructor() {
    method initDependency (line 16) | initDependency() {
    method addDependency (line 26) | addDependency(name, version) {
    method addDependencyByPath (line 30) | addDependencyByPath(path) {
    method getDependencies (line 39) | getDependencies() {

FILE: packages/chameleon-tool/configs/component_export/export-loader.js
  function inNodeModules (line 38) | function inNodeModules(target, modules) {
  function replaceCmlPath (line 43) | function replaceCmlPath(content, filename, options) {
  function replaceCmss (line 91) | function replaceCmss(content, options) {

FILE: packages/chameleon-tool/configs/component_export/exportPlugin.js
  class ExportPlugin (line 5) | class ExportPlugin {
    method constructor (line 6) | constructor(opts) {
    method apply (line 12) | apply(compiler) {

FILE: packages/chameleon-tool/configs/component_export/getWebExportConfig.js
  function getstaticPath (line 25) | function getstaticPath(filetype) {
  function getJsPath (line 29) | function getJsPath() {

FILE: packages/chameleon-tool/configs/component_export/getWebExportConfig_new.js
  function getstaticPath (line 21) | function getstaticPath(filetype) {
  function getJsPath (line 25) | function getJsPath() {

FILE: packages/chameleon-tool/configs/component_export/getWeexExportConfig.js
  function getstaticPath (line 25) | function getstaticPath(filetype) {
  function getJsPath (line 29) | function getJsPath() {

FILE: packages/chameleon-tool/configs/component_export/getWeexExportConfig_new.js
  function getstaticPath (line 19) | function getstaticPath(filetype) {
  function getJsPath (line 23) | function getJsPath() {

FILE: packages/chameleon-tool/configs/component_export/postcssPlugin.js
  function emitCss (line 12) | function emitCss(root, options) {

FILE: packages/chameleon-tool/configs/component_export/utils.js
  function getFileDepth (line 31) | function getFileDepth(entryPath, filePath) {

FILE: packages/chameleon-tool/configs/default/rem.js
  function setBodyFontSize (line 8) | function setBodyFontSize () {
  function setRemUnit (line 19) | function setRemUnit () {

FILE: packages/chameleon-tool/configs/getCommonConfig.js
  function getstaticPath (line 26) | function getstaticPath(filetype) {

FILE: packages/chameleon-tool/configs/getMiniAppCommonConfig.js
  function getJsonpFunction (line 160) | function getJsonpFunction(root) {

FILE: packages/chameleon-tool/configs/getWebCommonConfig.js
  function getJsPath (line 19) | function getJsPath() {

FILE: packages/chameleon-tool/configs/mvvm/getExtendConfig.js
  function getCmlLoaders (line 31) | function getCmlLoaders() {

FILE: packages/chameleon-tool/configs/plugins/CopyNpmPLugin.js
  class CopyNpmPLugin (line 5) | class CopyNpmPLugin {
    method constructor (line 6) | constructor(options) {
    method apply (line 10) | apply(compiler) {

FILE: packages/chameleon-tool/configs/plugins/miniAppBaseCssAdd.js
  class miniappBaseCssAdd (line 3) | class miniappBaseCssAdd {
    method constructor (line 4) | constructor(options) {
    method apply (line 9) | apply(compiler) {

FILE: packages/chameleon-tool/configs/plugins/miniAppSubPkg.js
  class MiniAppSubPkg (line 7) | class MiniAppSubPkg {
    method constructor (line 8) | constructor(options) {
    method apply (line 13) | apply(compiler) {
    method getSubpkgComp (line 57) | getSubpkgComp(subPagesRoot, compilation) {
    method handleJsContent (line 65) | handleJsContent(pathArr, compilation) {

FILE: packages/chameleon-tool/configs/preview-assets/qrcode.js
  function qrPolynomial (line 810) | function qrPolynomial(num, shift) {
  function toUTF8Array (line 1669) | function toUTF8Array(str) {

FILE: packages/chameleon-tool/configs/utils.js
  function getPostCssLoader (line 26) | function getPostCssLoader(type) {
  function getMiniappLoader (line 38) | function getMiniappLoader(type) {
  function addMediaLoader (line 53) | function addMediaLoader(loaders, type) {
  function generateLoaders (line 66) | function generateLoaders(loader, loaderOptions) {
  function addEntry (line 309) | function addEntry(chameleonFilePath) {
  function addEntry (line 478) | function addEntry(chameleonFilePath) {
  function addEntry (line 549) | function addEntry(chameleonFilePath) {

FILE: packages/chameleon-tool/configs/weex_liveload/WeexWebSocket.js
  class WeexWebSocket (line 4) | class WeexWebSocket {
    method constructor (line 5) | constructor(url, protocal) {
    method init (line 11) | init(url, protocal) {
    method onopen (line 15) | onopen(cb) {
    method onmessage (line 20) | onmessage(cb) {
    method onerror (line 24) | onerror(cb) {
    method onclose (line 28) | onclose(cb) {
    method send (line 32) | send(...args) {
    method close (line 36) | close(...args) {
    method _adapter (line 40) | _adapter(key, cb) {

FILE: packages/chameleon-tool/lib/cli.js
  function version (line 39) | function version() {

FILE: packages/chameleon-tool/lib/config.js
  function clone (line 9) | function clone (value) {

FILE: packages/chameleon-vue-precompiler/lib/precompiler/config.js
  function hyphen (line 4) | function hyphen (key) {
  function formatStyleNames (line 10) | function formatStyleNames (scaleStyles) {
  constant COM_FIELDS (line 18) | const COM_FIELDS = [
  constant EXTRA_FIELDS (line 24) | const EXTRA_FIELDS = {
  function mergeComponentField (line 192) | function mergeComponentField(usrConf) {
  function mergeExtra (line 204) | function mergeExtra(usrConf) {

FILE: packages/chameleon-vue-precompiler/lib/precompiler/hooks/events.js
  function checkParents (line 16) | function checkParents (el, flags, checks) {
  function checkBubble (line 67) | function checkBubble (el) {
  function bindEvents (line 83) | function bindEvents(evts, el, attrs, cmlEvents, appearAttached) {

FILE: packages/chameleon-vue-precompiler/lib/precompiler/hooks/style-binding.js
  function transformArray (line 13) | function transformArray (ast, tagName, rootValue) {
  function transformConditional (line 30) | function transformConditional (ast, tagName, rootValue) {
  function transformObject (line 41) | function transformObject (ast, tagName, rootValue) {
  function transformLiteral (line 59) | function transformLiteral (...args) {
  function transformIdentifier (line 69) | function transformIdentifier (...args) {
  function transformMember (line 76) | function transformMember (...args) {
  function transformCall (line 83) | function transformCall (ast, ...args) {
  function transformAsValue (line 95) | function transformAsValue (ast, tagName, rootValue) {
  function transformAsWhole (line 120) | function transformAsWhole (ast, tagName, rootValue) {
  function transformNode (line 146) | function transformNode (ast, tagName, rootValue, asPropValue) {
  function styleBindingHook (line 176) | function styleBindingHook (

FILE: packages/chameleon-vue-precompiler/lib/precompiler/index.js
  class Precompiler (line 6) | class Precompiler {
    method constructor (line 20) | constructor (usrConf) {
    method compile (line 25) | compile (el) {

FILE: packages/chameleon-vue-precompiler/lib/precompiler/util/index.js
  constant ARRAY_STRING (line 19) | const ARRAY_STRING = '[object Array]'

FILE: packages/chameleon-webpack-plugin/index.js
  class ChameleonWebpackPlugin (line 4) | class ChameleonWebpackPlugin {
    method constructor (line 5) | constructor(options) {
    method apply (line 20) | apply(compiler) {

FILE: packages/chameleon-webpack-plugin/lib/chunkhash.js
  function sortById (line 53) | function sortById(a, b) {
  function getModuleSource (line 61) | function getModuleSource(module) {
  function concatenateSource (line 69) | function concatenateSource(result, module) {

FILE: packages/chameleon-webpack-plugin/lib/moduleId.js
  function moduleIdHandle (line 36) | function moduleIdHandle(module, usedIds) {

FILE: packages/chameleon-weex-vue-loader/lib/loader.js
  function hasRecyclable (line 49) | function hasRecyclable (template) {
  function getRawRequest (line 56) | function getRawRequest (
  function getRequire (line 112) | function getRequire (type, part, index, scoped) {
  function getRequireString (line 118) | function getRequireString (type, part, index, scoped) {
  function getRequireForImport (line 132) | function getRequireForImport (type, impt, scoped) {
  function getRequireForImportString (line 138) | function getRequireForImportString (type, impt, scoped) {
  function addCssModulesToLoader (line 146) | function addCssModulesToLoader (loader, part, index) {
  function stringifyLoaders (line 172) | function stringifyLoaders (loaders) {
  function getLoaderString (line 180) | function getLoaderString (type, part, index, scoped) {
  function ensureLoader (line 252) | function ensureLoader (lang) {
  function getSelectorString (line 260) | function getSelectorString (type, index) {
  function ensureBang (line 266) | function ensureBang (loader) {

FILE: packages/chameleon-weex-vue-loader/lib/parser.js
  function generateSourceMap (line 42) | function generateSourceMap (filename, source, generated) {

FILE: packages/chameleon-weex-vue-loader/lib/style-loader.js
  function convertLength (line 14) | function convertLength (k, v) {
  function genStyleString (line 28) | function genStyleString (input, loader) {

FILE: packages/chameleon-weex-vue-loader/lib/style-rewriter.js
  function isObject (line 109) | function isObject (val) {

FILE: packages/chameleon-weex-vue-loader/lib/template-compiler.js
  function toFunction (line 113) | function toFunction (code) {

FILE: packages/chameleon-weex-vue-loader/lib/template-loader.js
  function exportContent (line 16) | function exportContent (content) {

FILE: packages/cml-component-parser/index.js
  class ComponentParser (line 9) | class ComponentParser {
    method constructor (line 10) | constructor(filePath = '', options = null, currentWorkspace = '') {
    method resetPath (line 17) | resetPath(filePath) {
    method getParseResults (line 31) | getParseResults() {
    method isResultsEmpty (line 35) | isResultsEmpty() {
    method getJsonContent (line 39) | getJsonContent() {
    method getJsonResultsWithComponentName (line 43) | getJsonResultsWithComponentName() {
    method writeJsonFileToDir (line 50) | writeJsonFileToDir(dirPath, fileName = '', content = '') {
    method getReadmeContent (line 62) | getReadmeContent() {
    method writeReadmeFileToDir (line 71) | writeReadmeFileToDir(dirPath, fileName = '', content = '') {
    method flatEntrance (line 83) | static flatEntrance(entrance) {

FILE: packages/cml-component-parser/src/entrance-flat.js
  function _clean (line 5) | function _clean() {
  function _getAllEntrances (line 9) | function _getAllEntrances() {
  function _tryAppendEntrance (line 13) | function _tryAppendEntrance(entrance) {
  function getEntrances (line 36) | function getEntrances(entrance) {
  function _recursive (line 44) | function _recursive(entrance) {

FILE: packages/cml-component-parser/src/readme-builder.js
  function getDescWithTypeChain (line 8) | function getDescWithTypeChain(typeChain = [], options = {offsetTabNum: 0...
  function getReadmeFileContent (line 40) | function getReadmeFileContent(param = {}) {

FILE: packages/cml-extract-css-webpack-plugin/dist/helper.js
  function entry (line 11) | function entry(filePath) {

FILE: packages/cml-extract-css-webpack-plugin/dist/index.js
  function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 46) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 48) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function ExtractTextPlugin (line 58) | function ExtractTextPlugin(options) {
  function sortStyleModule (line 310) | function sortStyleModule(extractedChunk) {

FILE: packages/cml-extract-css-webpack-plugin/dist/lib/ExtractTextPluginCompilation.js
  function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 14) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 16) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function ExtractTextPluginCompilation (line 19) | function ExtractTextPluginCompilation() {

FILE: packages/cml-extract-css-webpack-plugin/dist/lib/ExtractedModule.js
  function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _classCallCheck (line 11) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function ExtractedModule (line 14) | function ExtractedModule(identifier, originalModule, source, sourceMap, ...

FILE: packages/cml-extract-css-webpack-plugin/dist/lib/OrderUndefinedError.js
  function OrderUndefinedError (line 6) | function OrderUndefinedError(module) {

FILE: packages/cml-extract-css-webpack-plugin/dist/lib/helpers.js
  function isInitialOrHasNoParents (line 14) | function isInitialOrHasNoParents(chunk) {
  function isInvalidOrder (line 18) | function isInvalidOrder(a, b) {
  function getOrder (line 24) | function getOrder(a, b) {
  function getLoaderObject (line 44) | function getLoaderObject(loader) {
  function mergeOptions (line 51) | function mergeOptions(a, b) {
  function isString (line 59) | function isString(a) {
  function isFunction (line 63) | function isFunction(a) {
  function isType (line 67) | function isType(type, obj) {

FILE: packages/cml-extract-css-webpack-plugin/dist/loader.js
  function _interopRequireDefault (line 40) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function pitch (line 48) | function pitch(request) {

FILE: packages/cml-htmllinter/docs/gen_options.js
  function printVal (line 35) | function printVal(v) {

FILE: packages/cml-htmllinter/lib/config.js
  function Config (line 16) | function Config(rules, options) {

FILE: packages/cml-htmllinter/lib/inline_config.js
  function applyConfig (line 46) | function applyConfig(config) {
  function parsePair (line 138) | function parsePair(name, value, pos, isOption) {

FILE: packages/cml-htmllinter/lib/issue.js
  function Issue (line 1) | function Issue(code, pos, data) {

FILE: packages/cml-htmllinter/lib/knife/apply_rules.js
  function addRuleToIssue (line 4) | function addRuleToIssue(issue, ruleName) {
  function runHooks (line 17) | function runHooks(rules, element, opts) {

FILE: packages/cml-htmllinter/lib/knife/lang_tag.js
  function checkLang (line 22) | function checkLang(code) {
  function checkCountry (line 54) | function checkCountry(code) {

FILE: packages/cml-htmllinter/lib/linter.js
  function rawIgnoreRegex (line 38) | function rawIgnoreRegex(html, opts) {

FILE: packages/cml-htmllinter/lib/process_option.js
  function getRegExp (line 11) | function getRegExp(val, strFn) {

FILE: packages/cml-htmllinter/lib/rules/component-attr-check.js
  function toCamelcase (line 23) | function toCamelcase(str = '') {
  function toDash (line 30) | function toDash(str = '') {
  function getRegExecRes (line 36) | function getRegExecRes(reg, str) {

FILE: packages/cml-htmllinter/lib/rules/doctype-first.js
  function isWhitespace (line 47) | function isWhitespace(element) {

FILE: packages/cml-htmllinter/lib/rules/input-req-label.js
  function getAttrVal (line 38) | function getAttrVal(name) {

FILE: packages/cml-htmllinter/lib/rules/link-req-noopener.js
  function getVal (line 17) | function getVal(a, value) {

FILE: packages/cml-htmllinter/lib/rules/spec-char-escape.js
  function addIssues (line 41) | function addIssues(text, lineCol, partDesc) {

FILE: packages/cml-htmllinter/lib/rules/text-forbid-raw.js
  function getPosOffset (line 11) | function getPosOffset(str) {

FILE: packages/cml-htmllinter/repl.js
  function handler (line 15) | function handler(result) {

FILE: packages/cml-htmllinter/test/functional/runner.test.js
  function createLinter (line 26) | function createLinter(names) {
  function doTest (line 30) | function doTest(funcTest, testFile) {

FILE: packages/cml-htmllinter/test/unit/raw-ignore-regex.js
  function meetExpectations (line 19) | function meetExpectations(issues, locs) {
  function expectOutput (line 35) | function expectOutput(ignore, expected, html) {
  function findE (line 47) | function findE(lines) {

FILE: packages/cml-interface-parser/index.js
  class InterfaceParser (line 7) | class InterfaceParser {
    method constructor (line 16) | constructor({filePath = null, astTree = null}, options = null, current...
    method getAstTreeFromFile (line 31) | getAstTreeFromFile(filePath) {
    method getParseResults (line 42) | getParseResults() {

FILE: packages/cml-interface-parser/src/ast-tree-parser.js
  function getTypeAliasInfo (line 5) | function getTypeAliasInfo(bodyItem = {}) {
  function getTypeAliasChain (line 30) | function getTypeAliasChain(typeDefinations, propItem) {
  function parse (line 45) | function parse(astTree) {

FILE: packages/cml-interface-parser/src/file-reader.js
  function _retrieveInterfaceContent (line 7) | function _retrieveInterfaceContent(filePath = null, currentWorkspace = '...
  function getContent (line 43) | function getContent(filePath = null, currentWorkspace = '') {

FILE: packages/cml-js-parser/index.js
  class CmlJSParser (line 8) | class CmlJSParser {
    method constructor (line 17) | constructor({filePath = null, astTree = null}, options = null) {
    method getAstTreeFromFile (line 31) | getAstTreeFromFile(filePath) {
    method getParseResults (line 42) | getParseResults() {

FILE: packages/cml-js-parser/src/file-reader.js
  function getContent (line 4) | function getContent(filePath = null) {

FILE: packages/cml-js-parser/src/visitors/containerPathVisitor.js
  function getObjectKeyName (line 1) | function getObjectKeyName(node) {
  function isValidProp (line 5) | function isValidProp(node) {
  function adoptPropResults (line 12) | function adoptPropResults(res, container) {
  method 'ClassProperty|ObjectProperty' (line 142) | 'ClassProperty|ObjectProperty'(path) {
  method MemberExpression (line 148) | MemberExpression(path) {

FILE: packages/cml-vue-loader/lib/helpers.js
  function getRawRequest (line 33) | function getRawRequest (
  function ensureLoader (line 47) | function ensureLoader (lang) {
  function ensureBang (line 60) | function ensureBang (loader) {
  function resolveLoaders (line 68) | function resolveLoaders (
  function getRequire (line 151) | function getRequire (type, part, index, scoped) {
  function getImport (line 155) | function getImport (type, part, index, scoped) {
  function getNamedExports (line 162) | function getNamedExports (type, part, index, scoped) {
  function getRequestString (line 169) | function getRequestString (type, part, index, scoped) {
  function getRequireForSrc (line 183) | function getRequireForSrc (type, impt, scoped) {
  function getImportForSrc (line 187) | function getImportForSrc (type, impt, scoped) {
  function getNamedExportsForSrc (line 194) | function getNamedExportsForSrc (type, impt, scoped) {
  function getSrcRequestString (line 201) | function getSrcRequestString (type, impt, scoped) {
  function addCssModulesToLoader (line 208) | function addCssModulesToLoader (loader, part, index) {
  function buildCustomBlockLoaderString (line 234) | function buildCustomBlockLoaderString (attrs) {
  function stringifyLoaders (line 242) | function stringifyLoaders (loaders) {
  function getLoaderString (line 254) | function getLoaderString (type, part, index, scoped) {
  function getLangString (line 266) | function getLangString (type, { lang }) {
  function getRawLoaderString (line 274) | function getRawLoaderString (type, part, index, scoped) {
  function getSelectorString (line 357) | function getSelectorString (type, index) {

FILE: packages/cml-vue-loader/lib/parser.js
  function generateSourceMap (line 40) | function generateSourceMap (filename, source, generated, sourceRoot) {

FILE: packages/cml-vue-loader/lib/runtime/component-normalizer.js
  function normalizeComponent (line 7) | function normalizeComponent (

FILE: packages/cml-vue-loader/lib/style-compiler/load-postcss-config.js
  function isObject (line 5) | function isObject (val) {

FILE: packages/cml-vue-loader/lib/template-compiler/index.js
  function toFunction (line 97) | function toFunction (code, stripWithFunctional) {
  function pad (line 103) | function pad (html) {

FILE: packages/cml-vue-loader/lib/template-compiler/modules/transform-require.js
  function transform (line 24) | function transform (node, options) {
  function rewrite (line 37) | function rewrite (attr, name) {

FILE: packages/cml-vue-loader/lib/template-compiler/modules/transform-srcset.js
  function transform (line 11) | function transform (node) {

FILE: packages/cml-vue-loader/lib/utils/normalize.js
  constant IS_TEST (line 1) | const IS_TEST = !!process.env.VUE_LOADER_TEST

FILE: packages/cml-vue-loader/lib/utils/options-cache.js
  function serialize (line 65) | function serialize (options) {
  function getidToOptionsPath (line 75) | function getidToOptionsPath (id) {

FILE: packages/easy-chameleon/config/getWebpackConfig.js
  function resolve (line 42) | function resolve (dir) {
  function getstaticPath (line 123) | function getstaticPath (filetype) {
  function getCmlLoaders (line 192) | function getCmlLoaders (options) {

FILE: packages/easy-chameleon/config/utils.js
  function getPostCssLoader (line 18) | function getPostCssLoader(type) {
  function getMiniappLoader (line 30) | function getMiniappLoader(type) {
  function addMediaLoader (line 44) | function addMediaLoader(loaders, type) {
  function generateLoaders (line 57) | function generateLoaders(loader, loaderOptions) {
  function addEntry (line 221) | function addEntry(chameleonFilePath){

FILE: packages/interface-loader/src/lib/check.js
  method enter (line 16) | enter(path) {
  function throwError (line 373) | function throwError(content) {
  function throwError (line 384) | function throwError(content) {

FILE: packages/interface-loader/test/lib.test/generator.test.js
  function generator (line 12) | function generator(code, cb) {

FILE: packages/mvvm-babel-generator/lib/buffer.js
  function _trimRight (line 8) | function _trimRight() {
  function _interopRequireDefault (line 18) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  constant SPACES_RE (line 20) | const SPACES_RE = /^[ \t]+$/;
  class Buffer (line 22) | class Buffer {
    method constructor (line 23) | constructor(map) {
    method get (line 42) | get() {
    method append (line 74) | append(str) {
    method queue (line 88) | queue(str) {
    method _flush (line 106) | _flush() {
    method _append (line 112) | _append(str, line, column, identifierName, filename, force) {
    method removeTrailingNewline (line 131) | removeTrailingNewline() {
    method removeLastSemicolon (line 137) | removeLastSemicolon() {
    method endsWith (line 143) | endsWith(suffix) {
    method hasContent (line 166) | hasContent() {
    method exactSource (line 170) | exactSource(loc, cb) {
    method source (line 178) | source(prop, loc, force) {
    method withSource (line 184) | withSource(prop, loc, cb) {
    method _disallowPop (line 203) | _disallowPop(prop, loc) {
    method _normalizePosition (line 208) | _normalizePosition(prop, loc, targetObj, force) {
    method getCurrentColumn (line 236) | getCurrentColumn() {
    method getCurrentLine (line 243) | getCurrentLine() {

FILE: packages/mvvm-babel-generator/lib/generators/base.js
  function File (line 14) | function File(node) {
  function Program (line 22) | function Program(node) {
  function BlockStatement (line 29) | function BlockStatement(node) {
  function Noop (line 53) | function Noop() {}
  function Directive (line 55) | function Directive(node) {
  function DirectiveLiteral (line 63) | function DirectiveLiteral(node) {
  function InterpreterDirective (line 84) | function InterpreterDirective(node) {

FILE: packages/mvvm-babel-generator/lib/generators/classes.js
  function t (line 14) | function t() {
  function _interopRequireWildcard (line 24) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function ClassDeclaration (line 26) | function ClassDeclaration(node, parent) {
  function ClassBody (line 69) | function ClassBody(node) {
  function ClassProperty (line 85) | function ClassProperty(node) {
  function ClassPrivateProperty (line 138) | function ClassPrivateProperty(node) {
  function ClassMethod (line 157) | function ClassMethod(node) {
  function ClassPrivateMethod (line 164) | function ClassPrivateMethod(node) {
  function _classMethodHead (line 171) | function _classMethodHead(node) {

FILE: packages/mvvm-babel-generator/lib/generators/expressions.js
  function t (line 30) | function t() {
  function _interopRequireWildcard (line 42) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function UnaryExpression (line 44) | function UnaryExpression(node) {
  function DoExpression (line 55) | function DoExpression(node) {
  function ParenthesizedExpression (line 61) | function ParenthesizedExpression(node) {
  function UpdateExpression (line 67) | function UpdateExpression(node) {
  function ConditionalExpression (line 79) | function ConditionalExpression(node) {
  function NewExpression (line 91) | function NewExpression(node, parent) {
  function SequenceExpression (line 114) | function SequenceExpression(node) {
  function ThisExpression (line 118) | function ThisExpression() {
  function Super (line 122) | function Super() {
  function Decorator (line 126) | function Decorator(node) {
  function OptionalMemberExpression (line 132) | function OptionalMemberExpression(node) {
  function OptionalCallExpression (line 162) | function OptionalCallExpression(node) {
  function CallExpression (line 176) | function CallExpression(node) {
  function Import (line 185) | function Import() {
  function buildYieldAwait (line 189) | function buildYieldAwait(keyword) {
  function EmptyStatement (line 211) | function EmptyStatement() {
  function ExpressionStatement (line 215) | function ExpressionStatement(node) {
  function AssignmentPattern (line 220) | function AssignmentPattern(node) {
  function AssignmentExpression (line 230) | function AssignmentExpression(node, parent) {
  function BindExpression (line 254) | function BindExpression(node) {
  function MemberExpression (line 260) | function MemberExpression(node) {
  function MetaProperty (line 283) | function MetaProperty(node) {
  function PrivateName (line 289) | function PrivateName(node) {

FILE: packages/mvvm-babel-generator/lib/generators/flow.js
  function t (line 69) | function t() {
  function _interopRequireWildcard (line 83) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function AnyTypeAnnotation (line 85) | function AnyTypeAnnotation() {
  function ArrayTypeAnnotation (line 89) | function ArrayTypeAnnotation(node) {
  function BooleanTypeAnnotation (line 95) | function BooleanTypeAnnotation() {
  function BooleanLiteralTypeAnnotation (line 99) | function BooleanLiteralTypeAnnotation(node) {
  function NullLiteralTypeAnnotation (line 103) | function NullLiteralTypeAnnotation() {
  function DeclareClass (line 107) | function DeclareClass(node, parent) {
  function DeclareFunction (line 119) | function DeclareFunction(node, parent) {
  function InferredPredicate (line 138) | function InferredPredicate() {
  function DeclaredPredicate (line 143) | function DeclaredPredicate(node) {
  function DeclareInterface (line 151) | function DeclareInterface(node) {
  function DeclareModule (line 157) | function DeclareModule(node) {
  function DeclareModuleExports (line 167) | function DeclareModuleExports(node) {
  function DeclareTypeAlias (line 176) | function DeclareTypeAlias(node) {
  function DeclareOpaqueType (line 182) | function DeclareOpaqueType(node, parent) {
  function DeclareVariable (line 191) | function DeclareVariable(node, parent) {
  function DeclareExportDeclaration (line 204) | function DeclareExportDeclaration(node) {
  function DeclareExportAllDeclaration (line 218) | function DeclareExportAllDeclaration() {
  function FlowExportDeclaration (line 225) | function FlowExportDeclaration(node) {
  function ExistsTypeAnnotation (line 252) | function ExistsTypeAnnotation() {
  function FunctionTypeAnnotation (line 256) | function FunctionTypeAnnotation(node, parent) {
  function FunctionTypeParam (line 284) | function FunctionTypeParam(node) {
  function InterfaceExtends (line 296) | function InterfaceExtends(node) {
  function _interfaceish (line 301) | function _interfaceish(node) {
  function _variance (line 330) | function _variance(node) {
  function InterfaceDeclaration (line 340) | function InterfaceDeclaration(node) {
  function andSeparator (line 347) | function andSeparator() {
  function InterfaceTypeAnnotation (line 353) | function InterfaceTypeAnnotation(node) {
  function IntersectionTypeAnnotation (line 367) | function IntersectionTypeAnnotation(node) {
  function MixedTypeAnnotation (line 373) | function MixedTypeAnnotation() {
  function EmptyTypeAnnotation (line 377) | function EmptyTypeAnnotation() {
  function NullableTypeAnnotation (line 381) | function NullableTypeAnnotation(node) {
  function NumberTypeAnnotation (line 386) | function NumberTypeAnnotation() {
  function StringTypeAnnotation (line 390) | function StringTypeAnnotation() {
  function ThisTypeAnnotation (line 394) | function ThisTypeAnnotation() {
  function TupleTypeAnnotation (line 398) | function TupleTypeAnnotation(node) {
  function TypeofTypeAnnotation (line 404) | function TypeofTypeAnnotation(node) {
  function TypeAlias (line 410) | function TypeAlias(node) {
  function TypeAnnotation (line 422) | function TypeAnnotation(node) {
  function TypeParameterInstantiation (line 429) | function TypeParameterInstantiation(node) {
  function TypeParameter (line 435) | function TypeParameter(node) {
  function OpaqueType (line 452) | function OpaqueType(node) {
  function ObjectTypeAnnotation (line 476) | function ObjectTypeAnnotation(node) {
  function ObjectTypeInternalSlot (line 511) | function ObjectTypeInternalSlot(node) {
  function ObjectTypeCallProperty (line 532) | function ObjectTypeCallProperty(node) {
  function ObjectTypeIndexer (line 541) | function ObjectTypeIndexer(node) {
  function ObjectTypeProperty (line 564) | function ObjectTypeProperty(node) {
  function ObjectTypeSpreadProperty (line 588) | function ObjectTypeSpreadProperty(node) {
  function QualifiedTypeIdentifier (line 593) | function QualifiedTypeIdentifier(node) {
  function orSeparator (line 599) | function orSeparator() {
  function UnionTypeAnnotation (line 605) | function UnionTypeAnnotation(node) {
  function TypeCastExpression (line 611) | function TypeCastExpression(node) {
  function Variance (line 618) | function Variance(node) {
  function VoidTypeAnnotation (line 626) | function VoidTypeAnnotation() {

FILE: packages/mvvm-babel-generator/lib/generators/jsx.js
  function JSXAttribute (line 22) | function JSXAttribute(node) {
  function JSXIdentifier (line 31) | function JSXIdentifier(node) {
  function JSXNamespacedName (line 35) | function JSXNamespacedName(node) {
  function JSXMemberExpression (line 41) | function JSXMemberExpression(node) {
  function JSXSpreadAttribute (line 47) | function JSXSpreadAttribute(node) {
  function JSXExpressionContainer (line 54) | function JSXExpressionContainer(node) {
  function JSXSpreadChild (line 60) | function JSXSpreadChild(node) {
  function JSXText (line 67) | function JSXText(node) {
  function JSXElement (line 77) | function JSXElement(node) {
  function spaceSeparator (line 91) | function spaceSeparator() {
  function JSXOpeningElement (line 95) | function JSXOpeningElement(node) {
  function JSXClosingElement (line 115) | function JSXClosingElement(node) {
  function JSXEmptyExpression (line 121) | function JSXEmptyExpression(node) {
  function JSXFragment (line 125) | function JSXFragment(node) {
  function JSXOpeningFragment (line 137) | function JSXOpeningFragment() {
  function JSXClosingFragment (line 142) | function JSXClosingFragment() {

FILE: packages/mvvm-babel-generator/lib/generators/methods.js
  function t (line 15) | function t() {
  function _interopRequireWildcard (line 25) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _params (line 27) | function _params(node) {
  function _parameters (line 37) | function _parameters(parameters, parent) {
  function _param (line 48) | function _param(parameter, parent) {
  function _methodHead (line 55) | function _methodHead(node) {
  function _predicate (line 90) | function _predicate(node) {
  function _functionHead (line 101) | function _functionHead(node) {
  function FunctionExpression (line 120) | function FunctionExpression(node) {
  function ArrowFunctionExpression (line 127) | function ArrowFunctionExpression(node) {
  function hasTypes (line 165) | function hasTypes(node, param) {

FILE: packages/mvvm-babel-generator/lib/generators/modules.js
  function t (line 17) | function t() {
  function _interopRequireWildcard (line 27) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function ImportSpecifier (line 29) | function ImportSpecifier(node) {
  function ImportDefaultSpecifier (line 45) | function ImportDefaultSpecifier(node) {
  function ExportDefaultSpecifier (line 49) | function ExportDefaultSpecifier(node) {
  function ExportSpecifier (line 53) | function ExportSpecifier(node) {
  function ExportNamespaceSpecifier (line 64) | function ExportNamespaceSpecifier(node) {
  function ExportAllDeclaration (line 72) | function ExportAllDeclaration(node) {
  function ExportNamedDeclaration (line 89) | function ExportNamedDeclaration(node) {
  function ExportDefaultDeclaration (line 99) | function ExportDefaultDeclaration(node) {
  function ExportDeclaration (line 111) | function ExportDeclaration(node) {
  function ImportDeclaration (line 164) | function ImportDeclaration(node) {
  function ImportNamespaceSpecifier (line 208) | function ImportNamespaceSpecifier(node) {

FILE: packages/mvvm-babel-generator/lib/generators/statements.js
  function t (line 21) | function t() {
  function _interopRequireWildcard (line 31) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function WithStatement (line 33) | function WithStatement(node) {
  function IfStatement (line 42) | function IfStatement(node) {
  function getLastStatement (line 73) | function getLastStatement(statement) {
  function ForStatement (line 78) | function ForStatement(node) {
  function WhileStatement (line 103) | function WhileStatement(node) {
  function DoWhileStatement (line 138) | function DoWhileStatement(node) {
  function buildLabelStatement (line 151) | function buildLabelStatement(prefix, key = "label") {
  function LabeledStatement (line 177) | function LabeledStatement(node) {
  function TryStatement (line 184) | function TryStatement(node) {
  function CatchClause (line 204) | function CatchClause(node) {
  function SwitchStatement (line 218) | function SwitchStatement(node) {
  function SwitchCase (line 237) | function SwitchCase(node) {
  function DebuggerStatement (line 256) | function DebuggerStatement() {
  function variableDeclarationIndent (line 261) | function variableDeclarationIndent() {
  function constDeclarationIndent (line 267) | function constDeclarationIndent() {
  function VariableDeclaration (line 273) | function VariableDeclaration(node, parent) {
  function VariableDeclarator (line 308) | function VariableDeclarator(node) {

FILE: packages/mvvm-babel-generator/lib/generators/template-literals.js
  function TaggedTemplateExpression (line 10) | function TaggedTemplateExpression(node) {
  function TemplateElement (line 16) | function TemplateElement(node, parent) {
  function TemplateLiteral (line 23) | function TemplateLiteral(node) {

FILE: packages/mvvm-babel-generator/lib/generators/types.js
  function t (line 22) | function t() {
  function _jsesc (line 32) | function _jsesc() {
  function _interopRequireDefault (line 42) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _interopRequireWildcard (line 44) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function Identifier (line 46) | function Identifier(node) {
  function RestElement (line 52) | function RestElement(node) {
  function ObjectExpression (line 57) | function ObjectExpression(node) {
  function ObjectMethod (line 74) | function ObjectMethod(node) {
  function ObjectProperty (line 83) | function ObjectProperty(node) {
  function ArrayExpression (line 108) | function ArrayExpression(node) {
  function RegExpLiteral (line 129) | function RegExpLiteral(node) {
  function BooleanLiteral (line 133) | function BooleanLiteral(node) {
  function NullLiteral (line 137) | function NullLiteral() {
  function NumericLiteral (line 141) | function NumericLiteral(node) {
  function StringLiteral (line 154) | function StringLiteral(node) {
  function BigIntLiteral (line 172) | function BigIntLiteral(node) {
  function PipelineTopicExpression (line 183) | function PipelineTopicExpression(node) {
  function PipelineBareFunction (line 187) | function PipelineBareFunction(node) {
  function PipelinePrimaryTopicReference (line 191) | function PipelinePrimaryTopicReference() {

FILE: packages/mvvm-babel-generator/lib/generators/typescript.js
  function TSTypeAnnotation (line 72) | function TSTypeAnnotation(node) {
  function TSTypeParameterInstantiation (line 79) | function TSTypeParameterInstantiation(node) {
  function TSTypeParameter (line 85) | function TSTypeParameter(node) {
  function TSParameterProperty (line 103) | function TSParameterProperty(node) {
  function TSDeclareFunction (line 117) | function TSDeclareFunction(node) {
  function TSDeclareMethod (line 128) | function TSDeclareMethod(node) {
  function TSQualifiedName (line 134) | function TSQualifiedName(node) {
  function TSCallSignatureDeclaration (line 140) | function TSCallSignatureDeclaration(node) {
  function TSConstructSignatureDeclaration (line 144) | function TSConstructSignatureDeclaration(node) {
  function TSPropertySignature (line 150) | function TSPropertySignature(node) {
  function tsPrintPropertyOrMethodName (line 174) | function tsPrintPropertyOrMethodName(node) {
  function TSMethodSignature (line 190) | function TSMethodSignature(node) {
  function TSIndexSignature (line 196) | function TSIndexSignature(node) {
  function TSAnyKeyword (line 215) | function TSAnyKeyword() {
  function TSUnknownKeyword (line 219) | function TSUnknownKeyword() {
  function TSNumberKeyword (line 223) | function TSNumberKeyword() {
  function TSObjectKeyword (line 227) | function TSObjectKeyword() {
  function TSBooleanKeyword (line 231) | function TSBooleanKeyword() {
  function TSStringKeyword (line 235) | function TSStringKeyword() {
  function TSSymbolKeyword (line 239) | function TSSymbolKeyword() {
  function TSVoidKeyword (line 243) | function TSVoidKeyword() {
  function TSUndefinedKeyword (line 247) | function TSUndefinedKeyword() {
  function TSNullKeyword (line 251) | function TSNullKeyword() {
  function TSNeverKeyword (line 255) | function TSNeverKeyword() {
  function TSThisType (line 259) | function TSThisType() {
  function TSFunctionType (line 263) | function TSFunctionType(node) {
  function TSConstructorType (line 267) | function TSConstructorType(node) {
  function tsPrintFunctionOrConstructorType (line 273) | function tsPrintFunctionOrConstructorType(node) {
  function TSTypeReference (line 290) | function TSTypeReference(node) {
  function TSTypePredicate (line 295) | function TSTypePredicate(node) {
  function TSTypeQuery (line 303) | function TSTypeQuery(node) {
  function TSTypeLiteral (line 309) | function TSTypeLiteral(node) {
  function tsPrintTypeLiteralOrInterfaceBody (line 313) | function tsPrintTypeLiteralOrInterfaceBody(members, node) {
  function tsPrintBraced (line 317) | function tsPrintBraced(members, node) {
  function TSArrayType (line 336) | function TSArrayType(node) {
  function TSTupleType (line 341) | function TSTupleType(node) {
  function TSOptionalType (line 347) | function TSOptionalType(node) {
  function TSRestType (line 352) | function TSRestType(node) {
  function TSUnionType (line 357) | function TSUnionType(node) {
  function TSIntersectionType (line 361) | function TSIntersectionType(node) {
  function tsPrintUnionOrIntersectionType (line 365) | function tsPrintUnionOrIntersectionType(node, sep) {
  function TSConditionalType (line 376) | function TSConditionalType(node) {
  function TSInferType (line 392) | function TSInferType(node) {
  function TSParenthesizedType (line 398) | function TSParenthesizedType(node) {
  function TSTypeOperator (line 404) | function TSTypeOperator(node) {
  function TSIndexedAccessType (line 410) | function TSIndexedAccessType(node) {
  function TSMappedType (line 417) | function TSMappedType(node) {
  function tokenIfPlusMinus (line 452) | function tokenIfPlusMinus(self, tok) {
  function TSLiteralType (line 458) | function TSLiteralType(node) {
  function TSExpressionWithTypeArguments (line 462) | function TSExpressionWithTypeArguments(node) {
  function TSInterfaceDeclaration (line 467) | function TSInterfaceDeclaration(node) {
  function TSInterfaceBody (line 497) | function TSInterfaceBody(node) {
  function TSTypeAliasDeclaration (line 501) | function TSTypeAliasDeclaration(node) {
  function TSAsExpression (line 525) | function TSAsExpression(node) {
  function TSTypeAssertion (line 537) | function TSTypeAssertion(node) {
  function TSEnumDeclaration (line 549) | function TSEnumDeclaration(node) {
  function TSEnumMember (line 574) | function TSEnumMember(node) {
  function TSModuleDeclaration (line 591) | function TSModuleDeclaration(node) {
  function TSModuleBlock (line 626) | function TSModuleBlock(node) {
  function TSImportType (line 630) | function TSImportType(node) {
  function TSImportEqualsDeclaration (line 651) | function TSImportEqualsDeclaration(node) {
  function TSExternalModuleReference (line 673) | function TSExternalModuleReference(node) {
  function TSNonNullExpression (line 679) | function TSNonNullExpression(node) {
  function TSExportAssignment (line 684) | function TSExportAssignment(node) {
  function TSNamespaceExportDeclaration (line 693) | function TSNamespaceExportDeclaration(node) {
  function tsPrintSignatureDeclarationBase (line 703) | function tsPrintSignatureDeclarationBase(node) {

FILE: packages/mvvm-babel-generator/lib/index.js
  function _interopRequireDefault (line 13) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class Generator (line 15) | class Generator extends _printer.default {
    method constructor (line 16) | constructor(ast, opts = {}, code) {
    method generate (line 23) | generate() {
  function normalizeOptions (line 29) | function normalizeOptions(code, opts) {
  class CodeGenerator (line 76) | class CodeGenerator {
    method constructor (line 77) | constructor(ast, opts, code) {
    method generate (line 81) | generate() {
  function _default (line 89) | function _default(ast, opts, code) {

FILE: packages/mvvm-babel-generator/lib/node/index.js
  function t (line 15) | function t() {
  function _interopRequireWildcard (line 25) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function expandAliases (line 27) | function expandAliases(obj) {
  function find (line 57) | function find(obj, node, parent, printStack) {
  function isOrHasCallExpression (line 62) | function isOrHasCallExpression(node) {
  function needsWhitespace (line 74) | function needsWhitespace(node, parent, type) {
  function needsWhitespaceBefore (line 101) | function needsWhitespaceBefore(node, parent) {
  function needsWhitespaceAfter (line 105) | function needsWhitespaceAfter(node, parent) {
  function needsParens (line 109) | function needsParens(node, parent, printStack) {

FILE: packages/mvvm-babel-generator/lib/node/parentheses.js
  function t (line 28) | function t() {
  function _interopRequireWildcard (line 38) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  constant PRECEDENCE (line 40) | const PRECEDENCE = {
  function NullableTypeAnnotation (line 69) | function NullableTypeAnnotation(node, parent) {
  function FunctionTypeAnnotation (line 73) | function FunctionTypeAnnotation(node, parent) {
  function UpdateExpression (line 77) | function UpdateExpression(node, parent) {
  function ObjectExpression (line 87) | function ObjectExpression(node, parent, printStack) {
  function DoExpression (line 93) | function DoExpression(node, parent, printStack) {
  function Binary (line 97) | function Binary(node, parent) {
  function UnionTypeAnnotation (line 126) | function UnionTypeAnnotation(node, parent) {
  function TSAsExpression (line 130) | function TSAsExpression() {
  function TSTypeAssertion (line 134) | function TSTypeAssertion() {
  function TSUnionType (line 138) | function TSUnionType(node, parent) {
  function BinaryExpression (line 142) | function BinaryExpression(node, parent) {
  function SequenceExpression (line 146) | function SequenceExpression(node, parent) {
  function YieldExpression (line 154) | function YieldExpression(node, parent) {
  function ClassExpression (line 158) | function ClassExpression(node, parent, printStack) {
  function UnaryLike (line 164) | function UnaryLike(node, parent) {
  function FunctionExpression (line 177) | function FunctionExpression(node, parent, printStack) {
  function ArrowFunctionExpression (line 183) | function ArrowFunctionExpression(node, parent) {
  function ConditionalExpression (line 187) | function ConditionalExpression(node, parent) {
  function OptionalMemberExpression (line 197) | function OptionalMemberExpression(node, parent) {
  function AssignmentExpression (line 201) | function AssignmentExpression(node) {
  function NewExpression (line 209) | function NewExpression(node, parent) {
  function isFirstInStatement (line 213) | function isFirstInStatement(printStack, {

FILE: packages/mvvm-babel-generator/lib/node/whitespace.js
  function t (line 8) | function t() {
  function _interopRequireWildcard (line 18) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function crawl (line 20) | function crawl(node, state = {}) {
  function isHelper (line 39) | function isHelper(node) {
  function isType (line 53) | function isType(node) {
  method AssignmentExpression (line 58) | AssignmentExpression(node) {
  method SwitchCase (line 69) | SwitchCase(node, parent) {
  method LogicalExpression (line 76) | LogicalExpression(node) {
  method Literal (line 84) | Literal(node) {
  method CallExpression (line 92) | CallExpression(node) {
  method VariableDeclaration (line 101) | VariableDeclaration(node) {
  method IfStatement (line 120) | IfStatement(node) {
  method VariableDeclaration (line 165) | VariableDeclaration(node) {
  method ArrayExpression (line 169) | ArrayExpression(node) {
  method ObjectExpression (line 173) | ObjectExpression(node) {

FILE: packages/mvvm-babel-generator/lib/printer.js
  function _isInteger (line 8) | function _isInteger() {
  function _repeat (line 18) | function _repeat() {
  function t (line 32) | function t() {
  function _interopRequireWildcard (line 45) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 47) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  constant SCIENTIFIC_NOTATION (line 49) | const SCIENTIFIC_NOTATION = /e/i;
  constant ZERO_DECIMAL_INTEGER (line 50) | const ZERO_DECIMAL_INTEGER = /\.0+$/;
  constant NON_DECIMAL_LITERAL (line 51) | const NON_DECIMAL_LITERAL = /^0[box]/;
  class Printer (line 53) | class Printer {
    method constructor (line 54) | constructor(format, map) {
    method generate (line 70) | generate(ast) {
    method indent (line 78) | indent() {
    method dedent (line 83) | dedent() {
    method semicolon (line 88) | semicolon(force = false) {
    method rightBrace (line 94) | rightBrace() {
    method space (line 101) | space(force = false) {
    method word (line 109) | word(str) {
    method number (line 121) | number(str) {
    method token (line 126) | token(str) {
    method newline (line 136) | newline(i) {
    method endsWith (line 155) | endsWith(str) {
    method removeTrailingNewline (line 159) | removeTrailingNewline() {
    method exactSource (line 163) | exactSource(loc, cb) {
    method source (line 169) | source(prop, loc) {
    method withSource (line 175) | withSource(prop, loc, cb) {
    method _space (line 181) | _space() {
    method _newline (line 185) | _newline() {
    method _append (line 189) | _append(str, queue = false) {
    method _maybeIndent (line 199) | _maybeIndent(str) {
    method _maybeAddParen (line 205) | _maybeAddParen(str) {
    method _catchUp (line 228) | _catchUp(prop, loc) {
    method _getIndent (line 241) | _getIndent() {
    method startTerminatorless (line 245) | startTerminatorless(isLabel = false) {
    method endTerminatorless (line 256) | endTerminatorless(state) {
    method print (line 266) | print(node, parent) {
    method _maybeAddAuxComment (line 312) | _maybeAddAuxComment(enteredPositionlessNode) {
    method _printAuxBeforeComment (line 317) | _printAuxBeforeComment() {
    method _printAuxAfterComment (line 330) | _printAuxAfterComment() {
    method getPossibleRaw (line 343) | getPossibleRaw(node) {
    method printJoin (line 351) | printJoin(nodes, parent, opts = {}) {
    method printAndIndentOnComments (line 378) | printAndIndentOnComments(node, parent) {
    method printBlock (line 385) | printBlock(parent) {
    method _printTrailingComments (line 395) | _printTrailingComments(node) {
    method _printLeadingComments (line 399) | _printLeadingComments(node) {
    method printInnerComments (line 403) | printInnerComments(node, indent = true) {
    method printSequence (line 412) | printSequence(nodes, parent, opts = {}) {
    method printList (line 417) | printList(items, parent, opts = {}) {
    method _printNewline (line 425) | _printNewline(leading, node, parent, opts) {
    method _getComments (line 445) | _getComments(leading, node) {
    method _printComment (line 449) | _printComment(comment) {
    method _printComments (line 485) | _printComments(comments) {
  function commaSeparator (line 498) | function commaSeparator() {

FILE: packages/mvvm-babel-generator/lib/source-map.js
  function _sourceMap (line 8) | function _sourceMap() {
  function _interopRequireDefault (line 18) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  class SourceMap (line 20) | class SourceMap {
    method constructor (line 21) | constructor(opts, code) {
    method get (line 28) | get() {
    method getRawMappings (line 49) | getRawMappings() {
    method mark (line 53) | mark(generatedLine, generatedColumn, line, column, identifierName, fil...

FILE: packages/mvvm-babel-parser/lib/index.js
  function _AwaitValue (line 5) | function _AwaitValue(value) {
  function _AsyncGenerator (line 9) | function _AsyncGenerator(gen) {
  function _inheritsLoose (line 106) | function _inheritsLoose(subClass, superClass) {
  function KeywordTokenType (line 136) | function KeywordTokenType(keyword, options) {
  function BinopTokenType (line 146) | function BinopTokenType(name, binop) {
  function isSimpleProperty (line 374) | function isSimpleProperty(node) {
  function _class (line 382) | function _class() {
  function makePredicate (line 627) | function makePredicate(words) {
  function isInAstralSet (line 648) | function isInAstralSet(code, set) {
  function isIdentifierStart (line 661) | function isIdentifierStart(code) {
  function isIteratorStart (line 673) | function isIteratorStart(current, next) {
  function isIdentifierChar (line 676) | function isIdentifierChar(code) {
  function isEsModuleType (line 693) | function isEsModuleType(bodyElement) {
  function hasTypeImportKind (line 697) | function hasTypeImportKind(node) {
  function isMaybeDefaultImport (line 701) | function isMaybeDefaultImport(state) {
  function partition (line 712) | function partition(list, test) {
  function _class (line 728) | function _class(options, input) {
  function isNewLine (line 3070) | function isNewLine(code) {
  function isWhitespace (line 3083) | function isWhitespace(code) {
  function isFragment (line 3235) | function isFragment(object) {
  function getQualifiedJSXName (line 3239) | function getQualifiedJSXName(object) {
  function _class (line 3260) | function _class() {
  function getOptions (line 3711) | function getOptions(opts) {
  function getLineInfo (line 3729) | function getLineInfo(input, offset) {
  function BaseParser (line 3744) | function BaseParser() {
  function last (line 3769) | function last(stack) {
  function CommentsParser (line 3776) | function CommentsParser() {
  function LocationParser (line 3928) | function LocationParser() {
  function State (line 3960) | function State() {}
  function Tokenizer (line 4056) | function Tokenizer(options, input) {
  function UtilParser (line 5173) | function UtilParser() {
  function Node (line 5288) | function Node(parser, pos, loc) {
  function NodeUtils (line 5317) | function NodeUtils() {
  function LValParser (line 5360) | function LValParser() {
  function ExpressionParser (line 5658) | function ExpressionParser() {
  function StatementParser (line 7110) | function StatementParser() {
  function Parser (line 8500) | function Parser(options, input) {
  function pluginsMap (line 8525) | function pluginsMap(plugins) {
  function nonNull (line 8542) | function nonNull(x) {
  function assert (line 8550) | function assert(x) {
  function keywordTypeFromName (line 8556) | function keywordTypeFromName(value) {
  function _class (line 8591) | function _class() {
  function hasPlugin (line 10396) | function hasPlugin(plugins, name) {
  function getPluginOption (line 10405) | function getPluginOption(plugins, name, option) {
  function validatePlugins (line 10421) | function validatePlugins(plugins) {
  function parse (line 10452) | function parse(input, options) {
  function parseExpression (line 10474) | function parseExpression(input, options) {
  function getParser (line 10483) | function getParser(options, input) {
  function getParserClass (line 10496) | function getParserClass(pluginsFromOptions) {

FILE: packages/mvvm-file-loader/dist/index.js
  function _interopRequireDefault (line 27) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function loader (line 32) | function loader(content) {

FILE: packages/mvvm-interface-parser/lib/check.js
  method enter (line 16) | enter(path) {
  function throwError (line 63) | function throwError(content) {
  function throwError (line 74) | function throwError(content) {

FILE: packages/mvvm-interface-parser/lib/getInterfaceCode.js
  function getInterface (line 12) | function getInterface(filePath, content) {

FILE: packages/mvvm-interface-parser/lib/getInterfaceCode_old.js
  function getInterface (line 8) | function getInterface(filePath, content) {

FILE: packages/mvvm-interface-parser/lib/getMethodCode.js
  function getMethod (line 10) | function getMethod(filePath, content) {
  function getRawContent (line 54) | function getRawContent() {

FILE: packages/mvvm-interface-parser/lib/getMethodCode_old.js
  function getMethod (line 10) | function getMethod(filePath, content) {
  function getRawContent (line 57) | function getRawContent() {

FILE: packages/mvvm-interface-parser/test/checkWrapper.test.js
  function Method (line 34) | function Method() {

FILE: packages/mvvm-interface-parser/test/copyProto.test.js
  class A (line 5) | class A {
    method fun1 (line 6) | fun1() {

FILE: packages/mvvm-pack/cmlNode.js
  class CMLNode (line 1) | class CMLNode {
    method constructor (line 2) | constructor(options = {}) {

FILE: packages/mvvm-pack/compiler.js
  class Compiler (line 11) | class Compiler {
    method constructor (line 12) | constructor(webpackCompiler, plugin, options) {
    method run (line 54) | run(modules) {
    method emit (line 65) | emit(eventName, ...params) {
    method hook (line 70) | hook(eventName, cb) {
    method getDefinePlugins (line 74) | getDefinePlugins() {
    method module2Node (line 90) | module2Node(modules) {
    method createGraph (line 145) | createGraph(targetModule, currentNode, moduleNodeMap) {
    method createNode (line 183) | createNode(module) {
    method customCompile (line 243) | customCompile() {
    method customCompileNode (line 250) | customCompileNode(currentNode) {
    method writeFile (line 281) | writeFile(filePath, content, addHash = true) {
    method emitFiles (line 289) | emitFiles() {
    method getRouterConfig (line 340) | getRouterConfig() {

FILE: packages/mvvm-pack/lib/amd.js
  function getGlobalBootstrap (line 7) | function getGlobalBootstrap(globalName) {
  function getModuleBootstrap (line 11) | function getModuleBootstrap() {

FILE: packages/mvvm-pack/lib/handleScript.js
  function getJSModId (line 42) | function getJSModId(rawRequest) {
  function getInnerDefines (line 61) | function getInnerDefines (definitions, prefix, result) {
  function handleMember (line 83) | function handleMember(memberList, node) {

FILE: packages/mvvm-pack/log.js
  class Log (line 3) | class Log {
    method constructor (line 4) | constructor(options = {}) {
    method debug (line 8) | debug (msg) {
    method notice (line 14) | notice (msg) {
    method warn (line 20) | warn (msg) {
    method error (line 26) | error(msg) {

FILE: packages/mvvm-pack/mvvmGraphPlugin.js
  class mvvmGraphPlugin (line 3) | class mvvmGraphPlugin {
    method constructor (line 4) | constructor(options = {}, platformPlugin) {
    method apply (line 8) | apply(compiler) {

FILE: packages/mvvm-pack/test/demoPlugin.js
  method constructor (line 4) | constructor(options) {
  method register (line 35) | register(compiler) {

FILE: packages/mvvm-pack/test/mvvmGraphPlugin.test.js
  method get (line 18) | get() {
  method get (line 89) | get() {
  method get (line 148) | get() {

FILE: packages/mvvm-template-parser/lib/process-template.js
  function advance (line 126) | function advance (n) {
  function parseStartTag (line 130) | function parseStartTag () {
  function parseEndTag (line 162) | function parseEndTag() {
  method enter (line 225) | enter(path) {

FILE: packages/runtime-check/getDefines.js
  function getTypeDefine (line 99) | function getTypeDefine(typeName, node) {
  method enter (line 134) | enter(path) {

FILE: packages/url-loader/src/index.js
  function loader (line 17) | function loader(src) {

FILE: packages/url-loader/src/utils/normalizeFallback.js
  function normalizeFallbackString (line 1) | function normalizeFallbackString(fallbackString, originalOptions) {
  function normalizeFallbackObject (line 19) | function normalizeFallbackObject(fallbackObject) {
  function normalizeFallback (line 35) | function normalizeFallback(fallback, originalOptions) {

FILE: packages/webpack-check-plugin/index.js
  constant IS_WIN (line 3) | const IS_WIN = process.platform.indexOf('win') === 0
  class WebpackCheckPlugin (line 4) | class WebpackCheckPlugin {
    method constructor (line 5) | constructor(options) {
    method apply (line 13) | apply(compiler) {

FILE: packages/webpack-check-plugin/lib/check.js
  constant DEFAULT_TOKENS_MAP (line 4) | let DEFAULT_TOKENS_MAP = require('./tokensMap.js');
  function checkToken (line 23) | function checkToken(path, token) {

FILE: packages/webpack-liveload-middleware/client.js
  function setOptionsAndConnect (line 40) | function setOptionsAndConnect(overrides) {
  function setOverrides (line 45) | function setOverrides(overrides) {
  function EventSourceWrapper (line 75) | function EventSourceWrapper() {
  function getEventSourceWrapper (line 119) | function getEventSourceWrapper() {
  function connect (line 131) | function connect() {
  function processMessage (line 150) | function processMessage(obj) {

FILE: packages/webpack-liveload-middleware/middleware.js
  function webpackLiveLoadMiddleware (line 6) | function webpackLiveLoadMiddleware(compiler, opts) {
  function createEventStream (line 43) | function createEventStream(heartbeat) {
Condensed preview — 1333 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,187K chars).
[
  {
    "path": ".eslintrc.js",
    "chars": 345,
    "preview": "module.exports = {\n    root:true,\n    env: {\n      browser: true,\n      es6: true,\n    },\n    extends: [\n      'standard"
  },
  {
    "path": ".gitattributes",
    "chars": 111,
    "preview": "*.php linguist-language=JavaScript\n*.interface linguist-language=JavaScript\n*.cml linguist-language=JavaScript\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 460,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**bug描述**\n描述出现的"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 595,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
  },
  {
    "path": ".gitignore",
    "chars": 1048,
    "preview": "# Editor directories and files\n.DS_Store\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n.vscode\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\ny"
  },
  {
    "path": ".travis.yml",
    "chars": 343,
    "preview": "language: node_js\nnode_js:\n  - \"8.10.0\"\nbefore_script:\n  - lerna bootstrap --ignore-scripts\n  - cd packages/easy-chamele"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 10615,
    "preview": "## [1.0.8]\n\n* 支持data-class 配置\nchameleon.config.js 文件中配置\n\n```javascript\nwx:{ //alipay/baidu/...\n\n  dev:{\n    hasMiniAppCu"
  },
  {
    "path": "LICENSE",
    "chars": 11137,
    "preview": "                              Apache License\n\n                        Version 2.0, January 2004\n\n                     ht"
  },
  {
    "path": "README.md",
    "chars": 8386,
    "preview": "\n\nChameleon [![Build Status](https://www.travis-ci.org/didi/chameleon.svg?branch=master)](https://www.travis-ci.org/didi"
  },
  {
    "path": "commitlint.config.js",
    "chars": 463,
    "preview": "//git commit -m\"feat: 新增功能\"\n//规范团队commit规范,参考commitlint-angular https://www.npmjs.com/package/@commitlint/config-angular"
  },
  {
    "path": "elevate/cr.yml",
    "chars": 201,
    "preview": "# 鲲鹏接入教程:http://wiki.intra.xiaojukeji.com/pages/viewpage.action?pageId=111903894\n# ---------refer用来标识此项目评审入口是OneExperien"
  },
  {
    "path": "lerna.json",
    "chars": 382,
    "preview": "{\n  \"packages\": [\n    \"packages/*\"\n  ],\n  \"version\": \"1.0.8\",\n  \"command\": {\n    \"publish\": {\n      \"allowBranch\": \"mast"
  },
  {
    "path": "package.json",
    "chars": 1302,
    "preview": "{\n  \"name\": \"root\",\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"lerna run build\",\n    \"publish\": \"npm run build && l"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.editorconfig",
    "chars": 245,
    "preview": "# http://editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_tr"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.eslintignore",
    "chars": 15,
    "preview": "**/*/__tests__\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.eslintrc",
    "chars": 85,
    "preview": "{\n  \"extends\": \"eslint-config-airbnb/base\",\n  \"rules\": {\n    \"no-console\": [0]\n  }\n}\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.gitignore",
    "chars": 50,
    "preview": ".idea\ntmp\nnode_modules\ncoverage\nlib\n*.log\n*.log.*\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.npmignore",
    "chars": 29,
    "preview": ".idea\ntmp\ncoverage\n__tests__\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/.travis.yml",
    "chars": 72,
    "preview": "language: node_js\nnode_js:\n  - 8\n  - 10\nafter_success:\n  - npm run test\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/package.json",
    "chars": 1236,
    "preview": "{\n  \"name\": \"babel-plugin-chameleon-import\",\n  \"version\": \"1.0.8\",\n  \"description\": \"Component modular import plugin for"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/src/Plugin.js",
    "chars": 9684,
    "preview": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _path2 = "
  },
  {
    "path": "packages/babel-plugin-chameleon-import/src/index.js",
    "chars": 3379,
    "preview": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = _default;\n\nvar _assert"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/array-expression/actual.js",
    "chars": 108,
    "preview": "import { Button } from 'antd';\n\nvar a = [Button];\nvar b = { 'test': [Button] };\n[Button].map(function(){});\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/array-expression/expected.js",
    "chars": 287,
    "preview": "\"use strict\";\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/as-arguments/actual.js",
    "chars": 62,
    "preview": "import { Modal } from 'antd';\nconst _Modal = bind({})(Modal);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/as-arguments/expected.js",
    "chars": 215,
    "preview": "\"use strict\";\n\nvar _modal = _interopRequireDefault(require(\"antd/lib/modal\"));\n\nfunction _interopRequireDefault(obj) { r"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/as-arguments-identifier/actual.js",
    "chars": 60,
    "preview": "import { Modal } from 'antd';\nconst _Modal = bind()(Modal);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/as-arguments-identifier/expected.js",
    "chars": 213,
    "preview": "\"use strict\";\n\nvar _modal = _interopRequireDefault(require(\"antd/lib/modal\"));\n\nfunction _interopRequireDefault(obj) { r"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/binary-expression/actual.js",
    "chars": 124,
    "preview": "import { Button } from 'antd';\nconst extraProps = undefined === Button ? { type: 'primary' } : {};\nconsole.log(extraProp"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/binary-expression/expected.js",
    "chars": 280,
    "preview": "\"use strict\";\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/conditions/actual.js",
    "chars": 134,
    "preview": "import { Select } from 'antd';\n\nif (a === Select) {}\nif (Select) {}\n\nSelect ? 'a' : 'b';\na ? Select : 2;\n\nSelect || 'a';"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/conditions/expected.js",
    "chars": 334,
    "preview": "\"use strict\";\n\nvar _select = _interopRequireDefault(require(\"antd/lib/select\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-name/actual.js",
    "chars": 82,
    "preview": "import { Button } from 'plat/antd';\n\nReactDOM.render(<div component={Button} />);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-name/expected.js",
    "chars": 322,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _button = _interopRequireDefault(require(\"ant"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path/actual.js",
    "chars": 192,
    "preview": "import React from 'react';\nimport ReactDom from 'react-dom';\nimport { Button } from 'antd';\n\nReactDOM.render(<div>\n  <Bu"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path/expected.js",
    "chars": 500,
    "preview": "\"use strict\";\n\nrequire(\"antd/lib/button/style/2x\");\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path-ignore/actual.js",
    "chars": 225,
    "preview": "import React from \"react\";\nimport ReactDom from \"react-dom\";\nimport { Animation, Button } from \"antd\";\n\nReactDOM.render("
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/custom-style-path-ignore/expected.js",
    "chars": 587,
    "preview": "\"use strict\";\n\nvar _animation = _interopRequireDefault(require(\"antd/lib/animation\"));\n\nrequire(\"antd/lib/button/style/2"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/execute-direct/actual.js",
    "chars": 49,
    "preview": "import { message } from 'antd';\n\nmessage('xxx');\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/execute-direct/expected.js",
    "chars": 212,
    "preview": "\"use strict\";\n\nvar _message2 = _interopRequireDefault(require(\"antd/lib/message\"));\n\nfunction _interopRequireDefault(obj"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/execute-member/actual.js",
    "chars": 57,
    "preview": "import { message } from 'antd';\n\nmessage.success('xxx');\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/execute-member/expected.js",
    "chars": 215,
    "preview": "\"use strict\";\n\nvar _message2 = _interopRequireDefault(require(\"antd/lib/message\"));\n\nfunction _interopRequireDefault(obj"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/export-import/actual.js",
    "chars": 63,
    "preview": "import { DatePicker } from 'antd';\nexport default DatePicker;\n\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/export-import/expected.js",
    "chars": 343,
    "preview": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _datePick"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/expression-statement/actual.js",
    "chars": 79,
    "preview": "import {Toast} from 'antd-mobile';\nwindow.Toast = Toast;\nToast.success('test');"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/expression-statement/expected.js",
    "chars": 127,
    "preview": "\"use strict\";\n\nvar _antdMobile = require(\"antd-mobile\");\n\nwindow.Toast = _antdMobile.Toast;\n\n_antdMobile.Toast.success('"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/file-name/actual.js",
    "chars": 85,
    "preview": "import { Select } from 'antd-mobile-fake-2.0';\n\nif (Select) {}\n\nconsole.log(Select);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/file-name/expected.js",
    "chars": 259,
    "preview": "\"use strict\";\n\nvar _index = _interopRequireDefault(require(\"antd-mobile-fake-2.0/lib/select/index.native\"));\n\nfunction _"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/import-alias/actual.js",
    "chars": 88,
    "preview": "import { Select as AntdSelect } from 'antd';\n\nif (AntdSelect) {\n  console.log('foo');\n}\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/import-alias/expected.js",
    "chars": 225,
    "preview": "\"use strict\";\n\nvar _select = _interopRequireDefault(require(\"antd/lib/select\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/import-css/actual.js",
    "chars": 135,
    "preview": "import { message } from 'antd';\nimport { Button } from 'antd';\n\nmessage('xxx');\nReactDOM.render(<div>\n  <Button>xxxx</Bu"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/import-css/expected.js",
    "chars": 527,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nrequire(\"antd/lib/button/style\");\n\nvar _button = "
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/keep-named-import/actual.js",
    "chars": 54,
    "preview": "import { start, end } from 'stream';\n\nstart();\nend();\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/keep-named-import/expected.js",
    "chars": 139,
    "preview": "\"use strict\";\n\nvar _end2 = require(\"stream/lib/end\");\n\nvar _start2 = require(\"stream/lib/start\");\n\n(0, _start2.start)();"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/material-ui/actual.js",
    "chars": 56,
    "preview": "import { Toolbar } from 'material-ui';\n\nToolbar('xxx');\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/material-ui/expected.js",
    "chars": 215,
    "preview": "\"use strict\";\n\nvar _Toolbar2 = _interopRequireDefault(require(\"material-ui/Toolbar\"));\n\nfunction _interopRequireDefault("
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/member-expression/actual.js",
    "chars": 108,
    "preview": "import antd from 'antd';\n\nReactDOM.render(<div>\n  <antd.Button type=\"primary\">Button</antd.Button>\n</div>);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/member-expression/expected.js",
    "chars": 374,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _button = _interopRequireDefault(require(\"ant"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/modules-false/actual.js",
    "chars": 191,
    "preview": "import React from 'react';\nimport ReactDom from 'react-dom';\nimport { Button } from 'antd';\n\nReactDOM.render(<div>\n  <Bu"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/modules-false/expected.js",
    "chars": 498,
    "preview": "\"use strict\";\n\nrequire(\"antd/lib/button/style\");\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\nvar"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries/actual.js",
    "chars": 122,
    "preview": "import { Select } from 'antd';\nimport { Select as SelectMobile } from 'antd-mobile';\n\nif (Select) {}\nif (SelectMobile) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries/expected.js",
    "chars": 303,
    "preview": "\"use strict\";\n\nvar _select = _interopRequireDefault(require(\"antd-mobile/lib/select\"));\n\nvar _select2 = _interopRequireD"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries-hilojs/actual.js",
    "chars": 105,
    "preview": "import { Select } from 'antd';\nimport { Abc, Class } from 'hilojs';\n\nif (Select) {}\nif (Class && Abc) {}\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-libraries-hilojs/expected.js",
    "chars": 369,
    "preview": "\"use strict\";\n\nvar _abc = _interopRequireDefault(require(\"hilojs/abc\"));\n\nvar _class = _interopRequireDefault(require(\"h"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-words/actual.js",
    "chars": 54,
    "preview": "import { InputNumber } from 'antd';\n\n<InputNumber />;\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/multiple-words/expected.js",
    "chars": 303,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _inputNumber = _interopRequireDefault(require"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/new-expression/actual.js",
    "chars": 46,
    "preview": "import { Button } from 'antd';\nnew Button();\n\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/new-expression/expected.js",
    "chars": 201,
    "preview": "\"use strict\";\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/actual.js",
    "chars": 122,
    "preview": "import { message } from 'antd';\n\nmessage('xxx');\n\nfunction App() {\n  const message = 'xxx';\n  console.log({ message });\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/object-shorthand/expected.js",
    "chars": 298,
    "preview": "\"use strict\";\n\nvar _message2 = _interopRequireDefault(require(\"antd/lib/message\"));\n\nfunction _interopRequireDefault(obj"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/property/actual.js",
    "chars": 77,
    "preview": "import { Button } from 'antd';\n\nReactDOM.render(<div component={Button} />);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/property/expected.js",
    "chars": 322,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _button = _interopRequireDefault(require(\"ant"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/react-element/actual.js",
    "chars": 87,
    "preview": "import { Button } from 'antd';\n\nReactDOM.render(<div>\n  <Button>xxxx</Button>\n</div>);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/react-element/expected.js",
    "chars": 355,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _button = _interopRequireDefault(require(\"ant"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/react-toolbox/actual.js",
    "chars": 56,
    "preview": "import { AppBar } from 'react-toolbox';\n\nAppBar('xxx');\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/react-toolbox/expected.js",
    "chars": 219,
    "preview": "\"use strict\";\n\nvar _app_bar = _interopRequireDefault(require(\"react-toolbox/lib/app_bar\"));\n\nfunction _interopRequireDef"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/return/actual.js",
    "chars": 247,
    "preview": "import { toast } from 'antd';\n\nfunction a() {\n  return toast;\n}\n\nfunction b(toast) {\n  return toast;\n}\n\nfunction c() {\n "
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/return/expected.js",
    "chars": 404,
    "preview": "\"use strict\";\n\nvar _toast2 = _interopRequireDefault(require(\"antd/lib/toast\"));\n\nfunction _interopRequireDefault(obj) { "
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/specifier-alias/actual.js",
    "chars": 125,
    "preview": "import { Button as Button1 } from 'antd';\n\nconst foo = Button1.foo\n\nReactDOM.render(<div>\n  <Button1>xxxx</Button1>\n</di"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/specifier-alias/expected.js",
    "chars": 386,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _button = _interopRequireDefault(require(\"ant"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/use-multiple-times/actual.js",
    "chars": 80,
    "preview": "import a from 'a';\nimport { Button } from 'antd-mobile';\n\na(Button);\na(Button);\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/use-multiple-times/expected.js",
    "chars": 301,
    "preview": "\"use strict\";\n\nvar _button = _interopRequireDefault(require(\"antd-mobile/lib/button\"));\n\nvar _a = _interopRequireDefault"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/variable-declarator/actual.js",
    "chars": 50,
    "preview": "import { Button } from 'antd';\n\nconst a = Button;\n"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/variable-declarator/expected.js",
    "chars": 203,
    "preview": "\"use strict\";\n\nvar _button = _interopRequireDefault(require(\"antd/lib/button\"));\n\nfunction _interopRequireDefault(obj) {"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/actual.js",
    "chars": 125,
    "preview": "import { message } from 'antd';\n\nmessage('xxx');\n\nfunction App() {\n  const message = 'xxx';\n  return <div>{message}</div"
  },
  {
    "path": "packages/babel-plugin-chameleon-import/test/fixtures/variable-scope/expected.js",
    "chars": 372,
    "preview": "\"use strict\";\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _message2 = _interopRequireDefault(require(\"a"
  },
  {
    "path": "packages/chameleon-css-loader/.eslintrc",
    "chars": 16961,
    "preview": "{\n    // 在配置文件里配置全局变量时,使用 globals 指出你要使用的全局变量。将变量设置为 true 将允许变量被重写,或 false 将不允许被重写\n    \"globals\": {\n        \"cml\": false"
  },
  {
    "path": "packages/chameleon-css-loader/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "packages/chameleon-css-loader/handler/lines.js",
    "chars": 215,
    "preview": "// 静态编译和运行时 web和小程序端对lines属性特殊处理\n\nmodule.exports = function(linesNumber) {\n  // 作为一个属性注意最后不能添加分号\n  return `display: -web"
  },
  {
    "path": "packages/chameleon-css-loader/index.js",
    "chars": 785,
    "preview": "const loaderUtils = require('loader-utils')\nconst webParse = require('./parser/web');\nconst miniParse = require('./parse"
  },
  {
    "path": "packages/chameleon-css-loader/package.json",
    "chars": 1069,
    "preview": "{\n  \"name\": \"chameleon-css-loader\",\n  \"version\": \"1.0.8\",\n  \"description\": \"chameleon样式处理\",\n  \"main\": \"index.js\",\n  \"scr"
  },
  {
    "path": "packages/chameleon-css-loader/parser/media.js",
    "chars": 1765,
    "preview": "\n\nmodule.exports = function(source = '', targetType) {\n  let reg = /@media\\s*cml-type\\s*\\(([\\w\\s,]*)\\)\\s*/g;\n  if (!reg."
  },
  {
    "path": "packages/chameleon-css-loader/parser/miniapp.js",
    "chars": 1132,
    "preview": "\nconst cpx = require('../postcss/cpx.js');\nconst weexPlus = require('../postcss/weex-plus');\nconst addAlipayClassPlugin "
  },
  {
    "path": "packages/chameleon-css-loader/parser/web.js",
    "chars": 456,
    "preview": "\nconst cpx = require('../postcss/cpx.js');\nconst postcss = require('postcss');\nconst px2rem = require('postcss-plugin-px"
  },
  {
    "path": "packages/chameleon-css-loader/parser/weex.js",
    "chars": 129,
    "preview": "\nconst weex = require('../postcss/weex.js');\nmodule.exports = function(source, options = {}) {\n  return weex(source, opt"
  },
  {
    "path": "packages/chameleon-css-loader/postcss/add-alipay-class.js",
    "chars": 776,
    "preview": "const postcss = require('postcss');\nconst hash = require('hash-sum');\n\nmodule.exports = postcss.plugin('add-alipay-class"
  },
  {
    "path": "packages/chameleon-css-loader/postcss/cpx.js",
    "chars": 1180,
    "preview": "const postcss = require('postcss');\n// 非rem的cpx处理,rem的利用postcss-plugin-px2rem插件即可实现\n\nmodule.exports = postcss.plugin('po"
  },
  {
    "path": "packages/chameleon-css-loader/postcss/weex-plus.js",
    "chars": 716,
    "preview": "// 为web和小程序提供编译weex为标准的特殊样式\n\nconst postcss = require('postcss');\n\nmodule.exports = postcss.plugin('postcss-weex-plus', f"
  },
  {
    "path": "packages/chameleon-css-loader/postcss/weex.js",
    "chars": 771,
    "preview": "const rework = require('rework');\nconst weexCssSupport = require('../transform/weex');\n\n/**\n * 处理css源码\n *\n * @param  {st"
  },
  {
    "path": "packages/chameleon-css-loader/proxy/proxyMiniapp.js",
    "chars": 1046,
    "preview": "const utils = require('../utils');\nconst lines = require('../handler/lines');\n// 运行时的cpx2rpx不能使用postcss处理,因为$cmlStyle方法用"
  },
  {
    "path": "packages/chameleon-css-loader/proxy/proxyWeb.js",
    "chars": 1830,
    "preview": "/** 提供编译时样式处理的方法 */\n// 运行时不能使用postcss 体积过大\nconst lines = require('../handler/lines');\nconst utils = require('../utils');"
  },
  {
    "path": "packages/chameleon-css-loader/test/parser-test/media.test.js",
    "chars": 1041,
    "preview": "let content = `\n@media cml-type(wx) {\n  body {\n    color: red;\n  }\n}\n\n@media cml-type(weex) {\n  body {\n    color: blue;\n"
  },
  {
    "path": "packages/chameleon-css-loader/test/parser-test/miniapp.test.js",
    "chars": 1065,
    "preview": "const parseCss = require('../../parser/miniapp.js');\nconst expect = require('chai').expect;\n\nlet source = `body {width:1"
  },
  {
    "path": "packages/chameleon-css-loader/test/parser-test/web.test.js",
    "chars": 1096,
    "preview": "const parseCss = require('../../parser/web.js');\nconst expect = require('chai').expect;\n\nlet source = `body {width:75cpx"
  },
  {
    "path": "packages/chameleon-css-loader/test/parser-test/weex.test.js",
    "chars": 3664,
    "preview": "const parseCss = require('../../parser/weex.js');\nconst expect = require('chai').expect;\n\nlet source = `body {width:75cp"
  },
  {
    "path": "packages/chameleon-css-loader/test/postcss-test/weex-plus.test.js",
    "chars": 523,
    "preview": "var postcss = require('postcss');\nvar weexPlus = require('../../postcss/weex-plus');\nvar content = `\n.class1 {\n  lines: "
  },
  {
    "path": "packages/chameleon-css-loader/test/proxy-test/proxyMiniapp.test.js",
    "chars": 538,
    "preview": "const parseCss = require('../../proxy/proxyMiniapp.js');\nconst expect = require('chai').expect;\n\nlet source = `width:75c"
  },
  {
    "path": "packages/chameleon-css-loader/test/proxy-test/proxyWeb.test.js",
    "chars": 1180,
    "preview": "const parseCss = require('../../proxy/proxyWeb.js');\nconst expect = require('chai').expect;\n\nlet source = `width:75cpx;f"
  },
  {
    "path": "packages/chameleon-css-loader/test/transform/weex.test.js",
    "chars": 469,
    "preview": "const parseCss = require('../../transform/weex.js');\nconst expect = require('chai').expect;\nlet source = `width:75cpx;bo"
  },
  {
    "path": "packages/chameleon-css-loader/test/utils.test.js",
    "chars": 492,
    "preview": "\n\nconst utils = require('../utils.js');\nconst expect = require('chai').expect;\n\n\ndescribe('utils', function() {\n  it('tr"
  },
  {
    "path": "packages/chameleon-css-loader/transform/color.js",
    "chars": 3719,
    "preview": "const COLOR_MAP = {\n  aliceblue: '#f0f8ff',\n  antiquewhite: '#faebd7',\n  aqua: '#00ffff',\n  aquamarine: '#7fffd4',\n  azu"
  },
  {
    "path": "packages/chameleon-css-loader/transform/weex.js",
    "chars": 8068,
    "preview": "const color = require('./color');\nconst utils = require('../utils.js');\n\n/**\n * 处理映射表\n *\n * @type {Object}\n */\nconst HAN"
  },
  {
    "path": "packages/chameleon-css-loader/utils.js",
    "chars": 1162,
    "preview": "const _ = {};\nmodule.exports = _;\n// 将字符串中的 单引号变成 双引号;\n_.singlequot2doublequot = function (value) {\n  return value.repla"
  },
  {
    "path": "packages/chameleon-dev-proxy/.gitignore",
    "chars": 979,
    "preview": "# Editor directories and files\n.DS_Store\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debu"
  },
  {
    "path": "packages/chameleon-dev-proxy/index.js",
    "chars": 3684,
    "preview": "'use strict';\n\nrequire('babel-polyfill');\n\n\n\nvar tlsUtils = require('node-mitmproxy/lib/tls/tlsUtils');\nvar qrcode = req"
  },
  {
    "path": "packages/chameleon-dev-proxy/package.json",
    "chars": 388,
    "preview": "{\n  \"name\": \"chameleon-dev-proxy\",\n  \"version\": \"1.0.8\",\n  \"description\": \"cml开发环境代理服务模块\",\n  \"main\": \"index.js\",\n  \"auth"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/.gitignore",
    "chars": 979,
    "preview": "# Editor directories and files\n.DS_Store\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debu"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/LICENSE",
    "chars": 1071,
    "preview": "MIT License\n\nCopyright (c) 2016 Geoffroy Warin\n\nPermission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/index.js",
    "chars": 124,
    "preview": "\nconst FriendlyErrorsWebpackPlugin = require('./src/friendly-errors-plugin');\n\nmodule.exports = FriendlyErrorsWebpackPlu"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/package.json",
    "chars": 909,
    "preview": "{\n  \"version\": \"1.0.8\",\n  \"name\": \"chameleon-errors-webpack-plugin\",\n  \"main\": \"index.js\",\n  \"author\": \"Chameleon-Team\","
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/core/extractWebpackError.js",
    "chars": 1852,
    "preview": "'use strict';\n\nconst ErrorStackParser = require('error-stack-parser');\nconst RequestShortener = require(\"webpack/lib/Req"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/core/formatErrors.js",
    "chars": 523,
    "preview": "'use strict';\n\n/**\n * Applies formatters to all AnnotatedErrors.\n *\n * A formatter has the following signature: Formatte"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/core/transformErrors.js",
    "chars": 1048,
    "preview": "'use strict';\n\nconst extractError = require('./extractWebpackError');\n\n/**\n * Applies all transformers to all errors and"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/formatters/defaultError.js",
    "chars": 850,
    "preview": "'use strict';\n\nconst concat = require('../utils').concat;\nconst formatTitle = require('../utils/colors').formatTitle;\n\nf"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/formatters/eslintError.js",
    "chars": 766,
    "preview": "'use strict';\n\nconst concat = require('../utils').concat;\nconst chalk = require('chalk');\n\nconst infos = [\n  'You may us"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/formatters/moduleNotFound.js",
    "chars": 2440,
    "preview": "'use strict';\nconst concat = require('../utils').concat;\n\nfunction isRelative (module) {\n  return module.startsWith('./'"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/friendly-errors-plugin.js",
    "chars": 4891,
    "preview": "'use strict';\n\nconst path = require('path');\nconst chalk = require('chalk');\nconst os = require('os');\nconst transformEr"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/output.js",
    "chars": 2668,
    "preview": "'use strict';\n\nconst colors = require('./utils/colors');\nconst chalk = require('chalk');\nconst stringWidth = require('st"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/transformers/babelSyntax.js",
    "chars": 1033,
    "preview": "'use strict';\n\n/**\n * This will be removed in next versions as it is not handled in the babel-loader\n * See: https://git"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/transformers/esLintError.js",
    "chars": 378,
    "preview": "'use strict';\n\nfunction isEslintError (e) {\n  return e.originalStack\n    .some(stackframe => stackframe.fileName && stac"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/transformers/moduleNotFound.js",
    "chars": 698,
    "preview": "'use strict';\n\nconst TYPE = 'module-not-found';\n\nfunction isModuleNotFoundError (e) {\n  const webpackError = e.webpackEr"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/utils/colors.js",
    "chars": 848,
    "preview": "'use strict';\n\nconst chalk = require('chalk');\n\nfunction formatTitle(severity, message) {\n  return chalk[bgColor(severit"
  },
  {
    "path": "packages/chameleon-errors-webpack-plugin/src/utils/index.js",
    "chars": 730,
    "preview": "'use strict';\n\n/**\n * Concat and flattens non-null values.\n * Ex: concat(1, undefined, 2, [3, 4]) = [1, 2, 3, 4]\n */\nfun"
  },
  {
    "path": "packages/chameleon-linter/.eslintrc",
    "chars": 7057,
    "preview": "{\n  \"parser\": \"babel-eslint\",\n  \"env\": {\n    \"browser\": true,\n    \"node\": true,\n    \"commonjs\": true,\n    \"amd\": true,\n "
  },
  {
    "path": "packages/chameleon-linter/.gitignore",
    "chars": 30,
    "preview": ".DS_Store\n.vscode\n.nyc_output\n"
  },
  {
    "path": "packages/chameleon-linter/bin/cli.js",
    "chars": 556,
    "preview": "#!/usr/bin/env node\n// --inspect-brk\nconst program = require('commander');\nconst packageJson = require('../package.json'"
  },
  {
    "path": "packages/chameleon-linter/checkers/index.js",
    "chars": 188,
    "preview": "module.exports = {\n  // json校验\n  json: require('./json'),\n\n  // 脚本校验\n  script: require('./script'),\n\n  // 样式校验\n  style: "
  },
  {
    "path": "packages/chameleon-linter/checkers/json.js",
    "chars": 4704,
    "preview": "const config = require('../config');\nconst cmlUtils = require('chameleon-tool-utils');\n\n/**\n * 查找token\n *\n * @param  {Ob"
  },
  {
    "path": "packages/chameleon-linter/checkers/script.js",
    "chars": 7213,
    "preview": "const traverse = require('@babel/traverse')['default'];\nconst utils = require('../utils');\n\n/**\n * 获取接口定义\n *\n * @param  "
  },
  {
    "path": "packages/chameleon-linter/checkers/style.js",
    "chars": 5363,
    "preview": "const config = require('../config');\n\nfunction getCmlType(mediaParams = '') {\n  let types = [];\n  if (mediaParams) {\n   "
  },
  {
    "path": "packages/chameleon-linter/checkers/template/index.js",
    "chars": 3902,
    "preview": "const jsAstParser = require('./lib/js-ast-parser');\nconst templateAstParser = require('./lib/template-ast-parser');\ncons"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/js-ast-parser.js",
    "chars": 293,
    "preview": "const CmlJsAstTreeParser = require('cml-js-parser');\nconst config = require('../../../config');\n\nfunction getParseResult"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/json-ast-parser.js",
    "chars": 2080,
    "preview": "const Parser = require('cml-component-parser');\nconst cmlUtils = require('chameleon-tool-utils');\nconst utils = require("
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/customized-node.js",
    "chars": 525,
    "preview": "/**\n * A class represents a customized component.\n */\nclass CustomizedNode {\n  constructor(tag, lang = 'cml') {\n    this"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/rule-loader.js",
    "chars": 534,
    "preview": "class RuleLoader {\n  constructor(rules) {\n    this.rulesMap = {};\n    if (rules) {\n      this.addSubscribers(rules);\n   "
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/classes/suspicious-node.js",
    "chars": 731,
    "preview": "/**\n * A class reprents nodes that are waiting for passing to getting variable rules.\n */\nclass SuspiciousNode {\n\n  cons"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/index.js",
    "chars": 1491,
    "preview": "const astTreeTraversal = require('./lib/ast-tree-traversal');\nconst suspiciousNodeDispatcher = require('./lib/suspicious"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/lib/ast-tree-traversal.js",
    "chars": 2812,
    "preview": "const SuspiciousNode = require('../classes/suspicious-node');\nconst CustomizedNode = require('../classes/customized-node"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/lib/customized-node-dispatcher.js",
    "chars": 674,
    "preview": "const rules = require('../rules/component');\nconst options = require('../options');\nconst RuleLoader = require('../class"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/lib/suspicious-node-dispatcher.js",
    "chars": 567,
    "preview": "const rules = require('../rules/template');\nconst options = require('../options');\nconst RuleLoader = require('../classe"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/options.js",
    "chars": 292,
    "preview": "const _options = {\n  langs: ['cml', 'vue'],\n  cmlSystemVarNames: ['$event', 'Math', 'Date'],\n  vueSystemVarNames: ['$eve"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/attr.js",
    "chars": 638,
    "preview": "const Tools = require('../../tools');\n\nmodule.exports = {\n  name: 'attr'\n}\n\nmodule.exports.run = function(node, opts) {\n"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/cml-method-node.js",
    "chars": 448,
    "preview": "const methodRegex = /c-bind:(\\w+)/;\n\nmodule.exports = {\n  name: 'cml-method-node',\n  on: 'cml',\n  filter: {\n    key: 'na"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/cml-prop-node.js",
    "chars": 466,
    "preview": "const Tools = require('../../tools');\n\nmodule.exports = {\n  name: 'cml-prop-node',\n  on: 'cml',\n  filter: {\n    key: 'na"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/cml.js",
    "chars": 459,
    "preview": "const Tools = require('../../tools');\n\nmodule.exports = {\n  name: 'cml',\n  on: ['attr'],\n  filter: {\n    key: 'lang',\n  "
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/index.js",
    "chars": 136,
    "preview": "const bulk = require('bulk-require');\nconst ruleExports = bulk(__dirname, '!(index).js');\n\nmodule.exports = Object.value"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/vue-method-node.js",
    "chars": 463,
    "preview": "const methodRegex = /^(?:v-on:|v-once:|@)(\\w+)/;\n\nmodule.exports = {\n  name: 'vue-method-node',\n  on: 'vue',\n  filter: {"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/vue-prop-node.js",
    "chars": 957,
    "preview": "const Tools = require('../../tools');\nconst propRegex = /^v-bind|^:/;\n\nmodule.exports = {\n  name: 'vue-prop-node',\n  on:"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/component/vue.js",
    "chars": 459,
    "preview": "const Tools = require('../../tools');\n\nmodule.exports = {\n  name: 'vue',\n  on: ['attr'],\n  filter: {\n    key: 'lang',\n  "
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/cml.js",
    "chars": 495,
    "preview": "const Tools = require('../../tools');\nconst options = require('../../options');\n\nmodule.exports = {\n  name: 'cml'\n}\n\nmod"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/index.js",
    "chars": 136,
    "preview": "const bulk = require('bulk-require');\nconst ruleExports = bulk(__dirname, '!(index).js');\n\nmodule.exports = Object.value"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/method-node.js",
    "chars": 1260,
    "preview": "const Tools = require('../../tools');\nconst normalMethodRegex = /\\(.*\\)/;\n\nmodule.exports = {\n  name: 'mehtod-node',\n  o"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/mustache-node.js",
    "chars": 1399,
    "preview": "const Tools = require('../../tools');\n\nconst mustacheRegex = /{{(.*?)}}/g;\n\nmodule.exports = {\n  name: 'mustache-node',\n"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/vue-directive-node.js",
    "chars": 792,
    "preview": "const Tools = require('../../tools');\n\nmodule.exports = {\n  name: 'vue-directive-node',\n  on: ['vue'],\n  filter: {\n    k"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/rules/template/vue.js",
    "chars": 495,
    "preview": "const Tools = require('../../tools');\nconst options = require('../../options');\n\nmodule.exports = {\n  name: 'vue'\n}\n\nmod"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/dash-to-camelcase.js",
    "chars": 134,
    "preview": "module.exports.dashtoCamelcase = function(str = '') {\n  return str && str.replace(/-(\\w)/g, (all, letter) => letter.toUp"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/flat-array.js",
    "chars": 266,
    "preview": "module.exports.flatArray = function(arr) {\n  let tempArr = [];\n  if (Array.isArray(arr)) {\n    arr.forEach((item) => {\n "
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/get-offset-pos-from-text.js",
    "chars": 293,
    "preview": "module.exports.getVarOffsetPosFromText = function (text = '', varName = '', offset = 0) {\n  if (!text || !varName) {retu"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/get-props-from-object-expression.js",
    "chars": 905,
    "preview": "const bablePaser = require('@babel/parser');\n\n/**\n * @return {Array} [{name: 'propName', pos: [line, columm]}]\n */\nmodul"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/index.js",
    "chars": 211,
    "preview": "const bulk = require('bulk-require');\nconst toolExports = bulk(__dirname, '!(index).js');\nlet tools = {};\n\nObject.values"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/is-origin-component.js",
    "chars": 106,
    "preview": "module.exports.isOriginComponent = function(tag) {\n  return tag ? /^origin-\\w+/.test(tag.name) : false;\n}\n"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/is-suspicious-textnode.js",
    "chars": 216,
    "preview": "const suspiciousRegexes = {\n  cml: /{{(.*?)}}/g,\n  vue: /{{(.*?)}}/g,\n  wx: /{{(.*?)}}/g\n};\n\nmodule.exports.isSuspicious"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/loop-scope-handler.js",
    "chars": 1750,
    "preview": "const bablePaser = require('@babel/parser');\n\nconst forLoopDirectives = {\n  vue: {\n    for: 'v-for'\n  },\n  cml: {\n    fo"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/parse-single-expression.js",
    "chars": 4020,
    "preview": "const parser = require('@babel/parser');\nconst traverse = require('@babel/traverse')['default'];\n\nconst objectBlockState"
  },
  {
    "path": "packages/chameleon-linter/checkers/template/lib/template-ast-parser/tools/rule-filter-match.js",
    "chars": 134,
    "preview": "module.exports.isRuleMatch = function(node, rule) {\n  return node && rule && rule.filter && rule.filter.run(node[rule.fi"
  },
  {
    "path": "packages/chameleon-linter/classes/message.js",
    "chars": 299,
    "preview": "/**\n * A class represents an error message.\n */\nclass Message {\n  constructor({ line = undefined, column = undefined, to"
  },
  {
    "path": "packages/chameleon-linter/config/.cmllintrc",
    "chars": 214,
    "preview": "{\n  // 核心文件检查\n  'core-files-check': true,\n\n  // cml文件校验\n  'cml-files-check': true,\n\n  // 接口文件校验\n  'interface-files-check"
  },
  {
    "path": "packages/chameleon-linter/config/built-in-components/index.js",
    "chars": 613,
    "preview": "const fs = require('fs');\nconst config = require('../../config');\nconst Parser = require('cml-component-parser');\nconst "
  },
  {
    "path": "packages/chameleon-linter/config/common-events.json",
    "chars": 71,
    "preview": "{\n  \"events\": [\"tap\", \"click\", \"touchstart\", \"touchmove\", \"touchend\"]\n}"
  },
  {
    "path": "packages/chameleon-linter/config/fakeComps/index.js",
    "chars": 211,
    "preview": "const list = [{\n  name: 'app',\n  allowAttrs: {\n    vars: ['routerConfig'],\n    methods: [],\n    props: [{\n      name: 'r"
  },
  {
    "path": "packages/chameleon-linter/config/globalVars.js",
    "chars": 3688,
    "preview": "const globalVars = {\n  WEEX: ['weex', 'global'],\n  WX: ['wx', 'global'],\n  BAIDU: ['swan', 'global'],\n  ALIPAY: ['my', '"
  },
  {
    "path": "packages/chameleon-linter/config/index.js",
    "chars": 2155,
    "preview": "let fs = require('fs');\nlet path = require('path');\nlet parserConfig = require('./parser-config');\nlet config = {};\nlet "
  },
  {
    "path": "packages/chameleon-linter/config/parser-config.js",
    "chars": 993,
    "preview": "module.exports = {\n  script: {\n    sourceType: 'module',\n    allowImportExportEverywhere: true, // consistent with espre"
  },
  {
    "path": "packages/chameleon-linter/config/tag-embed-rules.json",
    "chars": 424,
    "preview": "{\n    \"text\": {\n        \"required\": \"\",\n        \"excludes\": \"\",\n        \"includes\": [\"text\"]\n    },\n    \"scroller\": {\n  "
  },
  {
    "path": "packages/chameleon-linter/config/white-list/cml-white-list.js",
    "chars": 691,
    "preview": "/**\n * tags: Technically, it only holds all availiable tags that cml has.\n*/\nmodule.exports = {\n  attrs: ['c-if', 'c-els"
  },
  {
    "path": "packages/chameleon-linter/config/white-list/index.js",
    "chars": 578,
    "preview": "const cmlWhiteList = require('./cml-white-list');\nconst vueWhiteList = require('./vue-white-list');\nconst webWhiteList ="
  },
  {
    "path": "packages/chameleon-linter/config/white-list/vue-white-list.js",
    "chars": 400,
    "preview": "/**\n * tags: Technically, it only holds tags that are not a html tag.\n*/\nmodule.exports = {\n  attrs: ['v-if', 'v-else', "
  },
  {
    "path": "packages/chameleon-linter/config/white-list/web-white-list.js",
    "chars": 1252,
    "preview": "module.exports = {\n  attrs: ['accesskey', 'class', 'contenteditable', 'contextmenu', 'dir', 'draggable', 'dropzone', 'hi"
  },
  {
    "path": "packages/chameleon-linter/config/white-list/weex-white-list.js",
    "chars": 349,
    "preview": "module.exports = {\n  attrs: ['v-if', 'v-else', 'v-else-if', 'v-for', 'v-on', 'v-bind', 'v-html', 'v-show', 'v-model', 'v"
  },
  {
    "path": "packages/chameleon-linter/config/white-list/wx-white-list.js",
    "chars": 839,
    "preview": "/**\n * tags: Technically, it only holds tags that are not a html tag.\n * attrs: Attributes that only existing in mini-ap"
  },
  {
    "path": "packages/chameleon-linter/docs/cml-file-specification.md",
    "chars": 134,
    "preview": "# cml文件规范\n\n```\n├── components\n│   ├── c-title\n│   │   ├── c-title.web.cml\n│   │   ├── c-title.weex.cml\n│   │   └── c-tit"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/button.md",
    "chars": 333,
    "preview": "# button \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|text|String| |\n|size|String| |\n|type|String| |\n|disabled|Boolea"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/checkbox.md",
    "chars": 194,
    "preview": "# checkbox \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|checked|Boolean| |\n|label|String| |\n|disabled|Boolean| |\n|pos"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/input.md",
    "chars": 510,
    "preview": "# input \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|value|String| |\n|type|String| |\n|placeholder|String| |\n|disabled"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/list.md",
    "chars": 415,
    "preview": "# list \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|bottomOffset|Number| |\n|c-bind:customscroll|EventHandle|事件返回参数 ev"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/page.md",
    "chars": 106,
    "preview": "# page \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|title|String| |\n|c-bind:back|EventHandle|事件未定义返回参数|"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/radio.md",
    "chars": 191,
    "preview": "# radio \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|checked|Boolean| |\n|label|String| |\n|disabled|Boolean| |\n|positi"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/richtext.md",
    "chars": 309,
    "preview": "# richtext \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|richData|richData|其中 richData 的定义为 <br/>&emsp;{message: Strin"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/scroller.md",
    "chars": 534,
    "preview": "# scroller \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|cstyle|String| |\n|bottomOffset|Number| |\n|scrollDirection|Str"
  },
  {
    "path": "packages/chameleon-linter/docs/components/buildin/switch.md",
    "chars": 242,
    "preview": "# switch \n---\n\n|属性名|类型|说明|\n| ------ | ------ | ------ |\n|checked|Boolean| |\n|disabled|Boolean| |\n|label|String| |\n|c-bin"
  }
]

// ... and 1133 more files (download for full content)

About this extraction

This page contains the full source code of the didi/chameleon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1333 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 2185 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!