ether-code 0.1.6 → 0.1.8
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.
- package/cli/compiler.js +9 -53
- package/cli/ether.js +1 -1
- package/generators/css-generator.js +42 -55
- package/generators/graphql-generator.js +19 -22
- package/generators/html-generator.js +51 -220
- package/generators/js-generator.js +76 -157
- package/generators/node-generator.js +49 -93
- package/generators/php-generator.js +46 -68
- package/generators/python-generator.js +35 -54
- package/generators/react-generator.js +37 -47
- package/generators/ruby-generator.js +59 -119
- package/generators/sql-generator.js +42 -63
- package/generators/ts-generator.js +59 -133
- package/i18n/i18n-css.json +147 -147
- package/i18n/i18n-graphql.json +6 -6
- package/i18n/i18n-html.json +135 -135
- package/i18n/i18n-js.json +107 -107
- package/i18n/i18n-node.json +14 -14
- package/i18n/i18n-php.json +177 -177
- package/i18n/i18n-python.json +16 -16
- package/i18n/i18n-react.json +97 -97
- package/i18n/i18n-ruby.json +22 -22
- package/i18n/i18n-sql.json +153 -153
- package/i18n/i18n-ts.json +10 -10
- package/lexer/ether-lexer.js +175 -34
- package/lexer/tokens.js +6 -6
- package/package.json +1 -1
- package/parsers/ast-css.js +0 -545
- package/parsers/ast-graphql.js +0 -424
- package/parsers/ast-html.js +0 -886
- package/parsers/ast-js.js +0 -750
- package/parsers/ast-node.js +0 -2440
- package/parsers/ast-php.js +0 -957
- package/parsers/ast-react.js +0 -580
- package/parsers/ast-ruby.js +0 -895
- package/parsers/ast-ts.js +0 -1352
- package/parsers/css-parser.js +0 -1981
- package/parsers/graphql-parser.js +0 -2011
- package/parsers/html-parser.js +0 -1182
- package/parsers/js-parser.js +0 -2564
- package/parsers/node-parser.js +0 -2644
- package/parsers/php-parser.js +0 -3037
- package/parsers/react-parser.js +0 -1035
- package/parsers/ruby-parser.js +0 -2680
- package/parsers/ts-parser.js +0 -3881
|
@@ -19,12 +19,12 @@ class NodeGenerator extends JSGenerator {
|
|
|
19
19
|
'nom dossier': '__dirname',
|
|
20
20
|
'tampon': 'Buffer',
|
|
21
21
|
'chemin': 'path',
|
|
22
|
-
'
|
|
22
|
+
'systeme fichiers': 'fs',
|
|
23
23
|
'http': 'http',
|
|
24
24
|
'https': 'https',
|
|
25
25
|
'url': 'url',
|
|
26
|
-
'
|
|
27
|
-
'
|
|
26
|
+
'chaine requete': 'querystring',
|
|
27
|
+
'evenements': 'events',
|
|
28
28
|
'flux': 'stream',
|
|
29
29
|
'utilitaires': 'util',
|
|
30
30
|
'os': 'os',
|
|
@@ -34,38 +34,33 @@ class NodeGenerator extends JSGenerator {
|
|
|
34
34
|
'net': 'net',
|
|
35
35
|
'dns': 'dns',
|
|
36
36
|
'zlib': 'zlib',
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
43
|
-
'url
|
|
44
|
-
'
|
|
37
|
+
'creer serveur': 'createServer',
|
|
38
|
+
'ecouter': 'listen',
|
|
39
|
+
'requete': 'request',
|
|
40
|
+
'reponse': 'response',
|
|
41
|
+
'entetes': 'headers',
|
|
42
|
+
'methode': 'method',
|
|
43
|
+
'url requete': 'url',
|
|
44
|
+
'ecrire tete': 'writeHead',
|
|
45
45
|
'terminer': 'end',
|
|
46
46
|
'sur': 'on',
|
|
47
|
-
'
|
|
47
|
+
'emettre': 'emit',
|
|
48
48
|
'une fois': 'once',
|
|
49
|
-
'retirer
|
|
49
|
+
'retirer ecouteur': 'removeListener',
|
|
50
50
|
'lire fichier': 'readFile',
|
|
51
51
|
'lire fichier sync': 'readFileSync',
|
|
52
|
-
'
|
|
53
|
-
'
|
|
52
|
+
'ecrire fichier': 'writeFile',
|
|
53
|
+
'ecrire fichier sync': 'writeFileSync',
|
|
54
54
|
'ajouter fichier': 'appendFile',
|
|
55
55
|
'supprimer fichier': 'unlink',
|
|
56
56
|
'renommer': 'rename',
|
|
57
57
|
'existe': 'existsSync',
|
|
58
58
|
'statistiques': 'stat',
|
|
59
|
-
'
|
|
59
|
+
'creer dossier': 'mkdir',
|
|
60
60
|
'lire dossier': 'readdir',
|
|
61
61
|
'supprimer dossier': 'rmdir',
|
|
62
62
|
'joindre': 'join',
|
|
63
|
-
'
|
|
64
|
-
'de': 'from',
|
|
65
|
-
'temporiser': 'setTimeout',
|
|
66
|
-
'intervalle': 'setInterval',
|
|
67
|
-
'promettifier': 'promisify',
|
|
68
|
-
'résoudre': 'resolve',
|
|
63
|
+
'resoudre': 'resolve',
|
|
69
64
|
'base': 'basename',
|
|
70
65
|
'dossier': 'dirname',
|
|
71
66
|
'extension': 'extname',
|
|
@@ -75,20 +70,20 @@ class NodeGenerator extends JSGenerator {
|
|
|
75
70
|
'arguments': 'argv',
|
|
76
71
|
'environnement': 'env',
|
|
77
72
|
'sortie': 'exit',
|
|
78
|
-
'
|
|
73
|
+
'repertoire travail': 'cwd',
|
|
79
74
|
'changer dossier': 'chdir',
|
|
80
|
-
'
|
|
75
|
+
'memoire': 'memoryUsage',
|
|
81
76
|
'temps fonctionnement': 'uptime',
|
|
82
77
|
'prochain tick': 'nextTick',
|
|
83
78
|
'plateforme': 'platform',
|
|
84
79
|
'architecture': 'arch',
|
|
85
80
|
'cpus': 'cpus',
|
|
86
|
-
'
|
|
87
|
-
'
|
|
81
|
+
'memoire totale': 'totalmem',
|
|
82
|
+
'memoire libre': 'freemem',
|
|
88
83
|
'dossier maison': 'homedir',
|
|
89
84
|
'dossier temp': 'tmpdir',
|
|
90
85
|
'nom hote': 'hostname',
|
|
91
|
-
'
|
|
86
|
+
'executer': 'exec',
|
|
92
87
|
'spawn': 'spawn',
|
|
93
88
|
'fork': 'fork',
|
|
94
89
|
'pid': 'pid',
|
|
@@ -97,7 +92,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
97
92
|
'socket': 'Socket',
|
|
98
93
|
'serveur': 'Server',
|
|
99
94
|
'chercher': 'lookup',
|
|
100
|
-
'
|
|
95
|
+
'resoudre dns': 'resolve',
|
|
101
96
|
'compresser': 'gzip',
|
|
102
97
|
'decompresser': 'gunzip',
|
|
103
98
|
'degonfler': 'deflate',
|
|
@@ -105,12 +100,12 @@ class NodeGenerator extends JSGenerator {
|
|
|
105
100
|
'hash': 'createHash',
|
|
106
101
|
'hmac': 'createHmac',
|
|
107
102
|
'chiffrer': 'createCipher',
|
|
108
|
-
'
|
|
109
|
-
'
|
|
103
|
+
'dechiffrer': 'createDecipher',
|
|
104
|
+
'aleatoire octets': 'randomBytes',
|
|
110
105
|
'promisifier': 'promisify',
|
|
111
106
|
'inspecter': 'inspect',
|
|
112
|
-
'
|
|
113
|
-
'formater
|
|
107
|
+
'heriter': 'inherits',
|
|
108
|
+
'formater chaine': 'format',
|
|
114
109
|
'deboguer': 'debuglog',
|
|
115
110
|
'express': 'express',
|
|
116
111
|
'application': 'app',
|
|
@@ -124,7 +119,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
124
119
|
'middleware': 'middleware',
|
|
125
120
|
'corps': 'body',
|
|
126
121
|
'params': 'params',
|
|
127
|
-
'
|
|
122
|
+
'requete query': 'query',
|
|
128
123
|
'cookies': 'cookies',
|
|
129
124
|
'session': 'session',
|
|
130
125
|
'json': 'json',
|
|
@@ -142,7 +137,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
142
137
|
'trouver': 'find',
|
|
143
138
|
'trouver un': 'findOne',
|
|
144
139
|
'trouver par id': 'findById',
|
|
145
|
-
'
|
|
140
|
+
'creer': 'create',
|
|
146
141
|
'mettre a jour un': 'updateOne',
|
|
147
142
|
'supprimer un': 'deleteOne',
|
|
148
143
|
'sauvegarder': 'save',
|
|
@@ -164,22 +159,13 @@ class NodeGenerator extends JSGenerator {
|
|
|
164
159
|
|
|
165
160
|
if (Array.isArray(ast)) {
|
|
166
161
|
for (const node of ast) {
|
|
167
|
-
|
|
168
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
169
|
-
return result
|
|
170
|
-
}
|
|
162
|
+
this.generateNode(node)
|
|
171
163
|
}
|
|
172
164
|
} else if (ast && ast.type) {
|
|
173
|
-
|
|
174
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
175
|
-
return result
|
|
176
|
-
}
|
|
165
|
+
this.generateNode(ast)
|
|
177
166
|
} else if (ast && ast.body) {
|
|
178
167
|
for (const node of ast.body) {
|
|
179
|
-
|
|
180
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
181
|
-
return result
|
|
182
|
-
}
|
|
168
|
+
this.generateNode(node)
|
|
183
169
|
}
|
|
184
170
|
}
|
|
185
171
|
|
|
@@ -193,10 +179,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
193
179
|
case 'RequireStatement':
|
|
194
180
|
return this.generateRequire(node)
|
|
195
181
|
case 'ModuleExports':
|
|
196
|
-
case 'ModuleExportsStatement':
|
|
197
182
|
return this.generateModuleExports(node)
|
|
198
|
-
case 'ExportsStatement':
|
|
199
|
-
return this.generateExportsStatement(node)
|
|
200
183
|
case 'ServerCreation':
|
|
201
184
|
return this.generateServerCreation(node)
|
|
202
185
|
case 'RouteHandler':
|
|
@@ -215,60 +198,33 @@ class NodeGenerator extends JSGenerator {
|
|
|
215
198
|
}
|
|
216
199
|
|
|
217
200
|
generateRequire(node) {
|
|
218
|
-
const module = node.
|
|
219
|
-
const
|
|
201
|
+
const module = typeof node.module === 'string' ? node.module : this.generateNode(node.module)
|
|
202
|
+
const variable = node.variable || node.name
|
|
220
203
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (id?.type === 'ObjectPattern') {
|
|
224
|
-
const props = (id.properties || []).map(p => {
|
|
225
|
-
const key = p.key?.name || p.key
|
|
226
|
-
return this.translate(key)
|
|
227
|
-
}).join(', ')
|
|
228
|
-
this.writeLine(`const { ${props} } = require('${modulePath}');`)
|
|
229
|
-
} else if (node.destructure && node.destructure.length > 0) {
|
|
204
|
+
if (node.destructure && node.destructure.length > 0) {
|
|
230
205
|
const props = node.destructure.map(p => this.translate(p)).join(', ')
|
|
231
|
-
this.writeLine(`const { ${props} } = require('${
|
|
232
|
-
} else if (
|
|
233
|
-
const
|
|
234
|
-
this.writeLine(`const ${this.translate(varName)} = require('${modulePath}');`)
|
|
206
|
+
this.writeLine(`const { ${props} } = require('${module}');`)
|
|
207
|
+
} else if (variable) {
|
|
208
|
+
this.writeLine(`const ${this.translate(variable)} = require('${module}');`)
|
|
235
209
|
} else {
|
|
236
|
-
this.writeLine(`require('${
|
|
210
|
+
this.writeLine(`require('${module}');`)
|
|
237
211
|
}
|
|
238
212
|
}
|
|
239
213
|
|
|
240
214
|
generateModuleExports(node) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (exports?.type === 'ObjectExpression') {
|
|
244
|
-
const props = (exports.properties || []).map(p => {
|
|
245
|
-
const key = p.key?.name || p.key
|
|
246
|
-
if (p.shorthand) {
|
|
247
|
-
return this.translate(key)
|
|
248
|
-
}
|
|
249
|
-
const value = this.generateNode(p.value)
|
|
250
|
-
return `${this.translate(key)}: ${value}`
|
|
251
|
-
})
|
|
252
|
-
this.writeLine(`module.exports = { ${props.join(', ')} };`)
|
|
253
|
-
} else if (exports) {
|
|
254
|
-
const value = this.generateNode(exports)
|
|
255
|
-
this.writeLine(`module.exports = ${value};`)
|
|
256
|
-
} else if (node.named && Object.keys(node.named).length > 0) {
|
|
257
|
-
const exportsList = Object.entries(node.named).map(([key, value]) => {
|
|
215
|
+
if (node.named && Object.keys(node.named).length > 0) {
|
|
216
|
+
const exports = Object.entries(node.named).map(([key, value]) => {
|
|
258
217
|
const translatedKey = this.translate(key)
|
|
259
218
|
const translatedValue = this.generateNode(value)
|
|
260
219
|
return translatedKey === translatedValue ? translatedKey : `${translatedKey}: ${translatedValue}`
|
|
261
220
|
})
|
|
262
|
-
this.writeLine(`module.exports = { ${
|
|
221
|
+
this.writeLine(`module.exports = { ${exports.join(', ')} };`)
|
|
222
|
+
} else if (node.default) {
|
|
223
|
+
const value = this.generateNode(node.default)
|
|
224
|
+
this.writeLine(`module.exports = ${value};`)
|
|
263
225
|
}
|
|
264
226
|
}
|
|
265
227
|
|
|
266
|
-
generateExportsStatement(node) {
|
|
267
|
-
const name = this.translate(node.name)
|
|
268
|
-
const value = this.generateNode(node.value)
|
|
269
|
-
this.writeLine(`exports.${name} = ${value};`)
|
|
270
|
-
}
|
|
271
|
-
|
|
272
228
|
generateServerCreation(node) {
|
|
273
229
|
const framework = node.framework || 'http'
|
|
274
230
|
|
|
@@ -294,7 +250,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
294
250
|
const port = node.port || 3000
|
|
295
251
|
this.writeLine(`app.listen(${port}, () => {`)
|
|
296
252
|
this.indent++
|
|
297
|
-
this.writeLine(`console.log('Serveur
|
|
253
|
+
this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
|
|
298
254
|
this.indent--
|
|
299
255
|
this.writeLine('});')
|
|
300
256
|
} else {
|
|
@@ -317,7 +273,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
317
273
|
const port = node.port || 3000
|
|
318
274
|
this.writeLine(`server.listen(${port}, () => {`)
|
|
319
275
|
this.indent++
|
|
320
|
-
this.writeLine(`console.log('Serveur
|
|
276
|
+
this.writeLine(`console.log('Serveur démarré sur le port ${port}');`)
|
|
321
277
|
this.indent--
|
|
322
278
|
this.writeLine('});')
|
|
323
279
|
}
|
|
@@ -383,7 +339,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
383
339
|
}
|
|
384
340
|
break
|
|
385
341
|
|
|
386
|
-
case '
|
|
342
|
+
case 'ecrire':
|
|
387
343
|
case 'write':
|
|
388
344
|
const content = this.generateNode(node.content)
|
|
389
345
|
if (node.sync) {
|
|
@@ -454,7 +410,7 @@ class NodeGenerator extends JSGenerator {
|
|
|
454
410
|
this.writeLine(`const ${node.variable || 'readStream'} = fs.createReadStream(${source});`)
|
|
455
411
|
break
|
|
456
412
|
|
|
457
|
-
case '
|
|
413
|
+
case 'ecrire flux':
|
|
458
414
|
case 'createWriteStream':
|
|
459
415
|
this.writeLine(`const ${node.variable || 'writeStream'} = fs.createWriteStream(${source});`)
|
|
460
416
|
break
|
|
@@ -5,8 +5,6 @@ class PHPGenerator {
|
|
|
5
5
|
this.i18n = null
|
|
6
6
|
this.indent = 0
|
|
7
7
|
this.output = ''
|
|
8
|
-
this.keywordMap = {}
|
|
9
|
-
this.functionMap = {}
|
|
10
8
|
|
|
11
9
|
if (i18nPath) {
|
|
12
10
|
this.loadI18n(i18nPath)
|
|
@@ -80,7 +78,7 @@ class PHPGenerator {
|
|
|
80
78
|
'faire': 'do',
|
|
81
79
|
'selon': 'switch',
|
|
82
80
|
'cas': 'case',
|
|
83
|
-
'
|
|
81
|
+
'defaut': 'default',
|
|
84
82
|
'sortir': 'break',
|
|
85
83
|
'continuer': 'continue',
|
|
86
84
|
'essayer': 'try',
|
|
@@ -91,21 +89,21 @@ class PHPGenerator {
|
|
|
91
89
|
'classe': 'class',
|
|
92
90
|
'interface': 'interface',
|
|
93
91
|
'trait': 'trait',
|
|
94
|
-
'
|
|
95
|
-
'
|
|
92
|
+
'etend': 'extends',
|
|
93
|
+
'implemente': 'implements',
|
|
96
94
|
'utiliser': 'use',
|
|
97
95
|
'public': 'public',
|
|
98
|
-
'
|
|
99
|
-
'
|
|
96
|
+
'prive': 'private',
|
|
97
|
+
'protege': 'protected',
|
|
100
98
|
'statique': 'static',
|
|
101
99
|
'final': 'final',
|
|
102
100
|
'abstrait': 'abstract',
|
|
103
101
|
'constructeur': '__construct',
|
|
104
102
|
'destructeur': '__destruct',
|
|
105
103
|
'obtenir': '__get',
|
|
106
|
-
'
|
|
104
|
+
'definir': '__set',
|
|
107
105
|
'appeler': '__call',
|
|
108
|
-
'vers
|
|
106
|
+
'vers chaine': '__toString',
|
|
109
107
|
'espace de noms': 'namespace',
|
|
110
108
|
'comme': 'as',
|
|
111
109
|
'vrai': 'true',
|
|
@@ -121,10 +119,10 @@ class PHPGenerator {
|
|
|
121
119
|
'different': '!==',
|
|
122
120
|
'concatener': '.',
|
|
123
121
|
'tableau': 'array',
|
|
124
|
-
'
|
|
122
|
+
'chaine': 'string',
|
|
125
123
|
'entier': 'int',
|
|
126
124
|
'flottant': 'float',
|
|
127
|
-
'
|
|
125
|
+
'booleen': 'bool',
|
|
128
126
|
'objet': 'object',
|
|
129
127
|
'vide': 'void',
|
|
130
128
|
'mixte': 'mixed',
|
|
@@ -136,7 +134,7 @@ class PHPGenerator {
|
|
|
136
134
|
'imploser': 'implode',
|
|
137
135
|
'remplacer': 'str_replace',
|
|
138
136
|
'position': 'strpos',
|
|
139
|
-
'sous
|
|
137
|
+
'sous chaine': 'substr',
|
|
140
138
|
'majuscules': 'strtoupper',
|
|
141
139
|
'minuscules': 'strtolower',
|
|
142
140
|
'supprimer espaces': 'trim',
|
|
@@ -145,21 +143,21 @@ class PHPGenerator {
|
|
|
145
143
|
'fusionner': 'array_merge',
|
|
146
144
|
'filtrer': 'array_filter',
|
|
147
145
|
'mapper': 'array_map',
|
|
148
|
-
'
|
|
146
|
+
'reduire': 'array_reduce',
|
|
149
147
|
'trier': 'sort',
|
|
150
148
|
'inverser': 'array_reverse',
|
|
151
|
-
'
|
|
149
|
+
'cles': 'array_keys',
|
|
152
150
|
'valeurs': 'array_values',
|
|
153
151
|
'existe': 'isset',
|
|
154
152
|
'vide test': 'empty',
|
|
155
153
|
'est tableau': 'is_array',
|
|
156
|
-
'est
|
|
154
|
+
'est chaine': 'is_string',
|
|
157
155
|
'est entier': 'is_int',
|
|
158
156
|
'est flottant': 'is_float',
|
|
159
157
|
'est numerique': 'is_numeric',
|
|
160
158
|
'est nul': 'is_null',
|
|
161
159
|
'type de': 'gettype',
|
|
162
|
-
'convertir
|
|
160
|
+
'convertir chaine': 'strval',
|
|
163
161
|
'convertir entier': 'intval',
|
|
164
162
|
'convertir flottant': 'floatval',
|
|
165
163
|
'date': 'date',
|
|
@@ -167,24 +165,23 @@ class PHPGenerator {
|
|
|
167
165
|
'maintenant': 'now',
|
|
168
166
|
'fichier existe': 'file_exists',
|
|
169
167
|
'lire fichier': 'file_get_contents',
|
|
170
|
-
'
|
|
168
|
+
'ecrire fichier': 'file_put_contents',
|
|
171
169
|
'ouvrir': 'fopen',
|
|
172
170
|
'fermer': 'fclose',
|
|
173
171
|
'lire': 'fread',
|
|
174
|
-
'
|
|
172
|
+
'ecrire': 'fwrite',
|
|
175
173
|
'json encoder': 'json_encode',
|
|
176
|
-
'json décoder': 'json_decode',
|
|
177
174
|
'json decoder': 'json_decode',
|
|
178
175
|
'regex correspondance': 'preg_match',
|
|
179
176
|
'regex toutes': 'preg_match_all',
|
|
180
177
|
'regex remplacer': 'preg_replace',
|
|
181
178
|
'en tete': 'header',
|
|
182
179
|
'rediriger': 'header',
|
|
183
|
-
'session
|
|
180
|
+
'session demarrer': 'session_start',
|
|
184
181
|
'session': '$_SESSION',
|
|
185
182
|
'post': '$_POST',
|
|
186
183
|
'get': '$_GET',
|
|
187
|
-
'
|
|
184
|
+
'requete': '$_REQUEST',
|
|
188
185
|
'serveur': '$_SERVER',
|
|
189
186
|
'fichiers': '$_FILES',
|
|
190
187
|
'cookie': '$_COOKIE',
|
|
@@ -201,37 +198,35 @@ class PHPGenerator {
|
|
|
201
198
|
}
|
|
202
199
|
|
|
203
200
|
generate(ast) {
|
|
204
|
-
this.output = ''
|
|
201
|
+
this.output = '<?php\n\n'
|
|
205
202
|
this.indent = 0
|
|
206
203
|
|
|
207
204
|
if (Array.isArray(ast)) {
|
|
208
205
|
for (const node of ast) {
|
|
209
|
-
|
|
210
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
211
|
-
return result
|
|
212
|
-
}
|
|
206
|
+
this.generateNode(node)
|
|
213
207
|
}
|
|
214
208
|
} else if (ast && ast.type) {
|
|
215
|
-
|
|
216
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
217
|
-
return result
|
|
218
|
-
}
|
|
209
|
+
this.generateNode(ast)
|
|
219
210
|
} else if (ast && ast.body) {
|
|
220
211
|
for (const node of ast.body) {
|
|
221
|
-
|
|
222
|
-
if (result !== undefined && result !== '' && this.output === '') {
|
|
223
|
-
return result
|
|
224
|
-
}
|
|
212
|
+
this.generateNode(node)
|
|
225
213
|
}
|
|
226
214
|
}
|
|
227
215
|
|
|
228
|
-
return this.output.trim()
|
|
216
|
+
return this.output.trim()
|
|
229
217
|
}
|
|
230
218
|
|
|
231
219
|
generateNode(node) {
|
|
232
220
|
if (!node) return ''
|
|
233
221
|
|
|
234
222
|
switch (node.type) {
|
|
223
|
+
case 'Program':
|
|
224
|
+
if (node.body) {
|
|
225
|
+
for (const child of node.body) {
|
|
226
|
+
this.generateNode(child)
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return
|
|
235
230
|
case 'VariableDeclaration':
|
|
236
231
|
return this.generateVariableDeclaration(node)
|
|
237
232
|
case 'FunctionDeclaration':
|
|
@@ -278,8 +273,6 @@ class PHPGenerator {
|
|
|
278
273
|
return this.generateBinaryExpression(node)
|
|
279
274
|
case 'AssignmentExpression':
|
|
280
275
|
return this.generateAssignmentExpression(node)
|
|
281
|
-
case 'UpdateExpression':
|
|
282
|
-
return this.generateUpdateExpression(node)
|
|
283
276
|
case 'ArrayExpression':
|
|
284
277
|
return this.generateArrayExpression(node)
|
|
285
278
|
case 'ObjectExpression':
|
|
@@ -291,29 +284,25 @@ class PHPGenerator {
|
|
|
291
284
|
case 'NewExpression':
|
|
292
285
|
return this.generateNewExpression(node)
|
|
293
286
|
default:
|
|
294
|
-
if (node.name && !node.type) {
|
|
295
|
-
return this.generateIdentifier(node)
|
|
296
|
-
}
|
|
297
287
|
return ''
|
|
298
288
|
}
|
|
299
289
|
}
|
|
300
290
|
|
|
301
|
-
generateUpdateExpression(node) {
|
|
302
|
-
const arg = this.generateNode(node.argument)
|
|
303
|
-
const op = node.operator
|
|
304
|
-
if (node.prefix) {
|
|
305
|
-
return `${op}${arg}`
|
|
306
|
-
}
|
|
307
|
-
return `${arg}${op}`
|
|
308
|
-
}
|
|
309
|
-
|
|
310
291
|
generateVariableDeclaration(node) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
292
|
+
if (node.declarations && node.declarations.length > 0) {
|
|
293
|
+
for (const decl of node.declarations) {
|
|
294
|
+
const name = this.generateIdentifier(decl.id || { name: decl.name })
|
|
295
|
+
if (decl.init) {
|
|
296
|
+
const init = this.generateNode(decl.init)
|
|
297
|
+
this.writeLine(`${name} = ${init};`)
|
|
298
|
+
} else {
|
|
299
|
+
this.writeLine(`${name};`)
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
} else {
|
|
303
|
+
const name = '$' + (node.name || (node.id && node.id.name) || 'var')
|
|
304
|
+
if (node.init) {
|
|
305
|
+
const init = this.generateNode(node.init)
|
|
317
306
|
this.writeLine(`${name} = ${init};`)
|
|
318
307
|
} else {
|
|
319
308
|
this.writeLine(`${name};`)
|
|
@@ -433,22 +422,14 @@ class PHPGenerator {
|
|
|
433
422
|
|
|
434
423
|
if (node.alternate) {
|
|
435
424
|
if (node.alternate.type === 'IfStatement') {
|
|
436
|
-
this.output = this.output.trimEnd() + '
|
|
425
|
+
this.output = this.output.trimEnd() + ' elseif '
|
|
437
426
|
const altTest = this.generateNode(node.alternate.test)
|
|
438
427
|
this.output += `(${altTest}) {\n`
|
|
439
428
|
this.indent++
|
|
440
429
|
this.generateNode(node.alternate.consequent)
|
|
441
430
|
this.indent--
|
|
442
431
|
if (node.alternate.alternate) {
|
|
443
|
-
|
|
444
|
-
this.generateIfStatement({ test: node.alternate.alternate.test, consequent: node.alternate.alternate.consequent, alternate: node.alternate.alternate.alternate })
|
|
445
|
-
} else {
|
|
446
|
-
this.writeLine('} else {')
|
|
447
|
-
this.indent++
|
|
448
|
-
this.generateNode(node.alternate.alternate)
|
|
449
|
-
this.indent--
|
|
450
|
-
this.writeLine('}')
|
|
451
|
-
}
|
|
432
|
+
this.generateIfStatement({ alternate: node.alternate.alternate })
|
|
452
433
|
} else {
|
|
453
434
|
this.writeLine('}')
|
|
454
435
|
}
|
|
@@ -690,9 +671,6 @@ class PHPGenerator {
|
|
|
690
671
|
}
|
|
691
672
|
|
|
692
673
|
writeLine(text) {
|
|
693
|
-
if (this.output === '') {
|
|
694
|
-
this.output = '<?php '
|
|
695
|
-
}
|
|
696
674
|
this.output += this.getIndent() + text + '\n'
|
|
697
675
|
}
|
|
698
676
|
|