blob: 884fe51a41841c4efdc40434a8df7a6096b2b16f [file] [log] [blame]
#!/usr/bin/env node
//
// If you uncomment the line in `zap-generate.js` that looks like this:
// // .then(() => scriptUtil.addToJsonFile('/tmp/gen.log', cmdArgs))
// then it will produce gen.log file.
// This script can then be used to take that file and produce a sdk.json out of it.
//
// Note: this was used in Matter SDK migration, but it is useful, yet not without
// some modifications for future cases. That's why this script is commited here.
//
// It is NOT part of zap runtime or anything, it's just a quick hack.
const fs = require('fs')
const fsp = fs.promises
const path = require('path')
const os = require('os')
// This points to the root of the SDK.
const sdkRoot = path.join(os.homedir(), 'git/matter')
async function read() {
let data = await fsp.readFile('/tmp/gen.log')
let json = JSON.parse(data)
let allParsed = []
for (let one of json) {
let parsed = {}
for (let x = 0; x < one.length; x++) {
if (one[x] == '-z') {
parsed.zcl = path.relative(sdkRoot, one[x + 1])
} else if (one[x] == '-g') {
parsed.gen = path.relative(sdkRoot, one[x + 1])
} else if (one[x] == '-i') {
parsed.input = path.relative(sdkRoot, one[x + 1])
} else if (one[x] == '-o') {
parsed.output = path.relative(sdkRoot, one[x + 1])
}
}
allParsed.push(parsed)
}
let final = {}
final.zcl = {}
for (let one of allParsed) {
if (!Object.values(final.zcl).includes(one.zcl)) {
let key = 'z' + Object.keys(final.zcl).length
if (one.zcl.includes('extensions')) {
key = 'main_ext'
} else {
key = 'main'
}
final.zcl[key] = one.zcl
}
}
final.templates = {}
for (let one of allParsed) {
if (!Object.values(final.templates).includes(one.gen)) {
let key = 't' + Object.keys(final.templates).length
if (one.gen.includes('java')) {
key = 'java'
} else if (one.gen.includes('python')) {
key = 'python'
} else if (one.gen.includes('darwin')) {
if (one.gen.includes('CHIP')) {
key = 'darwin-chip'
} else if (one.gen.includes('test')) {
key = 'darwin-test'
} else {
key = 'darwin'
}
} else if (one.gen.includes('chip-tool')) {
if (one.gen.includes('test')) {
key = 'chip-tool-test'
} else {
key = 'chip-tool'
}
} else if (one.gen.includes('app/common')) {
key = 'app-common'
} else if (one.gen.includes('app/tests')) {
key = 'app-test'
} else if (one.gen.includes('placeholder')) {
key = 'placeholder'
} else if (one.gen.includes('app/zap-templates')) {
key = 'app-zap'
}
final.templates[key] = one.gen
}
}
final.zapFiles = {}
for (let one of allParsed) {
if (!Object.values(final.zapFiles).includes(one.input)) {
let key = 'z' + Object.keys(final.zapFiles).length
if (one.input.includes('controller-clusters.zap')) {
key = 'controller'
} else if (one.input.startsWith('examples/placeholder')) {
if (one.input.includes('app1')) key = 'app1'
else key = 'app2'
} else if (one.input.startsWith('examples/chef')) {
key = path.basename(one.input, '.zap')
key = 'chef_' + key.substring(9, key.length - 11)
} else if (one.input.startsWith('examples')) {
key = path.basename(one.input, '.zap')
}
final.zapFiles[key] = one.input
}
}
final.generation = []
for (let one of allParsed) {
let out = one.output
let input = Object.keys(final.zapFiles).find(
(key) => final.zapFiles[key] === one.input
)
let zcl = Object.keys(final.zcl).find((key) => final.zcl[key] === one.zcl)
let template = Object.keys(final.templates).find(
(key) => final.templates[key] === one.gen
)
let thisOne = {
zapFile: input,
output: out,
zcl: zcl,
template: template
}
// Find existing one with same zapFile and output and zcl
let existing = final.generation.find((x) => {
return (
x.zapFile == thisOne.zapFile &&
x.output == thisOne.output &&
x.zcl == thisOne.zcl
)
})
if (existing) {
let ct = existing.template
if (Array.isArray(ct)) {
ct.push(thisOne.template)
} else {
existing.template = [existing.template, thisOne.template]
}
} else {
final.generation.push(thisOne)
}
final.generation.sort((a, b) => {
let cmp = a.zapFile.localeCompare(b.zapFile)
if (cmp != 0) return cmp
cmp = a.output.localeCompare(b.output)
if (cmp != 0) return cmp
cmp = a.zcl.localeCompare(b.zcl)
if (cmp != 0) return cmp
return a.template.localeCompare(b.template)
})
}
console.log(JSON.stringify(final, null, 2))
}
read().then(() => {})