jass 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/jass.rb +5 -0
  4. data/lib/jass/compiler.rb +5 -0
  5. data/lib/jass/plugin.rb +2 -1
  6. data/lib/jass/version.rb +1 -1
  7. data/vendor/node_modules/@types/estree/index.d.ts +4 -2
  8. data/vendor/node_modules/@types/estree/package.json +2 -2
  9. data/vendor/node_modules/acorn/bin/_acorn.js +12 -12
  10. data/vendor/node_modules/acorn/bin/run_test262.js +2 -3
  11. data/vendor/node_modules/acorn/bin/test262.whitelist +0 -5
  12. data/vendor/node_modules/acorn/dist/acorn.es.js +76 -68
  13. data/vendor/node_modules/acorn/dist/acorn.js +76 -68
  14. data/vendor/node_modules/acorn/dist/acorn_loose.es.js +42 -30
  15. data/vendor/node_modules/acorn/dist/acorn_loose.js +42 -30
  16. data/vendor/node_modules/acorn/dist/walk.es.js +47 -43
  17. data/vendor/node_modules/acorn/dist/walk.js +47 -43
  18. data/vendor/node_modules/acorn/package.json +9 -5
  19. data/vendor/node_modules/chalk/index.js.flow +93 -0
  20. data/vendor/node_modules/chalk/package.json +8 -3
  21. data/vendor/node_modules/color-convert/conversions.js +36 -29
  22. data/vendor/node_modules/color-convert/package.json +4 -4
  23. data/vendor/node_modules/estree-walker/index.d.ts +17 -0
  24. data/vendor/node_modules/estree-walker/package.json +2 -1
  25. data/vendor/node_modules/fill-range/index.js +2 -2
  26. data/vendor/node_modules/fill-range/package.json +24 -7
  27. data/vendor/node_modules/is-reference/node_modules/@types/estree/index.d.ts +546 -0
  28. data/vendor/node_modules/is-reference/node_modules/@types/estree/package.json +22 -0
  29. data/vendor/node_modules/math-random/browser.js +17 -0
  30. data/vendor/node_modules/math-random/node.js +13 -0
  31. data/vendor/node_modules/math-random/package.json +31 -0
  32. data/vendor/node_modules/math-random/test.js +26 -0
  33. data/vendor/node_modules/nodent-compiler/compiler.js +115 -11
  34. data/vendor/node_modules/nodent-compiler/{lib/output.js → output.js} +0 -0
  35. data/vendor/node_modules/nodent-compiler/package.json +8 -4
  36. data/vendor/node_modules/{nodent-compiler/lib → nodent-transform}/arboriculture.js +1340 -1107
  37. data/vendor/node_modules/nodent-transform/package.json +19 -0
  38. data/vendor/node_modules/path-parse/package.json +1 -1
  39. data/vendor/node_modules/pretty-ms/index.js +2 -1
  40. data/vendor/node_modules/pretty-ms/package.json +2 -3
  41. data/vendor/node_modules/randomatic/index.js +12 -2
  42. data/vendor/node_modules/randomatic/node_modules/is-number/index.js +6 -7
  43. data/vendor/node_modules/randomatic/node_modules/is-number/package.json +9 -16
  44. data/vendor/node_modules/randomatic/node_modules/kind-of/index.js +112 -102
  45. data/vendor/node_modules/randomatic/node_modules/kind-of/package.json +18 -20
  46. data/vendor/node_modules/randomatic/package.json +15 -13
  47. data/vendor/node_modules/repeat-element/index.js +1 -1
  48. data/vendor/node_modules/repeat-element/package.json +27 -22
  49. data/vendor/node_modules/resolve/lib/async.js +20 -17
  50. data/vendor/node_modules/resolve/lib/core.js +2 -2
  51. data/vendor/node_modules/resolve/lib/core.json +4 -1
  52. data/vendor/node_modules/resolve/lib/sync.js +52 -13
  53. data/vendor/node_modules/resolve/package.json +3 -3
  54. data/vendor/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js +50 -12
  55. data/vendor/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js +50 -12
  56. data/vendor/node_modules/rollup-plugin-commonjs/package.json +2 -2
  57. data/vendor/node_modules/rollup-plugin-commonjs/src/index.js +49 -11
  58. data/vendor/node_modules/rollup-plugin-commonjs/src/transform.js +1 -1
  59. data/vendor/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js +82 -85
  60. data/vendor/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es.js +82 -85
  61. data/vendor/node_modules/rollup-plugin-node-resolve/package.json +1 -1
  62. data/vendor/node_modules/rollup-plugin-node-resolve/src/index.js +81 -84
  63. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.cjs.js +81 -2
  64. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es.js +81 -3
  65. data/vendor/node_modules/rollup-pluginutils/package.json +12 -6
  66. data/vendor/node_modules/rollup-pluginutils/src/attachScopes.js +10 -2
  67. data/vendor/node_modules/rollup-pluginutils/src/dataToEsm.js +69 -0
  68. data/vendor/node_modules/rollup-pluginutils/src/index.js +1 -0
  69. data/vendor/node_modules/supports-color/index.js +1 -5
  70. data/vendor/node_modules/supports-color/package.json +51 -51
  71. data/vendor/yarn.lock +65 -70
  72. metadata +16 -21
  73. data/vendor/node_modules/irregular-plurals/irregular-plurals.json +0 -146
  74. data/vendor/node_modules/irregular-plurals/package.json +0 -39
  75. data/vendor/node_modules/nodent-compiler/lib/parser.js +0 -291
  76. data/vendor/node_modules/path-parse/index.min.js +0 -1
  77. data/vendor/node_modules/path-parse/test.min.js +0 -1
  78. data/vendor/node_modules/plur/index.js +0 -20
  79. data/vendor/node_modules/plur/package.json +0 -42
  80. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js +0 -116
  81. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json +0 -90
  82. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es6.js +0 -217
  83. data/vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.es.js +0 -55
  84. data/vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.es6.js +0 -59
  85. data/vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js +0 -65
  86. data/vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json +0 -33
  87. data/vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/src/estree-walker.js +0 -49
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-04 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -84,14 +84,14 @@ dependencies:
84
84
  requirements:
85
85
  - - "~>"
86
86
  - !ruby/object:Gem::Version
87
- version: '0'
87
+ version: 10.0.0
88
88
  type: :development
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: '0'
94
+ version: 10.0.0
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: minitest
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -253,6 +253,7 @@ files:
253
253
  - vendor/node_modules/builtin-modules/package.json
254
254
  - vendor/node_modules/builtin-modules/static.js
255
255
  - vendor/node_modules/chalk/index.js
256
+ - vendor/node_modules/chalk/index.js.flow
256
257
  - vendor/node_modules/chalk/package.json
257
258
  - vendor/node_modules/chalk/templates.js
258
259
  - vendor/node_modules/chalk/types/index.d.ts
@@ -269,6 +270,7 @@ files:
269
270
  - vendor/node_modules/escape-string-regexp/package.json
270
271
  - vendor/node_modules/estree-walker/dist/estree-walker.es.js
271
272
  - vendor/node_modules/estree-walker/dist/estree-walker.umd.js
273
+ - vendor/node_modules/estree-walker/index.d.ts
272
274
  - vendor/node_modules/estree-walker/package.json
273
275
  - vendor/node_modules/estree-walker/src/estree-walker.js
274
276
  - vendor/node_modules/expand-brackets/index.js
@@ -292,8 +294,6 @@ files:
292
294
  - vendor/node_modules/glob-parent/test.js
293
295
  - vendor/node_modules/has-flag/index.js
294
296
  - vendor/node_modules/has-flag/package.json
295
- - vendor/node_modules/irregular-plurals/irregular-plurals.json
296
- - vendor/node_modules/irregular-plurals/package.json
297
297
  - vendor/node_modules/is-buffer/index.js
298
298
  - vendor/node_modules/is-buffer/package.json
299
299
  - vendor/node_modules/is-dotfile/index.js
@@ -317,6 +317,8 @@ files:
317
317
  - vendor/node_modules/is-reference/dist/is-reference.es.js
318
318
  - vendor/node_modules/is-reference/dist/is-reference.js
319
319
  - vendor/node_modules/is-reference/dist/types/index.d.ts
320
+ - vendor/node_modules/is-reference/node_modules/@types/estree/index.d.ts
321
+ - vendor/node_modules/is-reference/node_modules/@types/estree/package.json
320
322
  - vendor/node_modules/is-reference/package.json
321
323
  - vendor/node_modules/isarray/index.js
322
324
  - vendor/node_modules/isarray/package.json
@@ -337,6 +339,10 @@ files:
337
339
  - vendor/node_modules/magic-string/node_modules/vlq/package.json
338
340
  - vendor/node_modules/magic-string/node_modules/vlq/src/vlq.js
339
341
  - vendor/node_modules/magic-string/package.json
342
+ - vendor/node_modules/math-random/browser.js
343
+ - vendor/node_modules/math-random/node.js
344
+ - vendor/node_modules/math-random/package.json
345
+ - vendor/node_modules/math-random/test.js
340
346
  - vendor/node_modules/micromatch/index.js
341
347
  - vendor/node_modules/micromatch/lib/chars.js
342
348
  - vendor/node_modules/micromatch/lib/expand.js
@@ -346,10 +352,10 @@ files:
346
352
  - vendor/node_modules/minimist/index.js
347
353
  - vendor/node_modules/minimist/package.json
348
354
  - vendor/node_modules/nodent-compiler/compiler.js
349
- - vendor/node_modules/nodent-compiler/lib/arboriculture.js
350
- - vendor/node_modules/nodent-compiler/lib/output.js
351
- - vendor/node_modules/nodent-compiler/lib/parser.js
355
+ - vendor/node_modules/nodent-compiler/output.js
352
356
  - vendor/node_modules/nodent-compiler/package.json
357
+ - vendor/node_modules/nodent-transform/arboriculture.js
358
+ - vendor/node_modules/nodent-transform/package.json
353
359
  - vendor/node_modules/normalize-path/index.js
354
360
  - vendor/node_modules/normalize-path/package.json
355
361
  - vendor/node_modules/object.omit/index.js
@@ -361,12 +367,8 @@ files:
361
367
  - vendor/node_modules/parse-ms/index.js
362
368
  - vendor/node_modules/parse-ms/package.json
363
369
  - vendor/node_modules/path-parse/index.js
364
- - vendor/node_modules/path-parse/index.min.js
365
370
  - vendor/node_modules/path-parse/package.json
366
371
  - vendor/node_modules/path-parse/test.js
367
- - vendor/node_modules/path-parse/test.min.js
368
- - vendor/node_modules/plur/index.js
369
- - vendor/node_modules/plur/package.json
370
372
  - vendor/node_modules/preserve/index.js
371
373
  - vendor/node_modules/preserve/package.json
372
374
  - vendor/node_modules/preserve/test.js
@@ -374,8 +376,6 @@ files:
374
376
  - vendor/node_modules/pretty-ms/package.json
375
377
  - vendor/node_modules/randomatic/index.js
376
378
  - vendor/node_modules/randomatic/node_modules/is-number/index.js
377
- - vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js
378
- - vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json
379
379
  - vendor/node_modules/randomatic/node_modules/is-number/package.json
380
380
  - vendor/node_modules/randomatic/node_modules/kind-of/index.js
381
381
  - vendor/node_modules/randomatic/node_modules/kind-of/package.json
@@ -414,16 +414,11 @@ files:
414
414
  - vendor/node_modules/rollup-plugin-node-resolve/src/index.js
415
415
  - vendor/node_modules/rollup-pluginutils/dist/pluginutils.cjs.js
416
416
  - vendor/node_modules/rollup-pluginutils/dist/pluginutils.es.js
417
- - vendor/node_modules/rollup-pluginutils/dist/pluginutils.es6.js
418
- - vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.es.js
419
- - vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.es6.js
420
- - vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js
421
- - vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json
422
- - vendor/node_modules/rollup-pluginutils/node_modules/estree-walker/src/estree-walker.js
423
417
  - vendor/node_modules/rollup-pluginutils/package.json
424
418
  - vendor/node_modules/rollup-pluginutils/src/addExtension.js
425
419
  - vendor/node_modules/rollup-pluginutils/src/attachScopes.js
426
420
  - vendor/node_modules/rollup-pluginutils/src/createFilter.js
421
+ - vendor/node_modules/rollup-pluginutils/src/dataToEsm.js
427
422
  - vendor/node_modules/rollup-pluginutils/src/index.js
428
423
  - vendor/node_modules/rollup-pluginutils/src/makeLegalIdentifier.js
429
424
  - vendor/node_modules/rollup-pluginutils/src/utils/ensureArray.js
@@ -1,146 +0,0 @@
1
- {
2
- "addendum": "addenda",
3
- "aircraft": "aircraft",
4
- "alga": "algae",
5
- "alumna": "alumnae",
6
- "alumnus": "alumni",
7
- "amoeba": "amoebae",
8
- "analysis": "analyses",
9
- "antenna": "antennae",
10
- "antithesis": "antitheses",
11
- "apex": "apices",
12
- "appendix": "appendices",
13
- "automaton": "automata",
14
- "axis": "axes",
15
- "bacillus": "bacilli",
16
- "bacterium": "bacteria",
17
- "barracks": "barracks",
18
- "basis": "bases",
19
- "beau": "beaux",
20
- "bison": "bison",
21
- "buffalo": "buffalo",
22
- "bureau": "bureaus",
23
- "cactus": "cacti",
24
- "calf": "calves",
25
- "carp": "carp",
26
- "census": "censuses",
27
- "chassis": "chassis",
28
- "cherub": "cherubim",
29
- "child": "children",
30
- "château": "châteaus",
31
- "cod": "cod",
32
- "codex": "codices",
33
- "concerto": "concerti",
34
- "corpus": "corpora",
35
- "crisis": "crises",
36
- "criterion": "criteria",
37
- "curriculum": "curricula",
38
- "datum": "data",
39
- "deer": "deer",
40
- "diagnosis": "diagnoses",
41
- "die": "dice",
42
- "dwarf": "dwarfs",
43
- "echo": "echoes",
44
- "elf": "elves",
45
- "elk": "elk",
46
- "ellipsis": "ellipses",
47
- "embargo": "embargoes",
48
- "emphasis": "emphases",
49
- "erratum": "errata",
50
- "faux pas": "faux pas",
51
- "fez": "fezes",
52
- "firmware": "firmware",
53
- "fish": "fish",
54
- "focus": "foci",
55
- "foot": "feet",
56
- "formula": "formulae",
57
- "fungus": "fungi",
58
- "gallows": "gallows",
59
- "genus": "genera",
60
- "goose": "geese",
61
- "graffito": "graffiti",
62
- "grouse": "grouse",
63
- "half": "halves",
64
- "hero": "heroes",
65
- "hoof": "hooves",
66
- "hovercraft": "hovercraft",
67
- "hypothesis": "hypotheses",
68
- "index": "indices",
69
- "kakapo": "kakapo",
70
- "knife": "knives",
71
- "larva": "larvae",
72
- "leaf": "leaves",
73
- "libretto": "libretti",
74
- "life": "lives",
75
- "loaf": "loaves",
76
- "locus": "loci",
77
- "louse": "lice",
78
- "man": "men",
79
- "matrix": "matrices",
80
- "means": "means",
81
- "medium": "media",
82
- "memorandum": "memoranda",
83
- "millennium": "millennia",
84
- "minutia": "minutiae",
85
- "moose": "moose",
86
- "mouse": "mice",
87
- "nebula": "nebulae",
88
- "nemesis": "nemeses",
89
- "neurosis": "neuroses",
90
- "news": "news",
91
- "nucleus": "nuclei",
92
- "oasis": "oases",
93
- "offspring": "offspring",
94
- "opus": "opera",
95
- "ovum": "ova",
96
- "ox": "oxen",
97
- "paralysis": "paralyses",
98
- "parenthesis": "parentheses",
99
- "person": "people",
100
- "phenomenon": "phenomena",
101
- "phylum": "phyla",
102
- "pike": "pike",
103
- "polyhedron": "polyhedra",
104
- "potato": "potatoes",
105
- "prognosis": "prognoses",
106
- "quiz": "quizzes",
107
- "radius": "radii",
108
- "referendum": "referenda",
109
- "salmon": "salmon",
110
- "scarf": "scarves",
111
- "self": "selves",
112
- "series": "series",
113
- "sheep": "sheep",
114
- "shelf": "shelves",
115
- "shrimp": "shrimp",
116
- "spacecraft": "spacecraft",
117
- "species": "species",
118
- "spectrum": "spectra",
119
- "squid": "squid",
120
- "stimulus": "stimuli",
121
- "stratum": "strata",
122
- "swine": "swine",
123
- "syllabus": "syllabi",
124
- "symposium": "symposia",
125
- "synopsis": "synopses",
126
- "synthesis": "syntheses",
127
- "tableau": "tableaus",
128
- "that": "those",
129
- "thesis": "theses",
130
- "thief": "thieves",
131
- "this": "these",
132
- "tomato": "tomatoes",
133
- "tooth": "teeth",
134
- "trout": "trout",
135
- "tuna": "tuna",
136
- "vertebra": "vertebrae",
137
- "vertex": "vertices",
138
- "veto": "vetoes",
139
- "vita": "vitae",
140
- "vortex": "vortices",
141
- "watercraft": "watercraft",
142
- "wharf": "wharves",
143
- "wife": "wives",
144
- "wolf": "wolves",
145
- "woman": "women"
146
- }
@@ -1,39 +0,0 @@
1
- {
2
- "name": "irregular-plurals",
3
- "version": "1.4.0",
4
- "description": "Map of nouns to their irregular plural form",
5
- "license": "MIT",
6
- "repository": "sindresorhus/irregular-plurals",
7
- "author": {
8
- "name": "Sindre Sorhus",
9
- "email": "sindresorhus@gmail.com",
10
- "url": "sindresorhus.com"
11
- },
12
- "main": "irregular-plurals.json",
13
- "engines": {
14
- "node": ">=0.10.0"
15
- },
16
- "scripts": {
17
- "test": "xo && ava"
18
- },
19
- "files": [
20
- "irregular-plurals.json"
21
- ],
22
- "keywords": [
23
- "word",
24
- "words",
25
- "list",
26
- "map",
27
- "hash",
28
- "json",
29
- "irregular",
30
- "plural",
31
- "plurals",
32
- "noun",
33
- "nouns"
34
- ],
35
- "devDependencies": {
36
- "ava": "*",
37
- "xo": "*"
38
- }
39
- }
@@ -1,291 +0,0 @@
1
- 'use strict';
2
-
3
- var acorn = require("acorn");
4
- var acornWalk = require("acorn/dist/walk");
5
-
6
- var walkers = {
7
- AwaitExpression: function (node, st, c) {
8
- c(node.argument, st, "Expression");
9
- },
10
- SwitchStatement: function (node, st, c) {
11
- c(node.discriminant, st, "Expression");
12
- for (var i = 0; i < node.cases.length; ++i) {
13
- c(node.cases[i],st) ;
14
- }
15
- },
16
- SwitchCase: function (node, st, c) {
17
- if (node.test) c(node.test, st, "Expression");
18
- for (var i = 0; i < node.consequent.length; ++i) {
19
- c(node.consequent[i], st, "Statement");
20
- }
21
- },
22
- TryStatement: function (node, st, c) {
23
- c(node.block, st, "Statement");
24
- if (node.handler) c(node.handler, st, "Statement");
25
- if (node.finalizer) c(node.finalizer, st, "Statement");
26
- },
27
- CatchClause: function (node, st, c) {
28
- c(node.param, st, "Pattern");
29
- c(node.body, st, "ScopeBody");
30
- },
31
- Class: function (node, st, c) {
32
- if (node.id) c(node.id, st, "Pattern");
33
- if (node.superClass) c(node.superClass, st, "Expression");
34
- c(node.body, st);
35
- },
36
- ClassBody: function(node, st, c){
37
- for (var i = 0; i < node.body.length; i++) {
38
- c(node.body[i], st);
39
- }
40
- },
41
- ObjectPattern: function (node, st, c) {
42
- for (var i = 0, list = node.properties; i < list.length; i += 1)
43
- c(list[i], st, "Property");
44
- },
45
- /* Babel extensions */
46
- ClassProperty: function(node,st,c){
47
- if (node.key) c(node.key, st, "Expression");
48
- if (node.value) c(node.value, st, "Expression");
49
- },
50
- ClassMethod: function(node,st,c){
51
- if (node.key) c(node.key, st, "Expression");
52
- c(node, st, "Function");
53
- },
54
- ObjectProperty: function(node,st,c){
55
- if (node.key) c(node.key, st, "Expression");
56
- if (node.value) c(node.value, st, "Expression");
57
- },
58
- ObjectMethod: function(node,st,c){
59
- if (node.key) c(node.key, st, "Expression");
60
- c(node, st, "Function");
61
- }
62
- } ;
63
-
64
- var acornBase = acornWalk.make(walkers) ;
65
-
66
- function loc(old,repl){
67
- ['start','end','loc','range'].forEach(function(k){
68
- if (k in old && !(k in repl))
69
- repl[k] = old[k] ;
70
- }) ;
71
- }
72
-
73
- var referencePrototypes = {
74
- replace: function(newNode) {
75
- if (Array.isArray(newNode) && newNode.length===1) newNode = newNode[0] ;
76
- if ('index' in this) {
77
- loc(this.parent[this.field][this.index], newNode);
78
- if (Array.isArray(newNode)) {
79
- [].splice.apply(this.parent[this.field],[this.index,1].concat(newNode)) ;
80
- } else {
81
- this.parent[this.field][this.index] = newNode ;
82
- }
83
- } else {
84
- loc(this.parent[this.field], newNode);
85
- if (Array.isArray(newNode)) {
86
- this.parent[this.field] = {type:'BlockStatement',body:newNode} ;
87
- } else {
88
- this.parent[this.field] = newNode ;
89
- }
90
- }
91
- return this.self ;
92
- },
93
- append: function(newNode) {
94
- if (Array.isArray(newNode) && newNode.length===1) newNode = newNode[0] ;
95
- if ('index' in this) {
96
- if (Array.isArray(newNode)) {
97
- [].splice.apply(this.parent[this.field],[this.index+1,0].concat(newNode)) ;
98
- } else {
99
- this.parent[this.field].splice(this.index+1,0,newNode) ;
100
- }
101
- } else {
102
- throw new Error("Cannot append Element node to non-array") ;
103
- }
104
- return this.self ;
105
- },
106
- index: function(){
107
- return this.parent[this.field].indexOf(this.self) ;
108
- },
109
- removeElement: function() {
110
- return this.parent[this.field].splice(this.index,1)[0] ;
111
- },
112
- removeNode: function() {
113
- var r = this.parent[this.field] ;
114
- delete this.parent[this.field] ;
115
- return r ;
116
- }
117
- };
118
-
119
- function treeWalker(n,walker,state){
120
- if (!state) {
121
- state = [{self:n}] ;
122
- state.replace = function(pos,newNode) {
123
- state[pos].replace(newNode) ;
124
- }
125
- }
126
-
127
- function goDown(ref) {
128
- ref.replace = referencePrototypes.replace ;
129
- ref.append = referencePrototypes.append ;
130
- if (ref.index) {
131
- Object.defineProperties(ref, {index:{enumerable:true,get:referencePrototypes.index}}) ;
132
- ref.remove = referencePrototypes.removeElement ;
133
- } else {
134
- ref.remove = referencePrototypes.removeNode ;
135
- }
136
- state.unshift(ref) ;
137
- treeWalker(ref.self,walker,state) ;
138
- state.shift() ;
139
- }
140
-
141
- function descend() {
142
- if (!(n.type in acornBase)) {
143
- // We don't know what type of node this is - it's not in the ESTree spec,
144
- // (maybe a 'react' extension?), so just ignore it
145
- } else {
146
- acornBase[n.type](n,state,function down(sub,_,derivedFrom){
147
- if (sub===n)
148
- return acornBase[derivedFrom || n.type](n,state,down) ;
149
-
150
- var keys = Object.keys(n) ;
151
- for (var i=0; i<keys.length; i++){
152
- var v = n[keys[i]] ;
153
- if (Array.isArray(v)) {
154
- if (v.indexOf(sub)>=0) {
155
- goDown({
156
- self:sub,
157
- parent:n,
158
- field:keys[i],
159
- index:true
160
- }) ;
161
- }
162
- } else if (v instanceof Object && sub===v) {
163
- goDown({
164
- self:sub,
165
- parent:n,
166
- field:keys[i]
167
- }) ;
168
- }
169
- }
170
- }) ;
171
- }
172
- } ;
173
- walker(n,descend,state) ;
174
- return n ;
175
- }
176
-
177
- var alreadyInstalledPlugin = false ;
178
-
179
- function acornParse(code,config) {
180
- var comments = [] ;
181
- var options = {
182
- ecmaVersion:8,
183
- allowHashBang:true,
184
- allowReturnOutsideFunction:true,
185
- allowImportExportEverywhere:true,
186
- locations:true,
187
- onComment:comments
188
- } ;
189
-
190
- if (config)
191
- for (var k in config)
192
- if (k !== 'noNodentExtensions' && k != 'onParserInstallation')
193
- options[k] = config[k] ;
194
-
195
- if (!(config && config.noNodentExtensions) || parseInt(acorn.version) < 4) {
196
- if (!alreadyInstalledPlugin) {
197
- if (parseInt(acorn.version) < 4)
198
- console.warn("Nodent: Warning - noNodentExtensions option requires acorn >=v4.x. Extensions installed.") ;
199
- require('acorn-es7-plugin')(acorn) ;
200
- if (config && config.onParserInstallation) config.onParserInstallation(acorn) ;
201
- alreadyInstalledPlugin = true ;
202
- }
203
- options.plugins = options.plugins || {} ;
204
- options.plugins.asyncawait = {asyncExits:true, awaitAnywhere:true} ;
205
- }
206
-
207
- var ast = acorn.parse(code,options) ;
208
-
209
- // attach comments to the most tightly containing node
210
- treeWalker(ast,function(node,descend,path){
211
- descend() ;
212
- while (comments.length && node.loc &&
213
- (node.loc.start.line >= comments[0].loc.start.line && node.loc.end.line>=comments[0].loc.end.line)) {
214
- node.$comments = node.$comments||[] ;
215
- node.$comments.push(comments.shift()) ;
216
- }
217
- }) ;
218
- return ast ;
219
- }
220
-
221
- var parseCache = {} ;
222
- function partialParse(code,args) {
223
- if (!parseCache[code]) {
224
- parseCache[code] = acornParse(code,{
225
- noNodentExtensions:true, // The partial parser only ever parses ES5
226
- locations:false,
227
- ranges:false,
228
- onComment:null
229
- }) ;
230
- }
231
-
232
- var result = substitute(parseCache[code]) ;
233
- return {body:result.body, expr:result.body[0].type==='ExpressionStatement' ? result.body[0].expression : null} ;
234
-
235
- /* parse and substitute:
236
- *
237
- * $1 Substitute the specified expression. If $1 occupies a slot which is an array of expressions (e.g arguments, params)
238
- * and the passed argument is an array, subtitute the whole set
239
- * {$:1} Substitute a single statement
240
- *
241
- */
242
- function substitute(src,dest) {
243
- if (Array.isArray(dest) && !Array.isArray(src))
244
- throw new Error("Can't substitute an array for a node") ;
245
-
246
- dest = dest || {} ;
247
- Object.keys(src).forEach(function(k){
248
- if (!(src[k] instanceof Object))
249
- return dest[k] = src[k] ;
250
-
251
- function moreNodes(v){ if (typeof v==="function") v = v() ; dest = dest.concat(v) ; return dest };
252
- function copyNode(v){ if (typeof v==="function") v = v() ; dest[k] = v ; return dest };
253
-
254
- // The src is an array, so create/grow the destination
255
- // It could an an array of expressions $1,$2,$3 or statements $:1;$:2;$:3;
256
- if (Array.isArray(src[k]))
257
- return dest[k] = substitute(src[k],[]) ;
258
-
259
- var p ;
260
- if (Array.isArray(dest))
261
- p = moreNodes ;
262
- else
263
- p = copyNode ;
264
-
265
- // Substitute a single identifier $.. with an expression (TODO: test provided arg is an expression node)
266
- if (src[k].type==='Identifier' && src[k].name[0]==='$')
267
- return p(args[src[k].name.slice(1)]) ;
268
-
269
- // Substitute a single labeled statement $:.. with a statement (TODO: test provided arg is a statement node)
270
- if (src[k].type === 'LabeledStatement' && src[k].label.name==='$') {
271
- var spec = src[k].body.expression ;
272
- return p(args[spec.name || spec.value]) ;
273
- }
274
-
275
- // Magic label to set call a function to modify a statement node $$method: <statement>
276
- // The newNode = args.method(oldNode)
277
- if (src[k].type === 'LabeledStatement' && src[k].label.name.slice(0,2)==='$$') {
278
- return p(args[src[k].label.name.slice(2)](substitute(src[k]).body)) ;
279
- }
280
-
281
- return p(substitute(src[k])) ;
282
- }) ;
283
- return dest ;
284
- }
285
- }
286
-
287
- module.exports = {
288
- part:partialParse,
289
- parse: acornParse,
290
- treeWalker:treeWalker
291
- } ;