1 | 'use strict';
|
2 |
|
3 | var _ = require('lodash');
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | function shouldUseCreateElement(context) {
|
10 | switch (context.options.targetVersion) {
|
11 | case '0.11.2':
|
12 | case '0.11.1':
|
13 | case '0.11.0':
|
14 | case '0.10.0':
|
15 | return false;
|
16 | default:
|
17 | return true;
|
18 | }
|
19 | }
|
20 |
|
21 | var reactSupportedAttributes = ['accept', 'acceptCharset', 'accessKey', 'action', 'allowFullScreen', 'allowTransparency', 'alt', 'async', 'autoComplete', 'autoPlay', 'cellPadding', 'cellSpacing', 'charSet', 'checked', 'classID', 'className', 'cols', 'colSpan', 'content', 'contentEditable', 'contextMenu', 'controls', 'coords', 'crossOrigin', 'data', 'dateTime', 'defer', 'dir', 'disabled', 'download', 'draggable', 'encType', 'form', 'formNoValidate', 'frameBorder', 'height', 'hidden', 'href', 'hrefLang', 'htmlFor', 'httpEquiv', 'icon', 'id', 'label', 'lang', 'list', 'loop', 'manifest', 'max', 'maxLength', 'media', 'mediaGroup', 'method', 'min', 'multiple', 'muted', 'name', 'noValidate', 'open', 'pattern', 'placeholder', 'poster', 'preload', 'radioGroup', 'readOnly', 'rel', 'required', 'role', 'rows', 'rowSpan', 'sandbox', 'scope', 'scrolling', 'seamless', 'selected', 'shape', 'size', 'sizes', 'span', 'spellCheck', 'src', 'srcDoc', 'srcSet', 'start', 'step', 'style', 'tabIndex', 'target', 'title', 'type', 'useMap', 'value', 'width', 'wmode'];
|
22 | var classNameProp = 'className';
|
23 | var attributesMapping = { 'class': classNameProp, 'rt-class': classNameProp, 'for': 'htmlFor' };
|
24 |
|
25 | _.forEach(reactSupportedAttributes, function (attributeReactName) {
|
26 | if (attributeReactName !== attributeReactName.toLowerCase()) {
|
27 | attributesMapping[attributeReactName.toLowerCase()] = attributeReactName;
|
28 | }
|
29 | });
|
30 |
|
31 | var htmlSelfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
|
32 |
|
33 | var templateAMDTemplate = _.template("define(<%= name ? '\"'+name + '\", ' : '' %>[<%= requirePaths %>], function (<%= requireNames %>) {\n'use strict';\n <%= injectedFunctions %>\nreturn function(<%= statelessProps %>){ return <%= body %>};\n});");
|
34 | var templateCommonJSTemplate = _.template("'use strict';\n<%= vars %>\n\n<%= injectedFunctions %>\nmodule.exports = function(<%= statelessProps %>){ return <%= body %>};\n");
|
35 | var templateES6Template = _.template('<%= vars %>\n\n<%= injectedFunctions %>\nexport default function(<%= statelessProps %>){ return <%= body %>}\n');
|
36 | var templatePJSTemplate = _.template('var <%= name %> = function (<%= statelessProps %>) {\n<%= injectedFunctions %>\nreturn <%= body %>\n};\n');
|
37 | var templateTypescriptTemplate = _.template('<%= vars %>\n\n<%= injectedFunctions %>\nvar fn = function() { return <%= body %> };\nexport = fn\n');
|
38 | var templateJSRTTemplate = _.template('(function () {\n <%= injectedFunctions %>\n return function(){\nreturn <%= body %>}}\n)()');
|
39 |
|
40 | var templates = {
|
41 | amd: templateAMDTemplate,
|
42 | commonjs: templateCommonJSTemplate,
|
43 | typescript: templateTypescriptTemplate,
|
44 | es6: templateES6Template,
|
45 | none: templatePJSTemplate,
|
46 | jsrt: templateJSRTTemplate
|
47 | };
|
48 |
|
49 | var isImportAsterisk = _.matches({ member: '*' });
|
50 | var defaultCase = _.constant(true);
|
51 |
|
52 | var buildImportTypeScript = _.cond([[isImportAsterisk, function (d) {
|
53 | return 'import ' + d.alias + ' = require(\'' + d.moduleName + '\');';
|
54 | }], [defaultCase, function (d) {
|
55 | return 'import ' + d.alias + ' = require(\'' + d.moduleName + '\').' + d.member + ';';
|
56 | }]]);
|
57 |
|
58 | var buildImportES6 = _.cond([[isImportAsterisk, function (d) {
|
59 | return 'import * as ' + d.alias + ' from \'' + d.moduleName + '\';';
|
60 | }], [_.matches({ member: 'default' }), function (d) {
|
61 | return 'import ' + d.alias + ' from \'' + d.moduleName + '\';';
|
62 | }], [defaultCase, function (d) {
|
63 | return 'import { ' + d.member + ' as ' + d.alias + ' } from \'' + d.moduleName + '\';';
|
64 | }]]);
|
65 |
|
66 | var buildImportCommonJS = _.cond([[isImportAsterisk, function (d) {
|
67 | return 'var ' + d.alias + ' = require(\'' + d.moduleName + '\');';
|
68 | }], [defaultCase, function (d) {
|
69 | return 'var ' + d.alias + ' = require(\'' + d.moduleName + '\').' + d.member + ';';
|
70 | }]]);
|
71 |
|
72 | var buildImport = {
|
73 | typescript: buildImportTypeScript,
|
74 | es6: buildImportES6,
|
75 | commonjs: buildImportCommonJS,
|
76 | amd: buildImportCommonJS,
|
77 | none: buildImportCommonJS,
|
78 | jsrt: buildImportCommonJS
|
79 | };
|
80 |
|
81 | module.exports = {
|
82 | htmlSelfClosingTags: htmlSelfClosingTags,
|
83 | attributesMapping: attributesMapping,
|
84 | classNameProp: classNameProp,
|
85 | shouldUseCreateElement: shouldUseCreateElement,
|
86 | templates: templates,
|
87 | buildImport: buildImport
|
88 | }; |
\ | No newline at end of file |