function updateExchangeCount (fileName) {

    log.bright.cyan ('Updating exchange count →', fileName.yellow)

    let oldContent = fs.readFileSync (fileName, 'utf8')
    let newContent =
        oldContent.replace (/shields\.io\/badge\/exchanges\-[0-9a-z]+\-blue/g, 'shields.io/badge/exchanges-' + ccxt.exchanges.length + '-blue')


    fs.truncateSync (fileName)
    fs.writeFileSync (fileName, newContent)

}
Beispiel #2
0
let maxConcurrency = Number.MAX_VALUE // no limit

for (const arg of args) {
    if (arg.startsWith ('--'))               { keys[arg] = true }
    else if (arg.includes ('/'))             { symbol = arg }
    else if (Number.isFinite (Number (arg))) { maxConcurrency = Number (arg) }
    else                                     { exchanges.push (arg) }
}

/*  --------------------------------------------------------------------------- */

if (!exchanges.length) {

    if (!fs.existsSync ('./exchanges.json')) {

        log.bright.red ('\n\tNo', 'exchanges.json'.white, 'found, please run', 'npm run build'.white, 'to generate it!\n')
        process.exit (1)
    }

    exchanges = require ('./exchanges.json').ids
}

/*  --------------------------------------------------------------------------- */

const sleep = s => new Promise (resolve => setTimeout (resolve, s*1000))
const timeout = (s, promise) => Promise.race ([ promise, sleep (s).then (() => { throw new Error ('timed out') }) ])

/*  --------------------------------------------------------------------------- */

const exec = (bin, ...args) =>
Beispiel #3
0
    //-----------------------------------------------------------------------------

    function exportTypeScriptDeclarations (classes) {

        const file = './ccxt.d.ts'
        const regex = /(?:    export class [^\s]+ extends [^\s]+ \{\}[\r]?[\n])+/
        const replacement = Object.keys (classes).map (className => {
            const baseClass = classes[className]
            return '    export class ' + className + ' extends ' + baseClass + " {}"
        }).join ("\n") + "\n"

        replaceInFile (file, regex, replacement)
    }

    //-----------------------------------------------------------------------------

    createFolderRecursively (python2Folder)
    createFolderRecursively (python3Folder)
    createFolderRecursively (phpFolder)

    const classes = transpileDerivedExchangeFiles ('./js/')

    exportTypeScriptDeclarations (classes)

    transpilePythonAsyncToSync ('./python/test/test_async.py', './python/test/test.py')

    //-----------------------------------------------------------------------------

    log.bright.green ('Transpiled successfully.')
Beispiel #4
0
    ].forEach (({ file, regex, replacement }) => {

        log.bright.cyan ('Exporting exchanges →', file.yellow)
        replaceInFile (file, regex, replacement)

    })
Beispiel #5
0
const log       = require ('ololog')
const ansi      = require ('ansicolor').nice

// ---------------------------------------------------------------------------

let exchanges
let verbose = false

// ---------------------------------------------------------------------------

let wikiPath = 'wiki'
let gitWikiPath = 'ccxt.wiki'

if (!fs.existsSync (gitWikiPath)) {

    log.bright.cyan ('Checking out ccxt.wiki...')
    execSync ('git clone https://github.com/ccxt/ccxt.wiki.git')
}

// ---------------------------------------------------------------------------

function replaceInFile (filename, regex, replacement) {
    let contents = fs.readFileSync (filename, 'utf8')
    const parts = contents.split (regex)
    const newContents = parts[0] + replacement + parts[1]
    fs.truncateSync (filename)
    fs.writeFileSync (filename, newContents)
}

// ---------------------------------------------------------------------------
"use strict";

const fs = require ('fs')
const ccxt = require ('./ccxt')
const log  = require ('ololog')
const ansi = require ('ansicolor').nice

//-----------------------------------------------------------------------------

let readmeRst = './python/README.rst'

log.bright.cyan ('Preparing for PyPI →', readmeRst.yellow)

let rst = fs.readFileSync (readmeRst, 'utf8')
let rstNew = rst.replace (/\`([^\`]+)\s\<\#[^\`]+\>\`\_\_/g, '$1') // PyPI doesn't like urls containing anchor hash symbol '#', strip it off to plain text
                .replace (/\\\|/g, '|')                    // PyPI doesn't like escaped vertical bars
                .replace (/\\\_/g, ' _')                   // PyPI doesn't like escaped underscores
                .replace (/\|(\_[^\|]+)\|([\ ]+)\|/g, '|$1| $2|')
                // .replace (/\|\\(\_[^\|]+)\|/g, '|$1|')

let rstExchangeTableRegex = /([\s\S]+?)APIs:(?:(?:[\r][\n]){2}|[\n]{2})(\+\-\-[\s\S]+\-\-\+)(?:(?:[\r][\n]){2}|[\n]{2})([\s\S]+)/
let match = rstExchangeTableRegex.exec (rstNew)

let rstExchangeTableLines = match[2].split ("\n")

let newRstExchangeTable = rstExchangeTableLines.map (line => {
    return line.replace (/(\||\+)(.).+?(\s|\=|\-)(\||\+)/, '$1') // replace ascii table graphics
}).join ("\n")

rstNew = match[1] + "APIs:\n\n" + newRstExchangeTable + "\n\n" + match[3]