ether-code 0.1.5 → 0.1.7

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 (44) hide show
  1. package/cli/ether.js +1 -1
  2. package/generators/css-generator.js +42 -55
  3. package/generators/graphql-generator.js +19 -22
  4. package/generators/html-generator.js +51 -182
  5. package/generators/js-generator.js +76 -157
  6. package/generators/node-generator.js +49 -93
  7. package/generators/php-generator.js +46 -68
  8. package/generators/python-generator.js +35 -54
  9. package/generators/react-generator.js +37 -47
  10. package/generators/ruby-generator.js +59 -119
  11. package/generators/sql-generator.js +42 -63
  12. package/generators/ts-generator.js +59 -133
  13. package/i18n/i18n-css.json +147 -147
  14. package/i18n/i18n-graphql.json +6 -6
  15. package/i18n/i18n-html.json +135 -135
  16. package/i18n/i18n-js.json +107 -107
  17. package/i18n/i18n-node.json +14 -14
  18. package/i18n/i18n-php.json +177 -177
  19. package/i18n/i18n-python.json +16 -16
  20. package/i18n/i18n-react.json +97 -97
  21. package/i18n/i18n-ruby.json +22 -22
  22. package/i18n/i18n-sql.json +153 -153
  23. package/i18n/i18n-ts.json +10 -10
  24. package/lexer/ether-lexer.js +175 -34
  25. package/lexer/tokens.js +6 -6
  26. package/package.json +1 -1
  27. package/parsers/ast-css.js +0 -545
  28. package/parsers/ast-graphql.js +0 -424
  29. package/parsers/ast-html.js +0 -886
  30. package/parsers/ast-js.js +0 -750
  31. package/parsers/ast-node.js +0 -2440
  32. package/parsers/ast-php.js +0 -957
  33. package/parsers/ast-react.js +0 -580
  34. package/parsers/ast-ruby.js +0 -895
  35. package/parsers/ast-ts.js +0 -1352
  36. package/parsers/css-parser.js +0 -1981
  37. package/parsers/graphql-parser.js +0 -2011
  38. package/parsers/html-parser.js +0 -1182
  39. package/parsers/js-parser.js +0 -2564
  40. package/parsers/node-parser.js +0 -2644
  41. package/parsers/php-parser.js +0 -3037
  42. package/parsers/react-parser.js +0 -1035
  43. package/parsers/ruby-parser.js +0 -2680
  44. package/parsers/ts-parser.js +0 -3881
@@ -5,8 +5,6 @@ class PythonGenerator {
5
5
  this.i18n = null
6
6
  this.indent = 0
7
7
  this.output = ''
8
- this.keywordMap = {}
9
- this.builtinMap = {}
10
8
 
11
9
  if (i18nPath) {
12
10
  this.loadI18n(i18nPath)
@@ -53,7 +51,7 @@ class PythonGenerator {
53
51
  'pour': 'for',
54
52
  'dans': 'in',
55
53
  'tant que': 'while',
56
- 'définir': 'def',
54
+ 'definir': 'def',
57
55
  'fonction': 'def',
58
56
  'classe': 'class',
59
57
  'retourner': 'return',
@@ -82,7 +80,7 @@ class PythonGenerator {
82
80
  'aucun': 'None',
83
81
  'soi': 'self',
84
82
  'cls': 'cls',
85
- 'asynchrone': 'asynchrone',
83
+ 'asynchrone': 'async',
86
84
  'attendre': 'await',
87
85
  'afficher': 'print',
88
86
  'saisir': 'input',
@@ -104,8 +102,8 @@ class PythonGenerator {
104
102
  'arrondir': 'round',
105
103
  'entier': 'int',
106
104
  'flottant': 'float',
107
- 'chaîne': 'str',
108
- 'booléen': 'bool',
105
+ 'chaine': 'str',
106
+ 'booleen': 'bool',
109
107
  'liste': 'list',
110
108
  'tuple': 'tuple',
111
109
  'ensemble': 'set',
@@ -114,12 +112,12 @@ class PythonGenerator {
114
112
  'ouvrir': 'open',
115
113
  'fermer': 'close',
116
114
  'lire': 'read',
117
- 'écrire': 'write',
115
+ 'ecrire': 'write',
118
116
  'ligne': 'readline',
119
117
  'lignes': 'readlines',
120
118
  'ajouter': 'append',
121
119
  'etendre': 'extend',
122
- 'insérer': 'insert',
120
+ 'inserer': 'insert',
123
121
  'retirer': 'remove',
124
122
  'extraire': 'pop',
125
123
  'vider': 'clear',
@@ -146,11 +144,11 @@ class PythonGenerator {
146
144
  'est alphanumerique': 'isalnum',
147
145
  'est espace': 'isspace',
148
146
  'formater': 'format',
149
- 'clés': 'keys',
147
+ 'cles': 'keys',
150
148
  'valeurs': 'values',
151
- 'éléments': 'items',
149
+ 'elements': 'items',
152
150
  'obtenir': 'get',
153
- 'définir défaut': 'setdefault',
151
+ 'definir defaut': 'setdefault',
154
152
  'mettre a jour': 'update',
155
153
  'union': 'union',
156
154
  'intersection': 'intersection',
@@ -160,25 +158,25 @@ class PythonGenerator {
160
158
  'exception': 'Exception',
161
159
  'erreur valeur': 'ValueError',
162
160
  'erreur type': 'TypeError',
163
- 'erreur clé': 'KeyError',
161
+ 'erreur cle': 'KeyError',
164
162
  'erreur index': 'IndexError',
165
163
  'erreur attribut': 'AttributeError',
166
164
  'erreur fichier': 'FileNotFoundError',
167
165
  'erreur zero': 'ZeroDivisionError',
168
166
  'decorateur': '@',
169
- 'propriété': 'property',
170
- 'méthode statique': 'staticmethod',
171
- 'méthode classe': 'classmethod',
167
+ 'propriete': 'property',
168
+ 'methode statique': 'staticmethod',
169
+ 'methode classe': 'classmethod',
172
170
  'super': 'super',
173
171
  'init': '__init__',
174
172
  'constructeur': '__init__',
175
173
  'representer': '__repr__',
176
- 'chaîne dunder': '__str__',
174
+ 'chaine dunder': '__str__',
177
175
  'iterateur': '__iter__',
178
176
  'suivant': '__next__',
179
177
  'longueur dunder': '__len__',
180
178
  'obtenir item': '__getitem__',
181
- 'définir item': '__setitem__',
179
+ 'definir item': '__setitem__',
182
180
  'supprimer item': '__delitem__',
183
181
  'contient': '__contains__',
184
182
  'appeler': '__call__',
@@ -196,22 +194,13 @@ class PythonGenerator {
196
194
 
197
195
  if (Array.isArray(ast)) {
198
196
  for (const node of ast) {
199
- const result = this.generateNode(node)
200
- if (result !== undefined && result !== '' && this.output === '') {
201
- return result
202
- }
197
+ this.generateNode(node)
203
198
  }
204
199
  } else if (ast && ast.type) {
205
- const result = this.generateNode(ast)
206
- if (result !== undefined && result !== '' && this.output === '') {
207
- return result
208
- }
200
+ this.generateNode(ast)
209
201
  } else if (ast && ast.body) {
210
202
  for (const node of ast.body) {
211
- const result = this.generateNode(node)
212
- if (result !== undefined && result !== '' && this.output === '') {
213
- return result
214
- }
203
+ this.generateNode(node)
215
204
  }
216
205
  }
217
206
 
@@ -222,6 +211,13 @@ class PythonGenerator {
222
211
  if (!node) return ''
223
212
 
224
213
  switch (node.type) {
214
+ case 'Program':
215
+ if (node.body) {
216
+ for (const child of node.body) {
217
+ this.generateNode(child)
218
+ }
219
+ }
220
+ return
225
221
  case 'Module':
226
222
  return this.generateModule(node)
227
223
  case 'ImportStatement':
@@ -268,6 +264,8 @@ class PythonGenerator {
268
264
  case 'AssignmentStatement':
269
265
  case 'AssignmentExpression':
270
266
  return this.generateAssignment(node)
267
+ case 'VariableDeclaration':
268
+ return this.generateVariableDeclaration(node)
271
269
  case 'AugmentedAssignment':
272
270
  return this.generateAugmentedAssignment(node)
273
271
  case 'Decorator':
@@ -466,16 +464,7 @@ class PythonGenerator {
466
464
  }
467
465
 
468
466
  generateDecorator(node) {
469
- let name = ''
470
- if (typeof node === 'string') {
471
- name = node
472
- } else if (typeof node.name === 'string') {
473
- name = this.translate(node.name)
474
- } else if (node.name?.name) {
475
- name = this.translate(node.name.name)
476
- } else {
477
- name = this.generateNode(node)
478
- }
467
+ const name = typeof node === 'string' ? node : this.generateNode(node.name || node)
479
468
  const args = node.arguments ?
480
469
  '(' + node.arguments.map(a => this.generateNode(a)).join(', ') + ')' : ''
481
470
  this.writeLine(`@${name}${args}`)
@@ -507,18 +496,7 @@ class PythonGenerator {
507
496
  }
508
497
  this.indent--
509
498
  if (elif.alternate || elif.orelse) {
510
- const nextAlt = elif.alternate || elif.orelse
511
- if (nextAlt.type === 'IfStatement') {
512
- this.generateIf({ ...nextAlt, isElif: true })
513
- } else {
514
- this.writeLine('else:')
515
- this.indent++
516
- const nextBody = Array.isArray(nextAlt) ? nextAlt : [nextAlt]
517
- for (const stmt of nextBody) {
518
- this.generateNode(stmt)
519
- }
520
- this.indent--
521
- }
499
+ this.generateNode({ type: 'IfStatement', alternate: elif.alternate || elif.orelse })
522
500
  }
523
501
  } else {
524
502
  this.writeLine('else:')
@@ -695,6 +673,12 @@ class PythonGenerator {
695
673
  this.writeLine(`${targets.join(' = ')} = ${value}`)
696
674
  }
697
675
 
676
+ generateVariableDeclaration(node) {
677
+ const name = node.name || (node.id && node.id.name) || 'var'
678
+ const value = node.init ? this.generateNode(node.init) : 'None'
679
+ this.writeLine(`${name} = ${value}`)
680
+ }
681
+
698
682
  generateAugmentedAssignment(node) {
699
683
  const target = this.generateNode(node.target)
700
684
  const value = this.generateNode(node.value)
@@ -722,9 +706,6 @@ class PythonGenerator {
722
706
  generateUnary(node) {
723
707
  const operand = this.generateNode(node.operand || node.argument)
724
708
  const op = this.translateOperator(node.op || node.operator)
725
- if (op === 'not') {
726
- return `not ${operand}`
727
- }
728
709
  return `${op}${operand}`
729
710
  }
730
711
 
@@ -34,30 +34,31 @@ class ReactGenerator extends JSGenerator {
34
34
 
35
35
  buildReactMaps() {
36
36
  this.hookMap = {
37
- 'état': 'useState',
38
- 'utiliser état': 'useState',
37
+ 'etat': 'useState',
38
+ 'utiliser etat': 'useState',
39
39
  'effet': 'useEffect',
40
40
  'utiliser effet': 'useEffect',
41
41
  'contexte': 'useContext',
42
42
  'utiliser contexte': 'useContext',
43
- 'réducteur': 'useReducer',
44
- 'utiliser réducteur': 'useReducer',
43
+ 'reducteur': 'useReducer',
44
+ 'utiliser reducteur': 'useReducer',
45
45
  'rappel': 'useCallback',
46
46
  'utiliser rappel': 'useCallback',
47
- 'mémo': 'useMemo',
48
- 'utiliser mémo': 'useMemo',
49
- 'référence': 'useRef',
50
- 'utiliser référence': 'useRef',
47
+ 'memo': 'useMemo',
48
+ 'utiliser memo': 'useMemo',
49
+ 'reference': 'useRef',
50
+ 'utiliser reference': 'useRef',
51
51
  'effet mise en page': 'useLayoutEffect',
52
52
  'utiliser effet mise en page': 'useLayoutEffect',
53
53
  'valeur imperative': 'useImperativeHandle',
54
54
  'debug': 'useDebugValue',
55
55
  'utiliser debug': 'useDebugValue',
56
+ 'id': 'useId',
56
57
  'utiliser id': 'useId',
57
58
  'transition': 'useTransition',
58
59
  'utiliser transition': 'useTransition',
59
- 'valeur différée': 'useDeferredValue',
60
- 'utiliser valeur différée': 'useDeferredValue',
60
+ 'valeur differee': 'useDeferredValue',
61
+ 'utiliser valeur differee': 'useDeferredValue',
61
62
  'effet insertion': 'useInsertionEffect',
62
63
  'valeur sync externe': 'useSyncExternalStore'
63
64
  }
@@ -73,16 +74,16 @@ class ReactGenerator extends JSGenerator {
73
74
  }
74
75
 
75
76
  this.apiMap = {
76
- 'créer élément': 'createElement',
77
- 'cloner élément': 'cloneElement',
78
- 'est élément valide': 'isValidElement',
77
+ 'creer element': 'createElement',
78
+ 'cloner element': 'cloneElement',
79
+ 'est element valide': 'isValidElement',
79
80
  'enfants': 'Children',
80
- 'créer ref': 'createRef',
81
+ 'creer ref': 'createRef',
81
82
  'transferer ref': 'forwardRef',
82
- 'memoriser': 'mémo',
83
+ 'memoriser': 'memo',
83
84
  'paresseux': 'lazy',
84
- 'créer contexte': 'createContext',
85
- 'créer portail': 'createPortal'
85
+ 'creer contexte': 'createContext',
86
+ 'creer portail': 'createPortal'
86
87
  }
87
88
  }
88
89
 
@@ -101,22 +102,13 @@ class ReactGenerator extends JSGenerator {
101
102
 
102
103
  if (Array.isArray(ast)) {
103
104
  for (const node of ast) {
104
- const result = this.generateNode(node)
105
- if (result !== undefined && result !== '' && this.output === '') {
106
- return result
107
- }
105
+ this.generateNode(node)
108
106
  }
109
107
  } else if (ast && ast.type) {
110
- const result = this.generateNode(ast)
111
- if (result !== undefined && result !== '' && this.output === '') {
112
- return result
113
- }
108
+ this.generateNode(ast)
114
109
  } else if (ast && ast.body) {
115
110
  for (const node of ast.body) {
116
- const result = this.generateNode(node)
117
- if (result !== undefined && result !== '' && this.output === '') {
118
- return result
119
- }
111
+ this.generateNode(node)
120
112
  }
121
113
  }
122
114
 
@@ -326,26 +318,25 @@ class ReactGenerator extends JSGenerator {
326
318
  'formulaire': 'form',
327
319
  'champ': 'input',
328
320
  'zone texte': 'textarea',
329
- 'étiquette': 'label',
330
321
  'etiquette': 'label',
331
- 'sélection': 'select',
322
+ 'selection': 'select',
332
323
  'option': 'option',
333
324
  'liste': 'ul',
334
- 'liste ordonnée': 'ol',
335
- 'élément liste': 'li',
325
+ 'liste ordonnee': 'ol',
326
+ 'element liste': 'li',
336
327
  'tableau': 'table',
337
328
  'ligne': 'tr',
338
329
  'cellule': 'td',
339
- 'entête cellule': 'th',
330
+ 'entete cellule': 'th',
340
331
  'corps tableau': 'tbody',
341
- 'entête tableau': 'thead',
332
+ 'entete tableau': 'thead',
342
333
  'pied tableau': 'tfoot',
343
- 'entête': 'header',
334
+ 'entete': 'header',
344
335
  'piedpage': 'footer',
345
336
  'navigation': 'nav',
346
337
  'section': 'section',
347
338
  'article': 'article',
348
- 'côté': 'aside',
339
+ 'cote': 'aside',
349
340
  'principal': 'main',
350
341
  'video': 'video',
351
342
  'audio': 'audio',
@@ -377,7 +368,7 @@ class ReactGenerator extends JSGenerator {
377
368
  'a la soumission': 'onSubmit',
378
369
  'au survol': 'onMouseOver',
379
370
  'au survol fin': 'onMouseOut',
380
- 'souris entrée': 'onMouseEnter',
371
+ 'souris entree': 'onMouseEnter',
381
372
  'souris sortie': 'onMouseLeave',
382
373
  'souris bas': 'onMouseDown',
383
374
  'souris haut': 'onMouseUp',
@@ -388,20 +379,20 @@ class ReactGenerator extends JSGenerator {
388
379
  'touche presse': 'onKeyPress',
389
380
  'au chargement': 'onLoad',
390
381
  'erreur': 'onError',
391
- 'au défilement': 'onScroll',
392
- 'toucher début': 'onTouchStart',
382
+ 'au defilement': 'onScroll',
383
+ 'toucher debut': 'onTouchStart',
393
384
  'toucher mouvement': 'onTouchMove',
394
385
  'toucher fin': 'onTouchEnd',
395
- 'glisser début': 'onDragStart',
386
+ 'glisser debut': 'onDragStart',
396
387
  'glisser': 'onDrag',
397
388
  'glisser fin': 'onDragEnd',
398
389
  'deposer': 'onDrop',
399
390
  'copier': 'onCopy',
400
391
  'coller': 'onPaste',
401
392
  'valeur': 'value',
402
- 'valeur défaut': 'defaultValue',
393
+ 'valeur defaut': 'defaultValue',
403
394
  'coche': 'checked',
404
- 'coché défaut': 'defaultChecked',
395
+ 'coche defaut': 'defaultChecked',
405
396
  'desactive': 'disabled',
406
397
  'lecture seule': 'readOnly',
407
398
  'requis': 'required',
@@ -410,8 +401,8 @@ class ReactGenerator extends JSGenerator {
410
401
  'type': 'type',
411
402
  'nom': 'name',
412
403
  'identifiant': 'id',
413
- 'référence': 'ref',
414
- 'clé': 'key',
404
+ 'reference': 'ref',
405
+ 'cle': 'key',
415
406
  'enfants': 'children',
416
407
  'html interne': 'dangerouslySetInnerHTML',
417
408
  'tabindex': 'tabIndex',
@@ -422,11 +413,10 @@ class ReactGenerator extends JSGenerator {
422
413
  'adresse': 'href',
423
414
  'cible': 'target',
424
415
  'role': 'role',
425
- 'aria étiquette': 'aria-label',
426
416
  'aria etiquette': 'aria-label',
427
417
  'aria decrit par': 'aria-describedby',
428
418
  'aria cache': 'aria-hidden',
429
- 'aria étendu': 'aria-expanded',
419
+ 'aria etendu': 'aria-expanded',
430
420
  'aria selectionne': 'aria-selected',
431
421
  'aria desactive': 'aria-disabled'
432
422
  }