"use strict" const gulp = require("gulp") const fs = require("fs-extra") const merge = require("gulp-merge-json") const jsonModify = require("gulp-json-modify") const ASSET_FILES = [ "src/*.json", "src/**/*.json", "src/**/*.jade", "src/**/*.css", "src/**/*.png" ] gulp.task("build", () => { fs.emptyDirSync("./dist") fs.removeSync("./dist") fs.emptyDirSync("./swaggerJSONFilesBuilt") fs.removeSync("./swaggerJSONFilesBuilt") gulp.src(ASSET_FILES).pipe(gulp.dest("dist")) // set example vars for testnet const testnetInfoJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/testnet/info.json" ) const testnetPathsJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/testnet/paths.json" ) const testnetComponentsJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/testnet/components.json" ) const testnetInfo = JSON.parse(testnetInfoJSON) const testnetPaths = JSON.parse(testnetPathsJSON) const testnetComponents = JSON.parse(testnetComponentsJSON) gulp .src("./swaggerJSONFiles/info.json") .pipe( merge({ fileName: "./testnet/info.json", edit: (parsedJson, file) => { testnetInfo.forEach((item, index) => { parsedJson.info.description = item.value }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src("./swaggerJSONFiles/paths.json") .pipe( merge({ fileName: "./testnet/paths.json", edit: (parsedJson, file) => { testnetPaths.forEach((item, index) => { Object.keys(parsedJson.paths).forEach(key => { if (key === item.key) { if (parsedJson.paths[key].get) { parsedJson.paths[key].get.parameters.forEach(param => { if (param.name === item.name) param.example = item.value }) } else if (parsedJson.paths[key].post) { parsedJson.paths[key].post.parameters.forEach(param => { if (param.name === item.name) param.example = item.value }) } } }) }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src("./swaggerJSONFiles/components.json") .pipe( merge({ fileName: "./testnet/components.json", edit: (parsedJson, file) => { testnetComponents.forEach((item, index) => { if (item.key === "RawTxids") { parsedJson.components.schemas.RawTxids.properties.txids.example = item.value } if (item.key === "SLPTxids") { parsedJson.components.schemas.SLPTxids.properties.txids.example = item.value } Object.keys(parsedJson.components.schemas).forEach(key => { if ( key === item.key && parsedJson.components.schemas[key].properties[ key.toLowerCase() ] && parsedJson.components.schemas[key].properties[key.toLowerCase()] .example ) { parsedJson.components.schemas[key].properties[ key.toLowerCase() ].example = item.value } }) }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src(["./swaggerJSONFiles/servers.json"]) .pipe(gulp.dest("./swaggerJSONFilesBuilt/testnet")) gulp .src(["./swaggerJSONFiles/tags.json"]) .pipe(gulp.dest("./swaggerJSONFilesBuilt/testnet")) setTimeout(function() { gulp .src("./swaggerJSONFilesBuilt/testnet/**/*.json") .pipe( merge({ fileName: "bitcoin-com-testnet-rest-v2.json" }) ) .pipe(gulp.dest("./dist/public")) }, 1000) // set example vars for mainnet const mainnetInfoJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/mainnet/info.json" ) const mainnetPathsJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/mainnet/paths.json" ) const mainnetComponentsJSON = fs.readFileSync( "./swaggerJSONFiles/fixtures/mainnet/components.json" ) const mainnetInfo = JSON.parse(mainnetInfoJSON) const mainnetPaths = JSON.parse(mainnetPathsJSON) const mainnetComponents = JSON.parse(mainnetComponentsJSON) gulp .src("./swaggerJSONFiles/info.json") .pipe( merge({ fileName: "./mainnet/info.json", edit: (parsedJson, file) => { mainnetInfo.forEach((item, index) => { parsedJson.info.description = item.value }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src("./swaggerJSONFiles/paths.json") .pipe( merge({ fileName: "./mainnet/paths.json", edit: (parsedJson, file) => { mainnetPaths.forEach((item, index) => { Object.keys(parsedJson.paths).forEach(key => { if (key === item.key) { if (parsedJson.paths[key].get) { parsedJson.paths[key].get.parameters.forEach(param => { if (param.name === item.name) param.example = item.value }) } else if (parsedJson.paths[key].post) { parsedJson.paths[key].post.parameters.forEach(param => { if (param.name === item.name) param.example = item.value }) } } }) }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src("./swaggerJSONFiles/components.json") .pipe( merge({ fileName: "./mainnet/components.json", edit: (parsedJson, file) => { mainnetComponents.forEach((item, index) => { if (item.key === "RawTxids") { parsedJson.components.schemas.RawTxids.properties.txids.example = item.value } if (item.key === "SLPTxids") { parsedJson.components.schemas.SLPTxids.properties.txids.example = item.value } Object.keys(parsedJson.components.schemas).forEach(key => { // console.log(key, parsedJson.components.schemas[key].properties) if ( key === item.key && parsedJson.components.schemas[key].properties && parsedJson.components.schemas[key].properties[ key.toLowerCase() ] && parsedJson.components.schemas[key].properties[key.toLowerCase()] .example ) { // let tmpKey // console.log(key, item.key) // if (key === "BlockHashes") tmpKey = "hashes" // else tmpKey = key.toLowerCase() parsedJson.components.schemas[key].properties[ key.toLowerCase() ].example = item.value } }) }) return parsedJson } }) ) .pipe(gulp.dest("./swaggerJSONFilesBuilt")) gulp .src(["./swaggerJSONFiles/servers.json"]) .pipe(gulp.dest("./swaggerJSONFilesBuilt/mainnet")) gulp .src(["./swaggerJSONFiles/tags.json"]) .pipe(gulp.dest("./swaggerJSONFilesBuilt/mainnet")) setTimeout(function() { gulp .src("./swaggerJSONFilesBuilt/mainnet/**/*.json") .pipe( merge({ fileName: "bitcoin-com-mainnet-rest-v2.json" }) ) .pipe(gulp.dest("./dist/public")) }, 1000) })