mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
'use strict';
|
|
const isValidJavaScriptIdentifier = require('../util/isValidJavaScriptIdentifier');
|
|
const Node = require('./Node');
|
|
|
|
class Property extends Node {
|
|
constructor(def) {
|
|
super('Property');
|
|
this.key = def.key;
|
|
this.value = def.value;
|
|
}
|
|
|
|
generateCode(codegen) {
|
|
var key = this.key;
|
|
var value = this.value;
|
|
|
|
if (key.type === 'Literal') {
|
|
var propName = key.value;
|
|
if (isValidJavaScriptIdentifier(propName)) {
|
|
key = codegen.builder.identifier(propName);
|
|
}
|
|
}
|
|
|
|
this.key = codegen.generateCode(key);
|
|
this.value = codegen.generateCode(value);
|
|
|
|
return this;
|
|
}
|
|
|
|
writeCode(writer) {
|
|
var key = this.key;
|
|
var value = this.value;
|
|
writer.write(key);
|
|
writer.write(': ');
|
|
writer.write(value);
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
type: 'Property',
|
|
key: this.key,
|
|
value: this.value
|
|
};
|
|
}
|
|
|
|
walk(walker) {
|
|
this.key = walker.walk(this.key);
|
|
this.value = walker.walk(this.value);
|
|
}
|
|
|
|
toString() {
|
|
var key = this.key;
|
|
var value = this.value;
|
|
|
|
if (key.type === 'Literal') {
|
|
var propName = key.value;
|
|
if (isValidJavaScriptIdentifier(propName)) {
|
|
key = propName;
|
|
}
|
|
}
|
|
|
|
return key + ': ' + value;
|
|
}
|
|
}
|
|
|
|
module.exports = Property; |