UNPKG

nest-puppeteer

Version:

Puppeteer (Headless Chrome) provider for Nest.js

176 lines 7.38 kB
"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; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var PuppeteerCoreModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.PuppeteerCoreModule = void 0; const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const puppeteer_1 = require("puppeteer"); const puppeteer_constants_1 = require("./puppeteer.constants"); const puppeteer_util_1 = require("./puppeteer.util"); let PuppeteerCoreModule = PuppeteerCoreModule_1 = class PuppeteerCoreModule { constructor(instanceName, moduleRef) { this.instanceName = instanceName; this.moduleRef = moduleRef; } onApplicationShutdown() { return this.onModuleDestroy(); } static forRoot(launchOptions = puppeteer_constants_1.DEFAULT_CHROME_LAUNCH_OPTIONS, instanceName = puppeteer_constants_1.DEFAULT_PUPPETEER_INSTANCE_NAME) { const instanceNameProvider = { provide: puppeteer_constants_1.PUPPETEER_INSTANCE_NAME, useValue: instanceName, }; const browserProvider = { provide: puppeteer_util_1.getBrowserToken(instanceName), async useFactory() { return await puppeteer_1.launch(launchOptions); }, }; const contextProvider = { provide: puppeteer_util_1.getContextToken(instanceName), async useFactory(browser) { return browser.createIncognitoBrowserContext(); }, inject: [puppeteer_util_1.getBrowserToken(instanceName)], }; const pageProvider = { provide: puppeteer_util_1.getPageToken(instanceName), async useFactory(context) { return await context.newPage(); }, inject: [puppeteer_util_1.getContextToken(instanceName)], }; return { module: PuppeteerCoreModule_1, providers: [ instanceNameProvider, browserProvider, contextProvider, pageProvider, ], exports: [browserProvider, contextProvider, pageProvider], }; } static forRootAsync(options) { var _a; const puppeteerInstanceName = (_a = options.instanceName) !== null && _a !== void 0 ? _a : puppeteer_constants_1.DEFAULT_PUPPETEER_INSTANCE_NAME; const instanceNameProvider = { provide: puppeteer_constants_1.PUPPETEER_INSTANCE_NAME, useValue: puppeteerInstanceName, }; const browserProvider = { provide: puppeteer_util_1.getBrowserToken(puppeteerInstanceName), async useFactory(puppeteerModuleOptions) { var _a; return await puppeteer_1.launch((_a = puppeteerModuleOptions.launchOptions) !== null && _a !== void 0 ? _a : puppeteer_constants_1.DEFAULT_CHROME_LAUNCH_OPTIONS); }, inject: [puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS], }; const contextProvider = { provide: puppeteer_util_1.getContextToken(puppeteerInstanceName), async useFactory(browser) { return await browser.createIncognitoBrowserContext(); }, inject: [ puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS, puppeteer_util_1.getBrowserToken(puppeteerInstanceName), ], }; const pageProvider = { provide: puppeteer_util_1.getPageToken(puppeteerInstanceName), async useFactory(context) { return await context.newPage(); }, inject: [ puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS, puppeteer_util_1.getContextToken(puppeteerInstanceName), ], }; const asyncProviders = this.createAsyncProviders(options); return { module: PuppeteerCoreModule_1, imports: options.imports, providers: [ ...asyncProviders, browserProvider, contextProvider, pageProvider, instanceNameProvider, ], exports: [browserProvider, contextProvider, pageProvider], }; } async onModuleDestroy() { const browser = this.moduleRef.get(puppeteer_util_1.getBrowserToken(this.instanceName)); if (browser === null || browser === void 0 ? void 0 : browser.isConnected()) await browser.close(); } static createAsyncProviders(options) { if (options.useExisting || options.useFactory) { return [this.createAsyncOptionsProvider(options)]; } else if (options.useClass) { return [ this.createAsyncOptionsProvider(options), { provide: options.useClass, useClass: options.useClass, }, ]; } else { return []; } } static createAsyncOptionsProvider(options) { var _a; if (options.useFactory) { return { provide: puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS, useFactory: options.useFactory, inject: (_a = options.inject) !== null && _a !== void 0 ? _a : [], }; } else if (options.useExisting) { return { provide: puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS, async useFactory(optionsFactory) { return optionsFactory.createPuppeteerOptions(); }, inject: [options.useExisting], }; } else if (options.useClass) { return { provide: puppeteer_constants_1.PUPPETEER_MODULE_OPTIONS, async useFactory(optionsFactory) { return optionsFactory.createPuppeteerOptions(); }, inject: [options.useClass], }; } else { throw new Error('Invalid PuppeteerModule options'); } } }; PuppeteerCoreModule = PuppeteerCoreModule_1 = __decorate([ common_1.Global(), common_1.Module({}), __param(0, common_1.Inject(puppeteer_constants_1.PUPPETEER_INSTANCE_NAME)), __metadata("design:paramtypes", [String, core_1.ModuleRef]) ], PuppeteerCoreModule); exports.PuppeteerCoreModule = PuppeteerCoreModule; //# sourceMappingURL=puppeteer-core.module.js.map