Unverified 提交 ba58f255 authored 作者: ziyun.zhu's avatar ziyun.zhu 提交者: GitHub

Merge pull request #5 from mentatxx/master

Fixed usage with module imports
import * as Redis from "ioredis"; import * as Redis from 'ioredis';
import { RedisModuleOptions, RedisModuleAsyncOptions } from "./redis.interface"; import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
export declare class RedisClientError extends Error { export declare class RedisClientError extends Error {
} }
export interface RedisClient { export interface RedisClient {
......
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const Redis = require("ioredis"); const Redis = require("ioredis");
const redis_constants_1 = require("./redis.constants");
const uuid = require("uuid"); const uuid = require("uuid");
const redis_constants_1 = require("./redis.constants");
class RedisClientError extends Error { class RedisClientError extends Error {
} }
exports.RedisClientError = RedisClientError; exports.RedisClientError = RedisClientError;
...@@ -12,7 +12,7 @@ exports.createClient = () => ({ ...@@ -12,7 +12,7 @@ exports.createClient = () => ({
const clients = new Map(); const clients = new Map();
const defaultKey = uuid(); const defaultKey = uuid();
if (Array.isArray(options)) { if (Array.isArray(options)) {
for (let o of options) { for (const o of options) {
if (o.name) { if (o.name) {
if (clients.has(o.name)) { if (clients.has(o.name)) {
throw new RedisClientError(`client ${o.name} is exists`); throw new RedisClientError(`client ${o.name} is exists`);
...@@ -31,13 +31,15 @@ exports.createClient = () => ({ ...@@ -31,13 +31,15 @@ exports.createClient = () => ({
clients.set(defaultKey, new Redis(options)); clients.set(defaultKey, new Redis(options));
} }
return { return {
defaultKey, clients, size: clients.size defaultKey,
clients,
size: clients.size,
}; };
}, },
inject: [redis_constants_1.REDIS_MODULE_OPTIONS] inject: [redis_constants_1.REDIS_MODULE_OPTIONS],
}); });
exports.createAsyncClientOptions = (options) => ({ exports.createAsyncClientOptions = (options) => ({
provide: redis_constants_1.REDIS_MODULE_OPTIONS, provide: redis_constants_1.REDIS_MODULE_OPTIONS,
useFactory: options.useFactory, useFactory: options.useFactory,
inject: options.inject inject: options.inject,
}); });
import { DynamicModule } from '@nestjs/common';
import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
export declare class RedisCoreModule {
static register(options: RedisModuleOptions | RedisModuleOptions[]): DynamicModule;
static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule;
}
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var RedisCoreModule_1;
const common_1 = require("@nestjs/common");
const redis_client_provider_1 = require("./redis-client.provider");
const redis_constants_1 = require("./redis.constants");
const redis_service_1 = require("./redis.service");
let RedisCoreModule = RedisCoreModule_1 = class RedisCoreModule {
static register(options) {
return {
module: RedisCoreModule_1,
providers: [
redis_client_provider_1.createClient(),
{ provide: redis_constants_1.REDIS_MODULE_OPTIONS, useValue: options },
],
exports: [redis_service_1.RedisService],
};
}
static forRootAsync(options) {
return {
module: RedisCoreModule_1,
imports: options.imports,
providers: [redis_client_provider_1.createClient(), redis_client_provider_1.createAsyncClientOptions(options)],
exports: [redis_service_1.RedisService],
};
}
};
RedisCoreModule = RedisCoreModule_1 = __decorate([
common_1.Global(),
common_1.Module({
providers: [redis_service_1.RedisService],
exports: [redis_service_1.RedisService],
})
], RedisCoreModule);
exports.RedisCoreModule = RedisCoreModule;
import { DynamicModule } from '@nestjs/common'; import { DynamicModule } from '@nestjs/common';
import { RedisModuleOptions, RedisModuleAsyncOptions } from './redis.interface'; import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
export declare class RedisModule { export declare class RedisModule {
static register(options: RedisModuleOptions | RedisModuleOptions[]): DynamicModule; static register(options: RedisModuleOptions | RedisModuleOptions[]): DynamicModule;
static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule; static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule;
......
...@@ -8,37 +8,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, ...@@ -8,37 +8,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
var RedisModule_1; var RedisModule_1;
const common_1 = require("@nestjs/common"); const common_1 = require("@nestjs/common");
const redis_constants_1 = require("./redis.constants"); const redis_core_module_1 = require("./redis-core.module");
const redis_service_1 = require("./redis.service");
const redis_client_provider_1 = require("./redis-client.provider");
let RedisModule = RedisModule_1 = class RedisModule { let RedisModule = RedisModule_1 = class RedisModule {
static register(options) { static register(options) {
return { return {
module: RedisModule_1, module: RedisModule_1,
providers: [ imports: [redis_core_module_1.RedisCoreModule.register(options)],
redis_client_provider_1.createClient(),
{ provide: redis_constants_1.REDIS_MODULE_OPTIONS, useValue: options }
],
exports: [redis_service_1.RedisService]
}; };
} }
static forRootAsync(options) { static forRootAsync(options) {
return { return {
module: RedisModule_1, module: RedisModule_1,
imports: options.imports, imports: [redis_core_module_1.RedisCoreModule.forRootAsync(options)],
providers: [
redis_client_provider_1.createClient(),
redis_client_provider_1.createAsyncClientOptions(options),
],
exports: [redis_service_1.RedisService]
}; };
} }
}; };
RedisModule = RedisModule_1 = __decorate([ RedisModule = RedisModule_1 = __decorate([
common_1.Global(), common_1.Module({})
common_1.Module({
providers: [redis_service_1.RedisService],
exports: [redis_service_1.RedisService]
})
], RedisModule); ], RedisModule);
exports.RedisModule = RedisModule; exports.RedisModule = RedisModule;
import * as Redis from "ioredis" import * as Redis from 'ioredis';
import * as uuid from 'uuid';
import { REDIS_CLIENT, REDIS_MODULE_OPTIONS } from './redis.constants'; import { REDIS_CLIENT, REDIS_MODULE_OPTIONS } from './redis.constants';
import { RedisModuleOptions, RedisModuleAsyncOptions } from "./redis.interface"; import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
import * as uuid from 'uuid'
export class RedisClientError extends Error {} export class RedisClientError extends Error {}
export interface RedisClient { export interface RedisClient {
defaultKey:string, defaultKey: string;
clients: Map<string, Redis.Redis>, clients: Map<string, Redis.Redis>;
size:number size: number;
} }
export const createClient = () => ({ export const createClient = () => ({
provide: REDIS_CLIENT, provide: REDIS_CLIENT,
useFactory:(options: RedisModuleOptions | RedisModuleOptions[]) => { useFactory: (options: RedisModuleOptions | RedisModuleOptions[]) => {
const clients = new Map<string,Redis.Redis>() const clients = new Map<string, Redis.Redis>();
const defaultKey = uuid() const defaultKey = uuid();
if(Array.isArray(options)) { if (Array.isArray(options)) {
for(let o of options) { for (const o of options) {
if(o.name) { if (o.name) {
if(clients.has(o.name)) { if (clients.has(o.name)) {
throw new RedisClientError(`client ${o.name} is exists`) throw new RedisClientError(`client ${o.name} is exists`);
} }
clients.set(o.name, new Redis(o)) clients.set(o.name, new Redis(o));
} else { } else {
if(clients.has(defaultKey)) { if (clients.has(defaultKey)) {
throw new RedisClientError('default client is exists') throw new RedisClientError('default client is exists');
} }
clients.set(defaultKey, new Redis(o)) clients.set(defaultKey, new Redis(o));
} }
} }
} else { } else {
clients.set(defaultKey,new Redis(options)) clients.set(defaultKey, new Redis(options));
} }
return { return {
defaultKey,clients,size:clients.size defaultKey,
} clients,
size: clients.size,
};
}, },
inject:[REDIS_MODULE_OPTIONS] inject: [REDIS_MODULE_OPTIONS],
}) });
export const createAsyncClientOptions = (options:RedisModuleAsyncOptions) => ({ export const createAsyncClientOptions = (options: RedisModuleAsyncOptions) => ({
provide: REDIS_MODULE_OPTIONS, provide: REDIS_MODULE_OPTIONS,
useFactory: options.useFactory, useFactory: options.useFactory,
inject: options.inject inject: options.inject,
}) });
\ No newline at end of file
import { DynamicModule, Global, Module } from '@nestjs/common';
import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
import {
createAsyncClientOptions,
createClient,
} from './redis-client.provider';
import { REDIS_MODULE_OPTIONS } from './redis.constants';
import { RedisService } from './redis.service';
@Global()
@Module({
providers: [RedisService],
exports: [RedisService],
})
export class RedisCoreModule {
static register(
options: RedisModuleOptions | RedisModuleOptions[],
): DynamicModule {
return {
module: RedisCoreModule,
providers: [
createClient(),
{ provide: REDIS_MODULE_OPTIONS, useValue: options },
],
exports: [RedisService],
};
}
static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule {
return {
module: RedisCoreModule,
imports: options.imports,
providers: [createClient(), createAsyncClientOptions(options)],
exports: [RedisService],
};
}
}
...@@ -2,10 +2,15 @@ import { ModuleMetadata } from '@nestjs/common/interfaces'; ...@@ -2,10 +2,15 @@ import { ModuleMetadata } from '@nestjs/common/interfaces';
import { RedisOptions } from 'ioredis'; import { RedisOptions } from 'ioredis';
export interface RedisModuleOptions extends RedisOptions { export interface RedisModuleOptions extends RedisOptions {
name?: string name?: string;
} }
export interface RedisModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> { export interface RedisModuleAsyncOptions
useFactory?: (...args: any[]) => RedisModuleOptions | RedisModuleOptions[] | Promise<RedisModuleOptions> | Promise<RedisModuleOptions[]>, extends Pick<ModuleMetadata, 'imports'> {
useFactory?: (...args: any[]) =>
| RedisModuleOptions
| RedisModuleOptions[]
| Promise<RedisModuleOptions>
| Promise<RedisModuleOptions[]>;
inject?: any[]; inject?: any[];
} }
import { DynamicModule, Module, Global } from '@nestjs/common'; import { DynamicModule, Module } from '@nestjs/common';
import { RedisModuleOptions, RedisModuleAsyncOptions } from './redis.interface'; import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
import { REDIS_MODULE_OPTIONS } from './redis.constants';
import { RedisService } from './redis.service';
import { createClient, createAsyncClientOptions } from './redis-client.provider';
@Global() import { RedisCoreModule } from './redis-core.module';
@Module({
providers:[RedisService], @Module({})
exports:[RedisService]
})
export class RedisModule { export class RedisModule {
static register(options:RedisModuleOptions|RedisModuleOptions[]): DynamicModule { static register(
options: RedisModuleOptions | RedisModuleOptions[],
): DynamicModule {
return { return {
module: RedisModule, module: RedisModule,
providers: [ imports: [RedisCoreModule.register(options)],
createClient(), };
{ provide: REDIS_MODULE_OPTIONS, useValue:options}
],
exports: [RedisService]
}
} }
static forRootAsync(options: RedisModuleAsyncOptions) : DynamicModule { static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule {
return { return {
module: RedisModule, module: RedisModule,
imports: options.imports, imports: [RedisCoreModule.forRootAsync(options)],
providers: [ };
createClient(),
createAsyncClientOptions(options),
],
exports: [RedisService]
}
} }
} }
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
"url": "https://github.com/kyknow/nestjs-redis" "url": "https://github.com/kyknow/nestjs-redis"
}, },
"scripts": { "scripts": {
"build": "rm -rf dist && tsc -p tsconfig.json", "build": "rimraf dist && tsc -p tsconfig.json",
"precommit": "lint-staged", "precommit": "lint-staged",
"prepublish:npm": "yarn run build", "prepublish:npm": "yarn run build",
"publish:npm": "yarn publish --access public", "publish:npm": "yarn publish --access public",
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
"@types/ioredis": "^4.0.4", "@types/ioredis": "^4.0.4",
"@types/uuid": "^3.4.4", "@types/uuid": "^3.4.4",
"ioredis": "^4.2.0", "ioredis": "^4.2.0",
"reflect-metadata": "^0.1.12",
"rxjs": "^6.2.2", "rxjs": "^6.2.2",
"uuid": "^3.3.2" "uuid": "^3.3.2"
}, },
...@@ -31,6 +32,7 @@ ...@@ -31,6 +32,7 @@
"@types/node": "^10.7.1", "@types/node": "^10.7.1",
"cz-conventional-changelog": "^2.1.0", "cz-conventional-changelog": "^2.1.0",
"jest": "^23.6.0", "jest": "^23.6.0",
"rimraf": "^2.6.3",
"ts-jest": "^23.10.5", "ts-jest": "^23.10.5",
"typescript": "^2.4.2" "typescript": "^2.4.2"
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论