From 1d21cd5e65c97cd6fcaf756d721a2dda138d21bc Mon Sep 17 00:00:00 2001 From: teidesu Date: Sun, 6 Jun 2021 00:37:44 +0300 Subject: [PATCH] build: preparing to publish --- packages/crypto-node/native.js | 8 --- packages/crypto-node/{ => src}/native.d.ts | 0 packages/crypto-node/src/native.js | 8 +++ packages/node/index.ts | 56 ++++++++++++++++ packages/node/package.json | 22 +++++++ packages/node/tsconfig.json | 19 ++++++ packages/sqlite/tsconfig.json | 2 +- scripts/publish.js | 76 ++++++++++++++++++++++ 8 files changed, 182 insertions(+), 9 deletions(-) delete mode 100644 packages/crypto-node/native.js rename packages/crypto-node/{ => src}/native.d.ts (100%) create mode 100644 packages/crypto-node/src/native.js create mode 100644 packages/node/index.ts create mode 100644 packages/node/package.json create mode 100644 packages/node/tsconfig.json create mode 100644 scripts/publish.js diff --git a/packages/crypto-node/native.js b/packages/crypto-node/native.js deleted file mode 100644 index d3d33aa5..00000000 --- a/packages/crypto-node/native.js +++ /dev/null @@ -1,8 +0,0 @@ -let mod -try { - mod = require('./build/Release/crypto') -} catch (e) { - mod = require('./build/Debug/crypto') -} - -module.exports = mod diff --git a/packages/crypto-node/native.d.ts b/packages/crypto-node/src/native.d.ts similarity index 100% rename from packages/crypto-node/native.d.ts rename to packages/crypto-node/src/native.d.ts diff --git a/packages/crypto-node/src/native.js b/packages/crypto-node/src/native.js new file mode 100644 index 00000000..c37ffac3 --- /dev/null +++ b/packages/crypto-node/src/native.js @@ -0,0 +1,8 @@ +let mod +try { + mod = require('../build/Release/crypto') +} catch (e) { + mod = require('../build/Debug/crypto') +} + +module.exports = mod diff --git a/packages/node/index.ts b/packages/node/index.ts new file mode 100644 index 00000000..7bb21112 --- /dev/null +++ b/packages/node/index.ts @@ -0,0 +1,56 @@ +import { TelegramClient } from '@mtcute/client' +import { BaseTelegramClient } from '@mtcute/core' +import { NodeNativeCryptoProvider } from '@mtcute/crypto-node' +import { HtmlMessageEntityParser } from '@mtcute/html-parser' +import { MarkdownMessageEntityParser } from '@mtcute/markdown-parser' +import { SqliteStorage } from '@mtcute/sqlite' + +export * from '@mtcute/dispatcher' + +export namespace NodeTelegramClient { + export interface Options extends Omit { + /** + * Default parse mode to use. + * + * Both HTML and Markdown parse modes are + * registered automatically. + * + * Defaults to `html` + */ + defaultParseMode?: 'html' | 'markdown' + + /** + * Storage to use. + * + * You can pass a file name as a simple string, + * which will be passed directly to `SqliteStorage` + * + * Defaults to in-memory SQLite storage. + */ + storage?: BaseTelegramClient.Options['storage'] | string + } +} + +/** + * Tiny wrapper over `TelegramClient` for usage inside Node JS. + * + * This automatically sets the parse modes, native + * crypto addon and defaults to SQLite session. + */ +export class NodeTelegramClient extends TelegramClient { + constructor(opts: NodeTelegramClient.Options) { + super({ + crypto: () => new NodeNativeCryptoProvider(), + ...opts, + storage: + typeof opts.storage === 'string' + ? new SqliteStorage(opts.storage) + : opts.storage ?? new SqliteStorage(':memory:'), + }) + + this.registerParseMode(new HtmlMessageEntityParser()) + this.registerParseMode(new MarkdownMessageEntityParser()) + if (opts.defaultParseMode) + this.setDefaultParseMode(opts.defaultParseMode) + } +} diff --git a/packages/node/package.json b/packages/node/package.json new file mode 100644 index 00000000..2dccaa12 --- /dev/null +++ b/packages/node/package.json @@ -0,0 +1,22 @@ +{ + "name": "@mtcute/node", + "private": true, + "version": "0.0.0", + "description": "Meta-package for Node JS", + "author": "Alisa Sireneva ", + "license": "MIT", + "main": "index.ts", + "scripts": { + "test": "mocha -r ts-node/register tests/**/*.spec.ts", + "docs": "npx typedoc", + "build": "tsc" + }, + "dependencies": { + "@mtcute/client": "^0.0.0", + "@mtcute/sqlite": "^0.0.0", + "@mtcute/markdown-parser": "^0.0.0", + "@mtcute/html-parser": "^0.0.0", + "@mtcute/dispatcher": "^0.0.0", + "@mtcute/crypto-node": "^0.0.0" + } +} diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json new file mode 100644 index 00000000..4071ae4d --- /dev/null +++ b/packages/node/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": [ + "./index.ts" + ], + "typedocOptions": { + "name": "@mtcute/node", + "includeVersion": true, + "out": "../../docs/packages/node", + "listInvalidSymbolLinks": true, + "excludePrivate": true, + "entryPoints": [ + "./src/index.ts" + ] + } +} diff --git a/packages/sqlite/tsconfig.json b/packages/sqlite/tsconfig.json index 00a4b4e5..00c908d1 100644 --- a/packages/sqlite/tsconfig.json +++ b/packages/sqlite/tsconfig.json @@ -4,7 +4,7 @@ "outDir": "./dist" }, "include": [ - "./src" + "./index.ts" ], "typedocOptions": { "name": "@mtcute/sqlite", diff --git a/scripts/publish.js b/scripts/publish.js new file mode 100644 index 00000000..904e6791 --- /dev/null +++ b/scripts/publish.js @@ -0,0 +1,76 @@ +const fs = require('fs') +const path = require('path') +const cp = require('child_process') + +function publishSinglePackage(name) { + let dir = path.join(__dirname, '../packages', name) + + if (name !== 'tl') { + // tl package is already generated ready to publish + + console.log('[i] Building %s', name) + // build ts + cp.execSync('yarn run build', { + cwd: dir, + stdio: 'inherit', + }) + + // copy package.json, replacing private with false + const packJson = JSON.parse( + fs.readFileSync(path.join(dir, 'package.json'), 'utf8') + ) + if (!packJson.main) + throw new Error(`${name}'s package.json does not contain "main"`) + + // since "src" is compiled to "dist", we need to remove that prefix + packJson.main = packJson.main.replace(/^(?:\.\/)?src\//, '') + packJson.private = false + + fs.writeFileSync( + path.join(dir, 'dist/package.json'), + JSON.stringify(packJson, null, 4) + ) + + // copy readme + try { + fs.copyFileSync( + path.join(dir, 'README.md'), + path.join(dir, 'dist/README.md') + ) + } catch (e) { + if (e.code !== 'ENOENT') throw e + } + + dir = path.join(dir, 'dist') + } + + console.log('[i] Publishing %s', name) + + // publish to npm + // cp.execSync('npm publish', { + // cwd: , + // }) +} + +const LOCAL = [ + 'crypto', + 'tl-reference' +] + +if (require.main === module) { + const arg = process.argv[2] + if (!arg) { + console.log('Usage: publish.js ') + process.exit(0) + } + + if (arg === 'all') { + for (const f of fs.readdirSync(path.join('../packages'))) { + if (LOCAL.indexOf(f) > -1) continue + + publishSinglePackage(f) + } + } else { + publishSinglePackage(arg) + } +}