diff --git a/package.json b/package.json index 632b81c..92680d9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "lint": "aegir lint", "build": "aegir build", "pregenerate:types": "rimraf './src/**/*.d.ts'", - "generate:types": "tsc", + "generate:types": "tsc --build", "test": "aegir test", "test:node": "aegir test --target node", "test:browser": "aegir test --target browser", @@ -69,7 +69,7 @@ "aegir": "^25.0.0", "it-handshake": "^1.0.1", "rimraf": "^3.0.2", - "typescript": "^4.1.2" + "typescript": "^4.0.5" }, "contributors": [ "Alan Shaw ", diff --git a/src/pubsub/utils.d.ts b/src/pubsub/utils.d.ts index c400623..3a95fdd 100644 --- a/src/pubsub/utils.d.ts +++ b/src/pubsub/utils.d.ts @@ -3,11 +3,11 @@ export function msgId(from: string, seqno: Uint8Array): Uint8Array; export function noSignMsgId(data: Uint8Array): Uint8Array; export function anyMatch(a: Set | any[], b: Set | any[]): boolean; export function ensureArray(maybeArray: T | T[]): T[]; -export function normalizeInRpcMessage(message: T, peerId?: string | undefined): T & { +export function normalizeInRpcMessage(message: T, peerId?: string | undefined): T & { from?: string | undefined; peerId?: string | undefined; }; -export function normalizeOutRpcMessage(message: T): T & { +export function normalizeOutRpcMessage(message: T): T & { from?: Uint8Array | undefined; data?: Uint8Array | undefined; }; diff --git a/src/topology/index.d.ts b/src/topology/index.d.ts index 83bc5c9..21b300d 100644 --- a/src/topology/index.d.ts +++ b/src/topology/index.d.ts @@ -8,22 +8,9 @@ declare class Topology { */ static isTopology(other: any): other is Topology; /** - * @param {Object} props - * @param {number} [props.min] minimum needed connections (default: 0) - * @param {number} [props.max] maximum needed connections (default: Infinity) - * @param {Object} [props.handlers] - * @param {function} [props.handlers.onConnect] protocol "onConnect" handler - * @param {function} [props.handlers.onDisconnect] protocol "onDisconnect" handler - * @constructor + * @param {Options} options */ - constructor({ min, max, handlers }: { - min: number | undefined; - max: number | undefined; - handlers: { - onConnect?: Function | undefined; - onDisconnect?: Function | undefined; - } | undefined; - }); + constructor({ min, max, handlers }: Options); min: number; max: number; _onConnect: Function; @@ -48,4 +35,28 @@ declare class Topology { disconnect(peerId: import("peer-id")): void; get [topologySymbol](): boolean; } +declare namespace Topology { + export { Options, Handlers }; +} declare const topologySymbol: unique symbol; +type Options = { + /** + * - minimum needed connections. + */ + min?: number | undefined; + /** + * - maximum needed connections. + */ + max?: number | undefined; + handlers?: Handlers | undefined; +}; +type Handlers = { + /** + * - protocol "onConnect" handler + */ + onConnect?: Function | undefined; + /** + * - protocol "onDisconnect" handler + */ + onDisconnect?: Function | undefined; +}; diff --git a/src/topology/index.js b/src/topology/index.js index ef36c5c..4dc651b 100644 --- a/src/topology/index.js +++ b/src/topology/index.js @@ -6,13 +6,7 @@ const topologySymbol = Symbol.for('@libp2p/js-interfaces/topology') class Topology { /** - * @param {Object} props - * @param {number} [props.min] minimum needed connections (default: 0) - * @param {number} [props.max] maximum needed connections (default: Infinity) - * @param {Object} [props.handlers] - * @param {function} [props.handlers.onConnect] protocol "onConnect" handler - * @param {function} [props.handlers.onDisconnect] protocol "onDisconnect" handler - * @constructor + * @param {Options} options */ constructor ({ min = 0, @@ -70,4 +64,15 @@ class Topology { } } +/** + * @typedef {Object} Options + * @property {number} [min=0] - minimum needed connections. + * @property {number} [max=Infinity] - maximum needed connections. + * @property {Handlers} [handlers] + * + * @typedef {Object} Handlers + * @property {Function} [onConnect] - protocol "onConnect" handler + * @property {Function} [onDisconnect] - protocol "onDisconnect" handler + */ + module.exports = Topology diff --git a/src/topology/multicodec-topology.d.ts b/src/topology/multicodec-topology.d.ts index 343e3f1..4a52993 100644 --- a/src/topology/multicodec-topology.d.ts +++ b/src/topology/multicodec-topology.d.ts @@ -8,24 +8,9 @@ declare class MulticodecTopology extends Topology { */ static isMulticodecTopology(other: any): other is MulticodecTopology; /** - * @param {Object} props - * @param {number} [props.min] minimum needed connections (default: 0) - * @param {number} [props.max] maximum needed connections (default: Infinity) - * @param {Array} props.multicodecs protocol multicodecs - * @param {Object} props.handlers - * @param {function} props.handlers.onConnect protocol "onConnect" handler - * @param {function} props.handlers.onDisconnect protocol "onDisconnect" handler - * @constructor + * @param {TopologyOptions & MulticodecOptions} props */ - constructor({ min, max, multicodecs, handlers }: { - min: number | undefined; - max: number | undefined; - multicodecs: Array; - handlers: { - onConnect: Function; - onDisconnect: Function; - }; - }); + constructor({ min, max, multicodecs, handlers }: TopologyOptions & MulticodecOptions); multicodecs: string[]; /** * Check if a new peer support the multicodecs for this topology. @@ -53,11 +38,41 @@ declare class MulticodecTopology extends Topology { multiaddrs: Array; protocols: Array; }>): void; + get [multicodecTopologySymbol](): boolean; } declare namespace MulticodecTopology { - export { PeerId, Multiaddr, Connection }; + export { PeerId, Multiaddr, Connection, TopologyOptions, MulticodecOptions, Handlers }; } import Topology = require("."); type PeerId = import("peer-id"); type Connection = typeof import("../connection"); type Multiaddr = import("multiaddr"); +declare const multicodecTopologySymbol: unique symbol; +type TopologyOptions = { + /** + * - minimum needed connections. + */ + min?: number | undefined; + /** + * - maximum needed connections. + */ + max?: number | undefined; + handlers?: Topology.Handlers | undefined; +}; +type MulticodecOptions = { + /** + * - protocol multicodecs + */ + multicodecs: string[]; + handlers: Required; +}; +type Handlers = { + /** + * - protocol "onConnect" handler + */ + onConnect?: Function | undefined; + /** + * - protocol "onDisconnect" handler + */ + onDisconnect?: Function | undefined; +}; diff --git a/src/topology/multicodec-topology.js b/src/topology/multicodec-topology.js index 271f25e..c46d23d 100644 --- a/src/topology/multicodec-topology.js +++ b/src/topology/multicodec-topology.js @@ -6,14 +6,7 @@ const multicodecTopologySymbol = Symbol.for('@libp2p/js-interfaces/topology/mult class MulticodecTopology extends Topology { /** - * @param {Object} props - * @param {number} [props.min] minimum needed connections (default: 0) - * @param {number} [props.max] maximum needed connections (default: Infinity) - * @param {Array} props.multicodecs protocol multicodecs - * @param {Object} props.handlers - * @param {function} props.handlers.onConnect protocol "onConnect" handler - * @param {function} props.handlers.onDisconnect protocol "onDisconnect" handler - * @constructor + * @param {TopologyOptions & MulticodecOptions} props */ constructor ({ min, @@ -143,5 +136,10 @@ class MulticodecTopology extends Topology { * @typedef {import('peer-id')} PeerId * @typedef {import('multiaddr')} Multiaddr * @typedef {import('../connection')} Connection + * @typedef {import('.').Options} TopologyOptions + * @typedef {Object} MulticodecOptions + * @property {string[]} multicodecs - protocol multicodecs + * @property {Required} handlers + * @typedef {import('.').Handlers} Handlers */ module.exports = MulticodecTopology diff --git a/tsconfig.json b/tsconfig.json index 2902998..9b19b9a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,20 @@ // Tells TypeScript to read JS files, as // normally they are ignored as source files "allowJs": true, + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": false, + "noImplicitAny": false, + "noImplicitThis": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": false, + "strictFunctionTypes": true, + "strictNullChecks": true, + "strictPropertyInitialization": true, + "strictBindCallApply": true, "strict": true, + "alwaysStrict": true, + "stripInternal": true, // Generate d.ts files "declaration": true, // This compiler run should