@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
JavaScript
"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