react-source 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * JSXTransformer v0.3.0
2
+ * JSXTransformer v0.3.2
3
3
  */
4
4
  (function(e){if("function"==typeof bootstrap)bootstrap("jsxtransformer",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeJSXTransformer=e}else"undefined"!=typeof window?window.JSXTransformer=e():global.JSXTransformer=e()})(function(){var define,ses,bootstrap,module,exports;
5
5
  return (function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
@@ -729,294 +729,7 @@ function transform(visitors, source, options) {
729
729
  exports.transform = transform;
730
730
 
731
731
  })()
732
- },{"./utils":8,"source-map":9,"esprima":10}],11:[function(require,module,exports){
733
- (function(){/**
734
- * Copyright 2013 Facebook, Inc.
735
- *
736
- * Licensed under the Apache License, Version 2.0 (the "License");
737
- * you may not use this file except in compliance with the License.
738
- * You may obtain a copy of the License at
739
- *
740
- * http://www.apache.org/licenses/LICENSE-2.0
741
- *
742
- * Unless required by applicable law or agreed to in writing, software
743
- * distributed under the License is distributed on an "AS IS" BASIS,
744
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
745
- * See the License for the specific language governing permissions and
746
- * limitations under the License.
747
- */
748
- /*global exports:true*/
749
- "use strict";
750
- var catchup = require('../lib/utils').catchup;
751
- var append = require('../lib/utils').append;
752
- var move = require('../lib/utils').move;
753
-
754
- var knownTags = {
755
- a: true,
756
- abbr: true,
757
- address: true,
758
- applet: true,
759
- area: true,
760
- article: true,
761
- aside: true,
762
- audio: true,
763
- b: true,
764
- base: true,
765
- bdi: true,
766
- bdo: true,
767
- blockquote: true,
768
- body: true,
769
- br: true,
770
- button: true,
771
- canvas: true,
772
- circle: true,
773
- ellipse: true,
774
- caption: true,
775
- cite: true,
776
- code: true,
777
- col: true,
778
- colgroup: true,
779
- command: true,
780
- data: true,
781
- datalist: true,
782
- dd: true,
783
- del: true,
784
- details: true,
785
- dfn: true,
786
- dialog: true,
787
- div: true,
788
- dl: true,
789
- dt: true,
790
- em: true,
791
- embed: true,
792
- fieldset: true,
793
- figcaption: true,
794
- figure: true,
795
- footer: true,
796
- form: true,
797
- g: true,
798
- h1: true,
799
- h2: true,
800
- h3: true,
801
- h4: true,
802
- h5: true,
803
- h6: true,
804
- head: true,
805
- header: true,
806
- hgroup: true,
807
- hr: true,
808
- html: true,
809
- i: true,
810
- iframe: true,
811
- img: true,
812
- input: true,
813
- ins: true,
814
- kbd: true,
815
- keygen: true,
816
- label: true,
817
- legend: true,
818
- li: true,
819
- line: true,
820
- link: true,
821
- map: true,
822
- mark: true,
823
- marquee: true,
824
- menu: true,
825
- meta: true,
826
- meter: true,
827
- nav: true,
828
- noscript: true,
829
- object: true,
830
- ol: true,
831
- optgroup: true,
832
- option: true,
833
- output: true,
834
- p: true,
835
- path: true,
836
- param: true,
837
- pre: true,
838
- progress: true,
839
- q: true,
840
- rect: true,
841
- rp: true,
842
- rt: true,
843
- ruby: true,
844
- s: true,
845
- samp: true,
846
- script: true,
847
- section: true,
848
- select: true,
849
- small: true,
850
- source: true,
851
- span: true,
852
- strong: true,
853
- style: true,
854
- sub: true,
855
- summary: true,
856
- sup: true,
857
- svg: true,
858
- table: true,
859
- tbody: true,
860
- td: true,
861
- text: true,
862
- textarea: true,
863
- tfoot: true,
864
- th: true,
865
- thead: true,
866
- time: true,
867
- title: true,
868
- tr: true,
869
- track: true,
870
- u: true,
871
- ul: true,
872
- 'var': true,
873
- video: true,
874
- wbr: true
875
- };
876
-
877
- function safeTrim(string) {
878
- return string.replace(/^[ \t]+/, '').replace(/[ \t]+$/, '');
879
- }
880
-
881
- // Replace all trailing whitespace characters with a single space character
882
- function trimWithSingleSpace(string) {
883
- return string.replace(/^[ \t\xA0]{2,}/, ' ').
884
- replace(/[ \t\xA0]{2,}$/, ' ').replace(/^\s+$/, '');
885
- }
886
-
887
- /**
888
- * Special handling for multiline string literals
889
- * print lines:
890
- *
891
- * line
892
- * line
893
- *
894
- * as:
895
- *
896
- * "line "+
897
- * "line"
898
- */
899
- function renderXJSLiteral(object, isLast, state, start, end) {
900
- /** Added blank check filtering and triming*/
901
- var trimmedChildValue = safeTrim(object.value);
902
-
903
- if (trimmedChildValue) {
904
- // head whitespace
905
- append(object.value.match(/^[\t ]*/)[0], state);
906
- if (start) {
907
- append(start, state);
908
- }
909
-
910
- var trimmedChildValueWithSpace = trimWithSingleSpace(object.value);
911
-
912
- /**
913
- */
914
- var initialLines = trimmedChildValue.split(/\r\n|\n|\r/);
915
-
916
- var lines = initialLines.filter(function(line) {
917
- return safeTrim(line).length > 0;
918
- });
919
-
920
- var hasInitialNewLine = initialLines[0] !== lines[0];
921
- var hasFinalNewLine =
922
- initialLines[initialLines.length - 1] !== lines[lines.length - 1];
923
-
924
- var numLines = lines.length;
925
- lines.forEach(function (line, ii) {
926
- var lastLine = ii === numLines - 1;
927
- var trimmedLine = safeTrim(line);
928
- if (trimmedLine === '' && !lastLine) {
929
- append(line, state);
930
- } else {
931
- var preString = '';
932
- var postString = '';
933
- var leading = '';
934
-
935
- if (ii === 0) {
936
- if (hasInitialNewLine) {
937
- preString = ' ';
938
- leading = '\n';
939
- }
940
- if (trimmedChildValueWithSpace.substring(0, 1) === ' ') {
941
- // If this is the first line, and the original content starts with
942
- // whitespace, place a single space at the beginning.
943
- preString = ' ';
944
- }
945
- } else {
946
- leading = line.match(/^[ \t]*/)[0];
947
- }
948
- if (!lastLine || trimmedChildValueWithSpace.substr(
949
- trimmedChildValueWithSpace.length - 1, 1) === ' ' ||
950
- hasFinalNewLine
951
- ) {
952
- // If either not on the last line, or the original content ends with
953
- // whitespace, place a single character at the end.
954
- postString = ' ';
955
- }
956
-
957
- append(
958
- leading +
959
- JSON.stringify(
960
- preString + trimmedLine + postString
961
- ) +
962
- (lastLine ? '' : '+') +
963
- line.match(/[ \t]*$/)[0],
964
- state);
965
- }
966
- if (!lastLine) {
967
- append('\n', state);
968
- }
969
- });
970
- } else {
971
- if (start) {
972
- append(start, state);
973
- }
974
- append('""', state);
975
- }
976
- if (end) {
977
- append(end, state);
978
- }
979
-
980
- // add comma before trailing whitespace
981
- if (!isLast) {
982
- append(',', state);
983
- }
984
-
985
- // tail whitespace
986
- append(object.value.match(/[ \t]*$/)[0], state);
987
- move(object.range[1], state);
988
- }
989
-
990
- function renderXJSExpression(traverse, object, isLast, path, state) {
991
- // Plus 1 to skip `{`.
992
- move(object.range[0] + 1, state);
993
- traverse(object.value, path, state);
994
- if (!isLast) {
995
- // If we need to append a comma, make sure to do so after the expression.
996
- catchup(object.value.range[1], state);
997
- append(',', state);
998
- }
999
- // Minus 1 to skip `}`.
1000
- catchup(object.range[1] - 1, state);
1001
- move(object.range[1], state);
1002
- return false;
1003
- }
1004
-
1005
- function quoteAttrName(attr) {
1006
- // Quote invalid JS identifiers.
1007
- if (!/^[a-z_$][a-z\d_$]*$/i.test(attr)) {
1008
- return "'" + attr + "'";
1009
- }
1010
- return attr;
1011
- }
1012
-
1013
- exports.knownTags = knownTags;
1014
- exports.renderXJSExpression = renderXJSExpression;
1015
- exports.renderXJSLiteral = renderXJSLiteral;
1016
- exports.quoteAttrName = quoteAttrName;
1017
-
1018
- })()
1019
- },{"../lib/utils":8}],10:[function(require,module,exports){
732
+ },{"./utils":8,"esprima":9,"source-map":10}],9:[function(require,module,exports){
1020
733
  (function(){/*
1021
734
  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
1022
735
  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
@@ -6965,30 +6678,135 @@ parseYieldExpression: true
6965
6678
  labelSet: {},
6966
6679
  inFunctionBody: false,
6967
6680
  inIteration: false,
6968
- inSwitch: false
6681
+ inSwitch: false
6682
+ };
6683
+
6684
+ extra = {};
6685
+
6686
+ // Options matching.
6687
+ options = options || {};
6688
+
6689
+ // Of course we collect tokens here.
6690
+ options.tokens = true;
6691
+ extra.tokens = [];
6692
+ extra.tokenize = true;
6693
+ // The following two fields are necessary to compute the Regex tokens.
6694
+ extra.openParenToken = -1;
6695
+ extra.openCurlyToken = -1;
6696
+
6697
+ extra.range = (typeof options.range === 'boolean') && options.range;
6698
+ extra.loc = (typeof options.loc === 'boolean') && options.loc;
6699
+
6700
+ if (typeof options.comment === 'boolean' && options.comment) {
6701
+ extra.comments = [];
6702
+ }
6703
+ if (typeof options.tolerant === 'boolean' && options.tolerant) {
6704
+ extra.errors = [];
6705
+ }
6706
+
6707
+ if (length > 0) {
6708
+ if (typeof source[0] === 'undefined') {
6709
+ // Try first to convert to a string. This is good as fast path
6710
+ // for old IE which understands string indexing for string
6711
+ // literals only and not for string object.
6712
+ if (code instanceof String) {
6713
+ source = code.valueOf();
6714
+ }
6715
+ }
6716
+ }
6717
+
6718
+ patch();
6719
+
6720
+ try {
6721
+ peek();
6722
+ if (lookahead.type === Token.EOF) {
6723
+ return extra.tokens;
6724
+ }
6725
+
6726
+ token = lex();
6727
+ while (lookahead.type !== Token.EOF) {
6728
+ try {
6729
+ token = lex();
6730
+ } catch (lexError) {
6731
+ token = lookahead;
6732
+ if (extra.errors) {
6733
+ extra.errors.push(lexError);
6734
+ // We have to break on the first error
6735
+ // to avoid infinite loops.
6736
+ break;
6737
+ } else {
6738
+ throw lexError;
6739
+ }
6740
+ }
6741
+ }
6742
+
6743
+ filterTokenLocation();
6744
+ tokens = extra.tokens;
6745
+ if (typeof extra.comments !== 'undefined') {
6746
+ filterCommentLocation();
6747
+ tokens.comments = extra.comments;
6748
+ }
6749
+ if (typeof extra.errors !== 'undefined') {
6750
+ tokens.errors = extra.errors;
6751
+ }
6752
+ } catch (e) {
6753
+ throw e;
6754
+ } finally {
6755
+ unpatch();
6756
+ extra = {};
6757
+ }
6758
+ return tokens;
6759
+ }
6760
+
6761
+ function parse(code, options) {
6762
+ var program, toString;
6763
+
6764
+ toString = String;
6765
+ if (typeof code !== 'string' && !(code instanceof String)) {
6766
+ code = toString(code);
6767
+ }
6768
+
6769
+ delegate = SyntaxTreeDelegate;
6770
+ source = code;
6771
+ index = 0;
6772
+ lineNumber = (source.length > 0) ? 1 : 0;
6773
+ lineStart = 0;
6774
+ length = source.length;
6775
+ lookahead = null;
6776
+ state = {
6777
+ allowIn: true,
6778
+ labelSet: {},
6779
+ parenthesizedCount: 0,
6780
+ inFunctionBody: false,
6781
+ inIteration: false,
6782
+ inSwitch: false,
6783
+ yieldAllowed: false,
6784
+ yieldFound: false
6969
6785
  };
6970
6786
 
6971
6787
  extra = {};
6788
+ if (typeof options !== 'undefined') {
6789
+ extra.range = (typeof options.range === 'boolean') && options.range;
6790
+ extra.loc = (typeof options.loc === 'boolean') && options.loc;
6972
6791
 
6973
- // Options matching.
6974
- options = options || {};
6975
-
6976
- // Of course we collect tokens here.
6977
- options.tokens = true;
6978
- extra.tokens = [];
6979
- extra.tokenize = true;
6980
- // The following two fields are necessary to compute the Regex tokens.
6981
- extra.openParenToken = -1;
6982
- extra.openCurlyToken = -1;
6983
-
6984
- extra.range = (typeof options.range === 'boolean') && options.range;
6985
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
6792
+ if (extra.loc && options.source !== null && options.source !== undefined) {
6793
+ delegate = extend(delegate, {
6794
+ 'postProcess': function (node) {
6795
+ node.loc.source = toString(options.source);
6796
+ return node;
6797
+ }
6798
+ });
6799
+ }
6986
6800
 
6987
- if (typeof options.comment === 'boolean' && options.comment) {
6988
- extra.comments = [];
6989
- }
6990
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
6991
- extra.errors = [];
6801
+ if (typeof options.tokens === 'boolean' && options.tokens) {
6802
+ extra.tokens = [];
6803
+ }
6804
+ if (typeof options.comment === 'boolean' && options.comment) {
6805
+ extra.comments = [];
6806
+ }
6807
+ if (typeof options.tolerant === 'boolean' && options.tolerant) {
6808
+ extra.errors = [];
6809
+ }
6992
6810
  }
6993
6811
 
6994
6812
  if (length > 0) {
@@ -7003,170 +6821,352 @@ parseYieldExpression: true
7003
6821
  }
7004
6822
 
7005
6823
  patch();
7006
-
7007
6824
  try {
7008
- peek();
7009
- if (lookahead.type === Token.EOF) {
7010
- return extra.tokens;
6825
+ program = parseProgram();
6826
+ if (typeof extra.comments !== 'undefined') {
6827
+ filterCommentLocation();
6828
+ program.comments = extra.comments;
6829
+ }
6830
+ if (typeof extra.tokens !== 'undefined') {
6831
+ filterTokenLocation();
6832
+ program.tokens = extra.tokens;
6833
+ }
6834
+ if (typeof extra.errors !== 'undefined') {
6835
+ program.errors = extra.errors;
6836
+ }
6837
+ if (extra.range || extra.loc) {
6838
+ program.body = filterGroup(program.body);
6839
+ }
6840
+ } catch (e) {
6841
+ throw e;
6842
+ } finally {
6843
+ unpatch();
6844
+ extra = {};
6845
+ }
6846
+
6847
+ return program;
6848
+ }
6849
+
6850
+ // Sync with package.json and component.json.
6851
+ exports.version = '1.1.0-dev-harmony';
6852
+
6853
+ exports.tokenize = tokenize;
6854
+
6855
+ exports.parse = parse;
6856
+
6857
+ // Deep copy.
6858
+ exports.Syntax = (function () {
6859
+ var name, types = {};
6860
+
6861
+ if (typeof Object.create === 'function') {
6862
+ types = Object.create(null);
6863
+ }
6864
+
6865
+ for (name in Syntax) {
6866
+ if (Syntax.hasOwnProperty(name)) {
6867
+ types[name] = Syntax[name];
7011
6868
  }
6869
+ }
6870
+
6871
+ if (typeof Object.freeze === 'function') {
6872
+ Object.freeze(types);
6873
+ }
6874
+
6875
+ return types;
6876
+ }());
6877
+
6878
+ }));
6879
+ /* vim: set sw=4 ts=4 et tw=80 : */
6880
+
6881
+ })()
6882
+ },{}],11:[function(require,module,exports){
6883
+ (function(){/**
6884
+ * Copyright 2013 Facebook, Inc.
6885
+ *
6886
+ * Licensed under the Apache License, Version 2.0 (the "License");
6887
+ * you may not use this file except in compliance with the License.
6888
+ * You may obtain a copy of the License at
6889
+ *
6890
+ * http://www.apache.org/licenses/LICENSE-2.0
6891
+ *
6892
+ * Unless required by applicable law or agreed to in writing, software
6893
+ * distributed under the License is distributed on an "AS IS" BASIS,
6894
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6895
+ * See the License for the specific language governing permissions and
6896
+ * limitations under the License.
6897
+ */
6898
+ /*global exports:true*/
6899
+ "use strict";
6900
+ var catchup = require('../lib/utils').catchup;
6901
+ var append = require('../lib/utils').append;
6902
+ var move = require('../lib/utils').move;
6903
+
6904
+ var knownTags = {
6905
+ a: true,
6906
+ abbr: true,
6907
+ address: true,
6908
+ applet: true,
6909
+ area: true,
6910
+ article: true,
6911
+ aside: true,
6912
+ audio: true,
6913
+ b: true,
6914
+ base: true,
6915
+ bdi: true,
6916
+ bdo: true,
6917
+ blockquote: true,
6918
+ body: true,
6919
+ br: true,
6920
+ button: true,
6921
+ canvas: true,
6922
+ circle: true,
6923
+ ellipse: true,
6924
+ caption: true,
6925
+ cite: true,
6926
+ code: true,
6927
+ col: true,
6928
+ colgroup: true,
6929
+ command: true,
6930
+ data: true,
6931
+ datalist: true,
6932
+ dd: true,
6933
+ del: true,
6934
+ details: true,
6935
+ dfn: true,
6936
+ dialog: true,
6937
+ div: true,
6938
+ dl: true,
6939
+ dt: true,
6940
+ em: true,
6941
+ embed: true,
6942
+ fieldset: true,
6943
+ figcaption: true,
6944
+ figure: true,
6945
+ footer: true,
6946
+ form: true,
6947
+ g: true,
6948
+ h1: true,
6949
+ h2: true,
6950
+ h3: true,
6951
+ h4: true,
6952
+ h5: true,
6953
+ h6: true,
6954
+ head: true,
6955
+ header: true,
6956
+ hgroup: true,
6957
+ hr: true,
6958
+ html: true,
6959
+ i: true,
6960
+ iframe: true,
6961
+ img: true,
6962
+ input: true,
6963
+ ins: true,
6964
+ kbd: true,
6965
+ keygen: true,
6966
+ label: true,
6967
+ legend: true,
6968
+ li: true,
6969
+ line: true,
6970
+ link: true,
6971
+ map: true,
6972
+ mark: true,
6973
+ marquee: true,
6974
+ menu: true,
6975
+ meta: true,
6976
+ meter: true,
6977
+ nav: true,
6978
+ noscript: true,
6979
+ object: true,
6980
+ ol: true,
6981
+ optgroup: true,
6982
+ option: true,
6983
+ output: true,
6984
+ p: true,
6985
+ path: true,
6986
+ param: true,
6987
+ pre: true,
6988
+ progress: true,
6989
+ q: true,
6990
+ rect: true,
6991
+ rp: true,
6992
+ rt: true,
6993
+ ruby: true,
6994
+ s: true,
6995
+ samp: true,
6996
+ script: true,
6997
+ section: true,
6998
+ select: true,
6999
+ small: true,
7000
+ source: true,
7001
+ span: true,
7002
+ strong: true,
7003
+ style: true,
7004
+ sub: true,
7005
+ summary: true,
7006
+ sup: true,
7007
+ svg: true,
7008
+ table: true,
7009
+ tbody: true,
7010
+ td: true,
7011
+ text: true,
7012
+ textarea: true,
7013
+ tfoot: true,
7014
+ th: true,
7015
+ thead: true,
7016
+ time: true,
7017
+ title: true,
7018
+ tr: true,
7019
+ track: true,
7020
+ u: true,
7021
+ ul: true,
7022
+ 'var': true,
7023
+ video: true,
7024
+ wbr: true
7025
+ };
7026
+
7027
+ function safeTrim(string) {
7028
+ return string.replace(/^[ \t]+/, '').replace(/[ \t]+$/, '');
7029
+ }
7030
+
7031
+ // Replace all trailing whitespace characters with a single space character
7032
+ function trimWithSingleSpace(string) {
7033
+ return string.replace(/^[ \t\xA0]{2,}/, ' ').
7034
+ replace(/[ \t\xA0]{2,}$/, ' ').replace(/^\s+$/, '');
7035
+ }
7012
7036
 
7013
- token = lex();
7014
- while (lookahead.type !== Token.EOF) {
7015
- try {
7016
- token = lex();
7017
- } catch (lexError) {
7018
- token = lookahead;
7019
- if (extra.errors) {
7020
- extra.errors.push(lexError);
7021
- // We have to break on the first error
7022
- // to avoid infinite loops.
7023
- break;
7024
- } else {
7025
- throw lexError;
7026
- }
7027
- }
7028
- }
7037
+ /**
7038
+ * Special handling for multiline string literals
7039
+ * print lines:
7040
+ *
7041
+ * line
7042
+ * line
7043
+ *
7044
+ * as:
7045
+ *
7046
+ * "line "+
7047
+ * "line"
7048
+ */
7049
+ function renderXJSLiteral(object, isLast, state, start, end) {
7050
+ /** Added blank check filtering and triming*/
7051
+ var trimmedChildValue = safeTrim(object.value);
7029
7052
 
7030
- filterTokenLocation();
7031
- tokens = extra.tokens;
7032
- if (typeof extra.comments !== 'undefined') {
7033
- filterCommentLocation();
7034
- tokens.comments = extra.comments;
7035
- }
7036
- if (typeof extra.errors !== 'undefined') {
7037
- tokens.errors = extra.errors;
7038
- }
7039
- } catch (e) {
7040
- throw e;
7041
- } finally {
7042
- unpatch();
7043
- extra = {};
7044
- }
7045
- return tokens;
7053
+ if (trimmedChildValue) {
7054
+ // head whitespace
7055
+ append(object.value.match(/^[\t ]*/)[0], state);
7056
+ if (start) {
7057
+ append(start, state);
7046
7058
  }
7047
7059
 
7048
- function parse(code, options) {
7049
- var program, toString;
7050
-
7051
- toString = String;
7052
- if (typeof code !== 'string' && !(code instanceof String)) {
7053
- code = toString(code);
7054
- }
7060
+ var trimmedChildValueWithSpace = trimWithSingleSpace(object.value);
7055
7061
 
7056
- delegate = SyntaxTreeDelegate;
7057
- source = code;
7058
- index = 0;
7059
- lineNumber = (source.length > 0) ? 1 : 0;
7060
- lineStart = 0;
7061
- length = source.length;
7062
- lookahead = null;
7063
- state = {
7064
- allowIn: true,
7065
- labelSet: {},
7066
- parenthesizedCount: 0,
7067
- inFunctionBody: false,
7068
- inIteration: false,
7069
- inSwitch: false,
7070
- yieldAllowed: false,
7071
- yieldFound: false
7072
- };
7062
+ /**
7063
+ */
7064
+ var initialLines = trimmedChildValue.split(/\r\n|\n|\r/);
7073
7065
 
7074
- extra = {};
7075
- if (typeof options !== 'undefined') {
7076
- extra.range = (typeof options.range === 'boolean') && options.range;
7077
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
7066
+ var lines = initialLines.filter(function(line) {
7067
+ return safeTrim(line).length > 0;
7068
+ });
7078
7069
 
7079
- if (extra.loc && options.source !== null && options.source !== undefined) {
7080
- delegate = extend(delegate, {
7081
- 'postProcess': function (node) {
7082
- node.loc.source = toString(options.source);
7083
- return node;
7084
- }
7085
- });
7086
- }
7070
+ var hasInitialNewLine = initialLines[0] !== lines[0];
7071
+ var hasFinalNewLine =
7072
+ initialLines[initialLines.length - 1] !== lines[lines.length - 1];
7087
7073
 
7088
- if (typeof options.tokens === 'boolean' && options.tokens) {
7089
- extra.tokens = [];
7090
- }
7091
- if (typeof options.comment === 'boolean' && options.comment) {
7092
- extra.comments = [];
7093
- }
7094
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
7095
- extra.errors = [];
7096
- }
7097
- }
7074
+ var numLines = lines.length;
7075
+ lines.forEach(function (line, ii) {
7076
+ var lastLine = ii === numLines - 1;
7077
+ var trimmedLine = safeTrim(line);
7078
+ if (trimmedLine === '' && !lastLine) {
7079
+ append(line, state);
7080
+ } else {
7081
+ var preString = '';
7082
+ var postString = '';
7083
+ var leading = '';
7098
7084
 
7099
- if (length > 0) {
7100
- if (typeof source[0] === 'undefined') {
7101
- // Try first to convert to a string. This is good as fast path
7102
- // for old IE which understands string indexing for string
7103
- // literals only and not for string object.
7104
- if (code instanceof String) {
7105
- source = code.valueOf();
7106
- }
7107
- }
7085
+ if (ii === 0) {
7086
+ if (hasInitialNewLine) {
7087
+ preString = ' ';
7088
+ leading = '\n';
7089
+ }
7090
+ if (trimmedChildValueWithSpace.substring(0, 1) === ' ') {
7091
+ // If this is the first line, and the original content starts with
7092
+ // whitespace, place a single space at the beginning.
7093
+ preString = ' ';
7094
+ }
7095
+ } else {
7096
+ leading = line.match(/^[ \t]*/)[0];
7108
7097
  }
7109
-
7110
- patch();
7111
- try {
7112
- program = parseProgram();
7113
- if (typeof extra.comments !== 'undefined') {
7114
- filterCommentLocation();
7115
- program.comments = extra.comments;
7116
- }
7117
- if (typeof extra.tokens !== 'undefined') {
7118
- filterTokenLocation();
7119
- program.tokens = extra.tokens;
7120
- }
7121
- if (typeof extra.errors !== 'undefined') {
7122
- program.errors = extra.errors;
7123
- }
7124
- if (extra.range || extra.loc) {
7125
- program.body = filterGroup(program.body);
7126
- }
7127
- } catch (e) {
7128
- throw e;
7129
- } finally {
7130
- unpatch();
7131
- extra = {};
7098
+ if (!lastLine || trimmedChildValueWithSpace.substr(
7099
+ trimmedChildValueWithSpace.length - 1, 1) === ' ' ||
7100
+ hasFinalNewLine
7101
+ ) {
7102
+ // If either not on the last line, or the original content ends with
7103
+ // whitespace, place a single character at the end.
7104
+ postString = ' ';
7132
7105
  }
7133
7106
 
7134
- return program;
7107
+ append(
7108
+ leading +
7109
+ JSON.stringify(
7110
+ preString + trimmedLine + postString
7111
+ ) +
7112
+ (lastLine ? '' : '+') +
7113
+ line.match(/[ \t]*$/)[0],
7114
+ state);
7115
+ }
7116
+ if (!lastLine) {
7117
+ append('\n', state);
7118
+ }
7119
+ });
7120
+ } else {
7121
+ if (start) {
7122
+ append(start, state);
7135
7123
  }
7124
+ append('""', state);
7125
+ }
7126
+ if (end) {
7127
+ append(end, state);
7128
+ }
7136
7129
 
7137
- // Sync with package.json and component.json.
7138
- exports.version = '1.1.0-dev-harmony';
7139
-
7140
- exports.tokenize = tokenize;
7141
-
7142
- exports.parse = parse;
7143
-
7144
- // Deep copy.
7145
- exports.Syntax = (function () {
7146
- var name, types = {};
7147
-
7148
- if (typeof Object.create === 'function') {
7149
- types = Object.create(null);
7150
- }
7130
+ // add comma before trailing whitespace
7131
+ if (!isLast) {
7132
+ append(',', state);
7133
+ }
7151
7134
 
7152
- for (name in Syntax) {
7153
- if (Syntax.hasOwnProperty(name)) {
7154
- types[name] = Syntax[name];
7155
- }
7156
- }
7135
+ // tail whitespace
7136
+ append(object.value.match(/[ \t]*$/)[0], state);
7137
+ move(object.range[1], state);
7138
+ }
7157
7139
 
7158
- if (typeof Object.freeze === 'function') {
7159
- Object.freeze(types);
7160
- }
7140
+ function renderXJSExpression(traverse, object, isLast, path, state) {
7141
+ // Plus 1 to skip `{`.
7142
+ move(object.range[0] + 1, state);
7143
+ traverse(object.value, path, state);
7144
+ if (!isLast) {
7145
+ // If we need to append a comma, make sure to do so after the expression.
7146
+ catchup(object.value.range[1], state);
7147
+ append(',', state);
7148
+ }
7149
+ // Minus 1 to skip `}`.
7150
+ catchup(object.range[1] - 1, state);
7151
+ move(object.range[1], state);
7152
+ return false;
7153
+ }
7161
7154
 
7162
- return types;
7163
- }());
7155
+ function quoteAttrName(attr) {
7156
+ // Quote invalid JS identifiers.
7157
+ if (!/^[a-z_$][a-z\d_$]*$/i.test(attr)) {
7158
+ return "'" + attr + "'";
7159
+ }
7160
+ return attr;
7161
+ }
7164
7162
 
7165
- }));
7166
- /* vim: set sw=4 ts=4 et tw=80 : */
7163
+ exports.knownTags = knownTags;
7164
+ exports.renderXJSExpression = renderXJSExpression;
7165
+ exports.renderXJSLiteral = renderXJSLiteral;
7166
+ exports.quoteAttrName = quoteAttrName;
7167
7167
 
7168
7168
  })()
7169
- },{}],9:[function(require,module,exports){
7169
+ },{"../lib/utils":8}],10:[function(require,module,exports){
7170
7170
  /*
7171
7171
  * Copyright 2009-2011 Mozilla Foundation and contributors
7172
7172
  * Licensed under the New BSD license. See LICENSE.txt or:
@@ -7671,7 +7671,7 @@ exports.visitSuperCall = visitSuperCall;
7671
7671
  exports.visitPrivateProperty = visitPrivateProperty;
7672
7672
 
7673
7673
  })()
7674
- },{"../lib/utils":8,"../lib/docblock":4,"esprima":10,"base62":15}],6:[function(require,module,exports){
7674
+ },{"../lib/utils":8,"../lib/docblock":4,"esprima":9,"base62":15}],6:[function(require,module,exports){
7675
7675
  (function(){/**
7676
7676
  * Copyright 2013 Facebook, Inc.
7677
7677
  *
@@ -7872,7 +7872,7 @@ visitReactTag.test = function(object, path, state) {
7872
7872
  exports.visitReactTag = visitReactTag;
7873
7873
 
7874
7874
  })()
7875
- },{"../lib/utils":8,"./xjs":11,"esprima":10}],7:[function(require,module,exports){
7875
+ },{"../lib/utils":8,"./xjs":11,"esprima":9}],7:[function(require,module,exports){
7876
7876
  (function(){/**
7877
7877
  * Copyright 2013 Facebook, Inc.
7878
7878
  *
@@ -7911,38 +7911,34 @@ var getDocblock = require('../lib/utils').getDocblock;
7911
7911
  * });
7912
7912
  */
7913
7913
  function visitReactDisplayName(traverse, object, path, state) {
7914
- object.declarations.forEach(function(dec) {
7915
- if (dec.type === Syntax.VariableDeclarator &&
7916
- dec.id.type === Syntax.Identifier &&
7917
- dec.init &&
7918
- dec.init.type === Syntax.CallExpression &&
7919
- dec.init.callee.type === Syntax.MemberExpression &&
7920
- dec.init.callee.object.type === Syntax.Identifier &&
7921
- dec.init.callee.object.name === 'React' &&
7922
- dec.init.callee.property.type === Syntax.Identifier &&
7923
- dec.init.callee.property.name === 'createClass' &&
7924
- dec.init['arguments'].length === 1 &&
7925
- dec.init['arguments'][0].type === Syntax.ObjectExpression) {
7926
-
7927
- var displayName = dec.id.name;
7928
- catchup(dec.init['arguments'][0].range[0] + 1, state);
7929
- append("displayName: '" + displayName + "',", state);
7930
- }
7931
- });
7914
+ if (object.id.type === Syntax.Identifier &&
7915
+ object.init &&
7916
+ object.init.type === Syntax.CallExpression &&
7917
+ object.init.callee.type === Syntax.MemberExpression &&
7918
+ object.init.callee.object.type === Syntax.Identifier &&
7919
+ object.init.callee.object.name === 'React' &&
7920
+ object.init.callee.property.type === Syntax.Identifier &&
7921
+ object.init.callee.property.name === 'createClass' &&
7922
+ object.init['arguments'].length === 1 &&
7923
+ object.init['arguments'][0].type === Syntax.ObjectExpression) {
7924
+
7925
+ var displayName = object.id.name;
7926
+ catchup(object.init['arguments'][0].range[0] + 1, state);
7927
+ append("displayName: '" + displayName + "',", state);
7928
+ }
7932
7929
  }
7933
7930
 
7934
-
7935
7931
  /**
7936
7932
  * Will only run on @jsx files for now.
7937
7933
  */
7938
7934
  visitReactDisplayName.test = function(object, path, state) {
7939
- return object.type === Syntax.VariableDeclaration && !!getDocblock(state).jsx;
7935
+ return object.type === Syntax.VariableDeclarator && !!getDocblock(state).jsx;
7940
7936
  };
7941
7937
 
7942
7938
  exports.visitReactDisplayName = visitReactDisplayName;
7943
7939
 
7944
7940
  })()
7945
- },{"../lib/utils":8,"esprima":10}],15:[function(require,module,exports){
7941
+ },{"../lib/utils":8,"esprima":9}],15:[function(require,module,exports){
7946
7942
  var Base62 = (function (my) {
7947
7943
  my.chars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
7948
7944