UNPKG

@plq/faker

Version:

A set of classes for mocking known data types such as browser history, browser download list, persona, domain name, Jira project, GitHub repository, etc.

116 lines 4.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const faker_1 = require("@faker-js/faker"); const domain_1 = __importDefault(require("./domain")); const user_1 = __importDefault(require("./user")); const project_1 = __importDefault(require("./project")); const repository_1 = __importDefault(require("./repository")); const tracker_1 = __importDefault(require("./tracker")); const is_1 = require("@plq/is"); const base_extended_1 = require("./base-extended"); class MockHistory extends base_extended_1.BaseItemsMock { domain; user; project; variables; templates = { default: [ ['{{url}}/{{fakePath}}', '{{lorem.sentence}} - {{fakePath}}'] ], google: [ ['https://www.google.com/search?q={{search}}', '{{search}} - Google Search'], ['https://www.google.com/search?q={{search}}', '{{search}} - Google Search'], ], reddit: [ ['https://www.reddit.com/r/{{sub}}', '{{title}} : {{sub}}'], ['https://www.reddit.com/r/{{sub}}', '{{title}} : {{sub}}'], ], 'web.dev': [ ['https://web.dev/{{sub}}', '{{title}} - {{sub}}'], ['https://web.dev/{{sub}}', '{{title}} - {{sub}}'], ], }; constructor(query) { super(query); const text = this.query?.text ?? faker_1.faker.internet.url(); this.domain = new domain_1.default({ domain: text }).getItem(); this.variables = this.createVariables(); this.items = this.createMockItems(); this.reset(); } createVariables() { return { url: this.domain.full, fakePath: `${faker_1.faker.lorem.word()}/${faker_1.faker.lorem.word()}/${faker_1.faker.lorem.word()}`, search: faker_1.faker.lorem.sentence(), sub: faker_1.faker.lorem.word(), title: faker_1.faker.lorem.sentence(), }; } getHistoryTemplates() { const text = this.query?.text; const foundKey = Object.keys(this.templates).find(key => text?.includes(key)); return text ? foundKey ? this.templates[foundKey] : this.templates.default : this.templates.default; } getTemplates() { this.user = this.user ?? new user_1.default(this.domain).getItem(); this.project = this.project ?? new project_1.default(this.domain).getItem(); const siteQuery = { domain: (0, is_1.isEmpty)(this.domain) ? undefined : this.domain, user: (0, is_1.isEmpty)(this.user) ? undefined : this.user, project: (0, is_1.isEmpty)(this.project) ? undefined : this.project, }; const repository = new repository_1.default(siteQuery).getItem(); const tracker = new tracker_1.default(siteQuery).getItem(); const repositoryTemplates = repository.isSupported ? repository.templates : null; const trackerTemplates = tracker.isSupported ? tracker.templates : null; const finalTemplates = repositoryTemplates || trackerTemplates || this.getHistoryTemplates(); return faker_1.faker.helpers.arrayElement(finalTemplates); } getTitle() { const [, titleTemplate] = this.getTemplates(); return faker_1.faker.helpers.mustache(titleTemplate, this.variables); } getUrl() { const [urlTemplate] = this.getTemplates(); return faker_1.faker.helpers.mustache(urlTemplate, this.variables); } createMockItem() { const title = this.getTitle(); const url = this.getUrl(); const from = this.query?.startTime ? new Date(this.query.startTime) : faker_1.faker.date.recent(); const to = this.query?.endTime ? new Date(this.query.endTime) : new Date(); return { id: faker_1.faker.string.nanoid(), title, url, lastVisitTime: faker_1.faker.date.between({ from, to, }).getTime(), visitCount: faker_1.faker.number.int(9999), typedCount: faker_1.faker.number.int(9999), }; } createMockItems() { return faker_1.faker.helpers.multiple(() => this.createMockItem(), { count: this.query?.maxResults ?? 10 }); } reset() { this.variables = this.createVariables(); this.items = this.createMockItems(); } } exports.default = MockHistory; //# sourceMappingURL=history.js.map