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.
- 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 -182
- 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
|
@@ -12,33 +12,33 @@ class TSGenerator extends JSGenerator {
|
|
|
12
12
|
'type': 'type',
|
|
13
13
|
'interface': 'interface',
|
|
14
14
|
'enum': 'enum',
|
|
15
|
-
'
|
|
15
|
+
'enumeration': 'enum',
|
|
16
16
|
'declare': 'declare',
|
|
17
|
-
'
|
|
17
|
+
'declarer': 'declare',
|
|
18
18
|
'namespace': 'namespace',
|
|
19
19
|
'espace de noms': 'namespace',
|
|
20
20
|
'module': 'module',
|
|
21
21
|
'abstract': 'abstract',
|
|
22
22
|
'abstrait': 'abstract',
|
|
23
23
|
'implements': 'implements',
|
|
24
|
-
'
|
|
24
|
+
'implemente': 'implements',
|
|
25
25
|
'extends': 'extends',
|
|
26
|
-
'
|
|
26
|
+
'etend': 'extends',
|
|
27
27
|
'readonly': 'readonly',
|
|
28
28
|
'lecture seule': 'readonly',
|
|
29
29
|
'public': 'public',
|
|
30
30
|
'private': 'private',
|
|
31
|
-
'
|
|
31
|
+
'prive': 'private',
|
|
32
32
|
'protected': 'protected',
|
|
33
|
-
'
|
|
33
|
+
'protege': 'protected',
|
|
34
34
|
'override': 'override',
|
|
35
35
|
'remplacer': 'override',
|
|
36
36
|
'keyof': 'keyof',
|
|
37
|
-
'
|
|
37
|
+
'cle de': 'keyof',
|
|
38
38
|
'typeof': 'typeof',
|
|
39
39
|
'type de': 'typeof',
|
|
40
40
|
'infer': 'infer',
|
|
41
|
-
'
|
|
41
|
+
'inferer': 'infer',
|
|
42
42
|
'satisfies': 'satisfies',
|
|
43
43
|
'satisfait': 'satisfies',
|
|
44
44
|
'as': 'as',
|
|
@@ -47,9 +47,9 @@ class TSGenerator extends JSGenerator {
|
|
|
47
47
|
'est': 'is',
|
|
48
48
|
'asserts': 'asserts',
|
|
49
49
|
'affirme': 'asserts',
|
|
50
|
-
'
|
|
50
|
+
'chaine': 'string',
|
|
51
51
|
'nombre': 'number',
|
|
52
|
-
'
|
|
52
|
+
'booleen': 'boolean',
|
|
53
53
|
'symbole': 'symbol',
|
|
54
54
|
'vide': 'void',
|
|
55
55
|
'nul type': 'null',
|
|
@@ -80,7 +80,7 @@ class TSGenerator extends JSGenerator {
|
|
|
80
80
|
'returntype': 'ReturnType',
|
|
81
81
|
'type retour': 'ReturnType',
|
|
82
82
|
'parameters': 'Parameters',
|
|
83
|
-
'
|
|
83
|
+
'parametres type': 'Parameters',
|
|
84
84
|
'awaited': 'Awaited',
|
|
85
85
|
'attendu type': 'Awaited'
|
|
86
86
|
}
|
|
@@ -95,7 +95,6 @@ class TSGenerator extends JSGenerator {
|
|
|
95
95
|
|
|
96
96
|
switch (node.type) {
|
|
97
97
|
case 'TypeAlias':
|
|
98
|
-
case 'TypeAliasDeclaration':
|
|
99
98
|
return this.generateTypeAlias(node)
|
|
100
99
|
case 'InterfaceDeclaration':
|
|
101
100
|
return this.generateInterface(node)
|
|
@@ -131,11 +130,10 @@ class TSGenerator extends JSGenerator {
|
|
|
131
130
|
generateTypeAlias(node) {
|
|
132
131
|
const name = node.name
|
|
133
132
|
const typeParams = node.typeParameters ? this.generateTypeParams(node.typeParameters) : ''
|
|
134
|
-
const
|
|
135
|
-
(typeof node.type === 'object' ? node.type : null)
|
|
136
|
-
const type = this.generateType(typeNode)
|
|
133
|
+
const type = this.generateType(node.type)
|
|
137
134
|
|
|
138
135
|
this.writeLine(`type ${name}${typeParams} = ${type};`)
|
|
136
|
+
this.writeLine('')
|
|
139
137
|
}
|
|
140
138
|
|
|
141
139
|
generateInterface(node) {
|
|
@@ -161,19 +159,17 @@ class TSGenerator extends JSGenerator {
|
|
|
161
159
|
const readonly = member.readonly ? 'readonly ' : ''
|
|
162
160
|
const optional = member.optional ? '?' : ''
|
|
163
161
|
const name = member.name || member.key
|
|
162
|
+
const type = this.generateType(member.type || member.value)
|
|
164
163
|
|
|
165
164
|
if (member.kind === 'method' || member.method) {
|
|
166
165
|
const typeParams = member.typeParameters ? this.generateTypeParams(member.typeParameters) : ''
|
|
167
166
|
const params = this.generateTypedParams(member.params || member.parameters || [])
|
|
168
|
-
const returnType = this.generateType(member.returnType
|
|
167
|
+
const returnType = member.returnType ? this.generateType(member.returnType) : 'void'
|
|
169
168
|
this.writeLine(`${readonly}${name}${optional}${typeParams}(${params}): ${returnType};`)
|
|
170
169
|
} else if (member.kind === 'index' || member.index) {
|
|
171
|
-
const keyName = member.keyName || 'key'
|
|
172
170
|
const keyType = this.generateType(member.keyType || 'string')
|
|
173
|
-
|
|
174
|
-
this.writeLine(`[${keyName}: ${keyType}]: ${valueType};`)
|
|
171
|
+
this.writeLine(`[key: ${keyType}]: ${type};`)
|
|
175
172
|
} else {
|
|
176
|
-
const type = this.generateType(member.type || member.value)
|
|
177
173
|
this.writeLine(`${readonly}${name}${optional}: ${type};`)
|
|
178
174
|
}
|
|
179
175
|
}
|
|
@@ -190,59 +186,37 @@ class TSGenerator extends JSGenerator {
|
|
|
190
186
|
const member = members[i]
|
|
191
187
|
const memberName = member.name || member
|
|
192
188
|
const value = member.value !== undefined ? ` = ${this.generateNode(member.value)}` : ''
|
|
193
|
-
|
|
189
|
+
const comma = i < members.length - 1 ? ',' : ''
|
|
190
|
+
this.writeLine(`${memberName}${value}${comma}`)
|
|
194
191
|
}
|
|
195
192
|
|
|
196
193
|
this.indent--
|
|
197
194
|
this.writeLine('}')
|
|
195
|
+
this.writeLine('')
|
|
198
196
|
}
|
|
199
197
|
|
|
200
198
|
generateType(type) {
|
|
201
199
|
if (!type) return 'any'
|
|
202
200
|
if (typeof type === 'string') return this.translate(type)
|
|
203
201
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
return 'string'
|
|
210
|
-
case 'number':
|
|
211
|
-
case 'nombre':
|
|
212
|
-
return 'number'
|
|
213
|
-
case 'boolean':
|
|
214
|
-
case 'booléen':
|
|
215
|
-
return 'boolean'
|
|
216
|
-
case 'void':
|
|
217
|
-
return 'void'
|
|
218
|
-
case 'null':
|
|
219
|
-
return 'null'
|
|
220
|
-
case 'undefined':
|
|
221
|
-
return 'undefined'
|
|
222
|
-
case 'any':
|
|
223
|
-
return 'any'
|
|
224
|
-
case 'never':
|
|
225
|
-
return 'never'
|
|
226
|
-
case 'unknown':
|
|
227
|
-
return 'unknown'
|
|
228
|
-
case 'référence':
|
|
229
|
-
const refName = this.translate(type.name)
|
|
230
|
-
if (type.typeArguments) {
|
|
231
|
-
return `${refName}<${type.typeArguments.map(a => this.generateType(a)).join(', ')}>`
|
|
202
|
+
switch (type.type || type.kind) {
|
|
203
|
+
case 'TypeAnnotation':
|
|
204
|
+
let result = this.translate(type.name)
|
|
205
|
+
if (type.generic && type.generic.length > 0) {
|
|
206
|
+
result += '<' + type.generic.map(g => this.generateType(g)).join(', ') + '>'
|
|
232
207
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
return String(type.value)
|
|
208
|
+
if (type.isArray) {
|
|
209
|
+
result += '[]'
|
|
210
|
+
}
|
|
211
|
+
return result
|
|
238
212
|
case 'union':
|
|
239
|
-
return
|
|
213
|
+
return type.types.map(t => this.generateType(t)).join(' | ')
|
|
240
214
|
case 'intersection':
|
|
241
|
-
return
|
|
215
|
+
return type.types.map(t => this.generateType(t)).join(' & ')
|
|
242
216
|
case 'array':
|
|
243
217
|
return `${this.generateType(type.elementType)}[]`
|
|
244
218
|
case 'tuple':
|
|
245
|
-
return `[${
|
|
219
|
+
return `[${type.elements.map(e => this.generateType(e)).join(', ')}]`
|
|
246
220
|
case 'generic':
|
|
247
221
|
const base = this.generateType(type.base)
|
|
248
222
|
const args = type.arguments.map(a => this.generateType(a)).join(', ')
|
|
@@ -253,6 +227,8 @@ class TSGenerator extends JSGenerator {
|
|
|
253
227
|
return `(${params}) => ${ret}`
|
|
254
228
|
case 'object':
|
|
255
229
|
return this.generateObjectType(type)
|
|
230
|
+
case 'literal':
|
|
231
|
+
return this.generateLiteralType(type)
|
|
256
232
|
case 'conditional':
|
|
257
233
|
const check = this.generateType(type.checkType)
|
|
258
234
|
const ext = this.generateType(type.extendsType)
|
|
@@ -260,38 +236,21 @@ class TSGenerator extends JSGenerator {
|
|
|
260
236
|
const falseT = this.generateType(type.falseType)
|
|
261
237
|
return `${check} extends ${ext} ? ${trueT} : ${falseT}`
|
|
262
238
|
case 'keyof':
|
|
263
|
-
return `keyof ${this.generateType(type.
|
|
239
|
+
return `keyof ${this.generateType(type.operand)}`
|
|
264
240
|
case 'typeof':
|
|
265
|
-
return `typeof ${
|
|
241
|
+
return `typeof ${this.generateNode(type.operand)}`
|
|
266
242
|
case 'indexed':
|
|
267
|
-
return `${this.generateType(type.
|
|
243
|
+
return `${this.generateType(type.object)}[${this.generateType(type.index)}]`
|
|
268
244
|
case 'mapped':
|
|
269
245
|
return this.generateMappedType(type)
|
|
270
246
|
case 'infer':
|
|
271
247
|
return `infer ${type.name}`
|
|
272
|
-
case 'template':
|
|
273
|
-
return this.generateTemplateLiteralType(type)
|
|
274
248
|
default:
|
|
275
|
-
if (type.name)
|
|
276
|
-
const name = this.translate(type.name)
|
|
277
|
-
if (type.typeArguments) {
|
|
278
|
-
return `${name}<${type.typeArguments.map(a => this.generateType(a)).join(', ')}>`
|
|
279
|
-
}
|
|
280
|
-
return name
|
|
281
|
-
}
|
|
249
|
+
if (type.name) return this.translate(type.name)
|
|
282
250
|
return 'any'
|
|
283
251
|
}
|
|
284
252
|
}
|
|
285
253
|
|
|
286
|
-
generateTemplateLiteralType(type) {
|
|
287
|
-
const parts = (type.parts || []).map(p => {
|
|
288
|
-
if (typeof p === 'string') return p
|
|
289
|
-
if (p.name) return '${' + this.generateType(p) + '}'
|
|
290
|
-
return this.generateType(p)
|
|
291
|
-
})
|
|
292
|
-
return '`' + parts.join('') + '`'
|
|
293
|
-
}
|
|
294
|
-
|
|
295
254
|
generateObjectType(type) {
|
|
296
255
|
const members = (type.members || type.properties || []).map(m => {
|
|
297
256
|
const readonly = m.readonly ? 'readonly ' : ''
|
|
@@ -312,18 +271,10 @@ class TSGenerator extends JSGenerator {
|
|
|
312
271
|
generateMappedType(type) {
|
|
313
272
|
const readonly = type.readonly ? (type.readonly === '-' ? '-readonly ' : 'readonly ') : ''
|
|
314
273
|
const optional = type.optional ? (type.optional === '-' ? '-?' : '?') : ''
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if (type.typeParameter) {
|
|
318
|
-
key = type.typeParameter.name || 'K'
|
|
319
|
-
constraint = this.generateType(type.typeParameter.constraint)
|
|
320
|
-
} else {
|
|
321
|
-
key = type.key || 'K'
|
|
322
|
-
constraint = this.generateType(type.constraint)
|
|
323
|
-
}
|
|
324
|
-
|
|
274
|
+
const key = type.key || 'K'
|
|
275
|
+
const constraint = this.generateType(type.constraint)
|
|
325
276
|
const as = type.as ? ` as ${this.generateType(type.as)}` : ''
|
|
326
|
-
const valueType = this.generateType(type.
|
|
277
|
+
const valueType = this.generateType(type.value)
|
|
327
278
|
|
|
328
279
|
return `{ ${readonly}[${key} in ${constraint}${as}]${optional}: ${valueType} }`
|
|
329
280
|
}
|
|
@@ -405,11 +356,9 @@ class TSGenerator extends JSGenerator {
|
|
|
405
356
|
|
|
406
357
|
generateTypeAssertion(node) {
|
|
407
358
|
const expression = this.generateNode(node.expression)
|
|
408
|
-
const
|
|
409
|
-
(node.type !== 'TypeAssertion' ? node.type : null)
|
|
410
|
-
const type = this.generateType(typeNode)
|
|
359
|
+
const type = this.generateType(node.type)
|
|
411
360
|
|
|
412
|
-
if (node.asStyle
|
|
361
|
+
if (node.asStyle) {
|
|
413
362
|
return `${expression} as ${type}`
|
|
414
363
|
}
|
|
415
364
|
return `<${type}>${expression}`
|
|
@@ -436,25 +385,24 @@ class TSGenerator extends JSGenerator {
|
|
|
436
385
|
generateVariableDeclaration(node) {
|
|
437
386
|
const kind = this.translate(node.kind || 'let')
|
|
438
387
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
name = this.generateNode(decl.id || decl.name)
|
|
388
|
+
if (node.declarations && node.declarations.length > 0) {
|
|
389
|
+
for (const decl of node.declarations) {
|
|
390
|
+
const name = this.generateNode(decl.id || decl.name)
|
|
391
|
+
const type = decl.type ? ': ' + this.generateType(decl.type) : ''
|
|
392
|
+
|
|
393
|
+
if (decl.init) {
|
|
394
|
+
const init = this.generateNode(decl.init)
|
|
395
|
+
this.writeLine(`${kind} ${name}${type} = ${init};`)
|
|
396
|
+
} else {
|
|
397
|
+
this.writeLine(`${kind} ${name}${type};`)
|
|
398
|
+
}
|
|
451
399
|
}
|
|
400
|
+
} else {
|
|
401
|
+
const name = typeof node.name === 'string' ? node.name : this.generateNode(node.name)
|
|
402
|
+
const type = node.typeAnnotation ? ': ' + this.generateType(node.typeAnnotation) : ''
|
|
452
403
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
if (decl.init) {
|
|
457
|
-
const init = this.generateNode(decl.init)
|
|
404
|
+
if (node.init) {
|
|
405
|
+
const init = this.generateNode(node.init)
|
|
458
406
|
this.writeLine(`${kind} ${name}${type} = ${init};`)
|
|
459
407
|
} else {
|
|
460
408
|
this.writeLine(`${kind} ${name}${type};`)
|
|
@@ -512,8 +460,7 @@ class TSGenerator extends JSGenerator {
|
|
|
512
460
|
if (node.kind === 'property' || node.type === 'PropertyDefinition' || node.property) {
|
|
513
461
|
const name = this.translate(node.key?.name || node.name || '')
|
|
514
462
|
const optional = node.optional ? '?' : ''
|
|
515
|
-
const
|
|
516
|
-
const type = typeNode && typeof typeNode === 'object' ? ': ' + this.generateType(typeNode) : ''
|
|
463
|
+
const type = node.typeAnnotation ? ': ' + this.generateType(node.typeAnnotation) : ''
|
|
517
464
|
const value = node.value ? ' = ' + this.generateNode(node.value) : ''
|
|
518
465
|
this.writeLine(`${modifiers}${name}${optional}${type}${value};`)
|
|
519
466
|
return
|
|
@@ -541,27 +488,6 @@ class TSGenerator extends JSGenerator {
|
|
|
541
488
|
this.writeLine('}')
|
|
542
489
|
this.writeLine('')
|
|
543
490
|
}
|
|
544
|
-
|
|
545
|
-
generateArrowFunction(node) {
|
|
546
|
-
const async = node.async ? 'async ' : ''
|
|
547
|
-
const params = this.generateTypedParams(node.params || [])
|
|
548
|
-
const returnType = node.returnType ? ': ' + this.generateType(node.returnType) : ''
|
|
549
|
-
|
|
550
|
-
if (node.body?.type === 'BlockStatement') {
|
|
551
|
-
let body = ''
|
|
552
|
-
const savedOutput = this.output
|
|
553
|
-
this.output = ''
|
|
554
|
-
this.indent++
|
|
555
|
-
this.generateNode(node.body)
|
|
556
|
-
this.indent--
|
|
557
|
-
body = this.output.trim()
|
|
558
|
-
this.output = savedOutput
|
|
559
|
-
return `${async}(${params})${returnType} => {\n${body}\n${this.getIndent()}}`
|
|
560
|
-
} else {
|
|
561
|
-
const body = this.generateNode(node.body)
|
|
562
|
-
return `${async}(${params})${returnType} => ${body}`
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
491
|
}
|
|
566
492
|
|
|
567
493
|
module.exports = {
|