JS: write full version (major.minor.patch) to .meta.js

This commit is contained in:
Alexander Udalov
2017-01-25 20:13:33 +03:00
parent 038e4da83c
commit ef42e3e4aa
9 changed files with 57 additions and 69 deletions
@@ -158,13 +158,6 @@ object KotlinJavascriptSerializationUtil {
packageProto.functionCount == 0 && packageProto.propertyCount == 0 && packageProto.typeAliasCount == 0
}) continue
val packageFqName = fqName.asString()
val header = JsProtoBuf.Header.newBuilder()
// TODO: write pre-release flag if needed
// TODO: write JS code binary version
header.packageFqName = packageFqName
val stream = ByteArrayOutputStream()
with(DataOutputStream(stream)) {
val version = JsBinaryVersion.INSTANCE.toArray()
@@ -172,7 +165,7 @@ object KotlinJavascriptSerializationUtil {
version.forEach(this::writeInt)
}
header.build().writeDelimitedTo(stream)
serializeHeader(fqName).writeDelimitedTo(stream)
part.writeTo(stream)
contentMap[JsSerializerProtocol.getKjsmFilePath(fqName)] = stream.toByteArray()
@@ -181,6 +174,19 @@ object KotlinJavascriptSerializationUtil {
return contentMap
}
fun serializeHeader(packageFqName: FqName?): JsProtoBuf.Header {
val header = JsProtoBuf.Header.newBuilder()
if (packageFqName != null) {
header.packageFqName = packageFqName.asString()
}
// TODO: write pre-release flag if needed
// TODO: write JS code binary version
return header.build()
}
private fun getPackagesFqNames(module: ModuleDescriptor): Set<FqName> {
return HashSet<FqName>().apply {
getSubPackagesFqNames(module.getPackage(FqName.ROOT), this)
@@ -202,14 +208,17 @@ object KotlinJavascriptSerializationUtil {
}
private fun JsModuleDescriptor<ModuleDescriptor>.serializeToBinaryMetadata(bindingContext: BindingContext): ByteArray {
val proto = serializeMetadata(bindingContext, data, kind, imported)
return ByteArrayOutputStream().apply {
GZIPOutputStream(this).use(proto::writeTo)
GZIPOutputStream(this).use { stream ->
serializeHeader(null).writeDelimitedTo(stream)
serializeMetadata(bindingContext, data, kind, imported).writeTo(stream)
}
}.toByteArray()
}
private fun ByteArray.deserializeToLibraryParts(name: String): JsModuleDescriptor<List<JsProtoBuf.Library.Part>> {
val content = GZIPInputStream(ByteArrayInputStream(this)).use { stream ->
JsProtoBuf.Header.parseDelimitedFrom(stream, JsSerializerProtocol.extensionRegistry)
JsProtoBuf.Library.parseFrom(stream, JsSerializerProtocol.extensionRegistry)
}