@shortcut-cli/shortcut-cli 3.2.4 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,518 +1,491 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
12
10
  };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
21
18
  };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/lib/stories.ts
30
+ var stories_exports = {};
31
+ __export(stories_exports, {
32
+ default: () => stories_default
33
+ });
34
+ module.exports = __toCommonJS(stories_exports);
35
+ var import_child_process = require("child_process");
36
+ var import_chalk = __toESM(require("chalk"));
37
+ var import_debug = __toESM(require("debug"));
38
+
39
+ // src/lib/client.ts
40
+ var import_client = require("@shortcut/client");
41
+
42
+ // src/lib/configure.ts
43
+ var import_path = __toESM(require("path"));
44
+ var import_fs = __toESM(require("fs"));
45
+ var import_os = __toESM(require("os"));
46
+ function getConfigDir(suffix) {
47
+ const configBaseDir = process.env.XDG_CONFIG_HOME || import_path.default.resolve(process.env.XDG_DATA_HOME || import_os.default.homedir(), ".config");
48
+ return import_path.default.resolve(configBaseDir, suffix);
49
+ }
50
+ var configDir = getConfigDir("shortcut-cli");
51
+ var configFile = import_path.default.resolve(configDir, "config.json");
52
+ var legacyConfigDirs = [
53
+ getConfigDir("clubhouse-cli"),
54
+ import_path.default.resolve(import_os.default.homedir(), ".clubhouse-cli")
55
+ ];
56
+ var CONFIG_CACHE = null;
57
+ var loadConfig = () => {
58
+ const config3 = loadCachedConfig();
59
+ if (!config3 || config3 === {} || !config3.token) {
60
+ console.error("Please run 'short install' to configure Shortcut API access.");
61
+ process.exit(11);
62
+ }
63
+ if (!config3.urlSlug) {
64
+ console.error(
65
+ "Your config must be updated with data from Shortcut. Please run 'short install --refresh'."
66
+ );
67
+ process.exit(12);
68
+ }
69
+ return config3;
48
70
  };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
71
+ var loadCachedConfig = () => {
72
+ if (CONFIG_CACHE) {
73
+ return { ...CONFIG_CACHE };
74
+ }
75
+ let config3 = {};
76
+ const token = process.env.SHORTCUT_API_TOKEN || process.env.CLUBHOUSE_API_TOKEN;
77
+ legacyConfigDirs.forEach((dir) => {
78
+ if (import_fs.default.existsSync(dir)) {
79
+ createConfigDir();
80
+ import_fs.default.renameSync(dir, configDir);
55
81
  }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
82
+ });
83
+ if (import_fs.default.existsSync(configFile)) {
84
+ try {
85
+ config3 = JSON.parse(import_fs.default.readFileSync(configFile, "utf8"));
86
+ } catch (e) {
87
+ console.error(e);
88
+ process.exit(10);
62
89
  }
63
- return ar;
90
+ }
91
+ if (token) {
92
+ config3 = { token, ...config3 };
93
+ }
94
+ CONFIG_CACHE = { ...config3 };
95
+ return config3;
64
96
  };
65
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
- if (ar || !(i in from)) {
68
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
- ar[i] = from[i];
70
- }
71
- }
72
- return to.concat(ar || Array.prototype.slice.call(from));
97
+ var createConfigDir = () => {
98
+ const dir = import_path.default.dirname(configDir);
99
+ if (!import_fs.default.existsSync(dir)) {
100
+ import_fs.default.mkdirSync(dir);
101
+ }
102
+ if (!import_fs.default.existsSync(configDir)) {
103
+ import_fs.default.mkdirSync(configDir);
104
+ }
73
105
  };
74
- Object.defineProperty(exports, "__esModule", { value: true });
75
- var configure_1 = require("./configure");
76
- var client_1 = require("./client");
77
- var chalk_1 = require("chalk");
78
- var child_process_1 = require("child_process");
79
- var debug_1 = require("debug");
80
- var debug = (0, debug_1.default)('club');
81
- var config = (0, configure_1.loadConfig)();
106
+
107
+ // src/lib/client.ts
108
+ var config = loadConfig();
109
+ var client = new import_client.ShortcutClient(config.token);
110
+ var client_default = client;
111
+
112
+ // src/lib/stories.ts
113
+ var debug = (0, import_debug.default)("club");
114
+ var config2 = loadConfig();
82
115
  var log = console.log;
83
- function fetchEntities() {
84
- return __awaiter(this, void 0, void 0, function () {
85
- var _a, projectsById, statesById, membersById, groupsById, epicsById, iterationsById, labels;
86
- return __generator(this, function (_b) {
87
- switch (_b.label) {
88
- case 0: return [4, Promise.all([
89
- client_1.default
90
- .listProjects()
91
- .then(function (r) { return r.data; })
92
- .then(mapByItemId),
93
- client_1.default
94
- .listWorkflows()
95
- .then(function (r) { return r.data; })
96
- .then(function (wfs) { return wfs.reduce(function (states, wf) { return states.concat(wf.states); }, []); })
97
- .then(mapByItemId),
98
- client_1.default
99
- .listMembers(null)
100
- .then(function (r) { return r.data; })
101
- .then(mapByItemStringId),
102
- client_1.default
103
- .listGroups()
104
- .then(function (r) { return r.data; })
105
- .then(mapByItemStringId),
106
- client_1.default
107
- .listEpics(null)
108
- .then(function (r) { return r.data; })
109
- .then(mapByItemId),
110
- client_1.default
111
- .listIterations(null)
112
- .then(function (r) { return r.data; })
113
- .then(mapByItemId),
114
- client_1.default.listLabels(null).then(function (r) { return r.data; }),
115
- ]).catch(function (err) {
116
- log("Error fetching workflows: " + err);
117
- process.exit(2);
118
- })];
119
- case 1:
120
- _a = __read.apply(void 0, [_b.sent(), 7]), projectsById = _a[0], statesById = _a[1], membersById = _a[2], groupsById = _a[3], epicsById = _a[4], iterationsById = _a[5], labels = _a[6];
121
- debug('response workflows, members, groups, projects, epics, iterations');
122
- return [2, { projectsById: projectsById, statesById: statesById, membersById: membersById, groupsById: groupsById, epicsById: epicsById, iterationsById: iterationsById, labels: labels }];
123
- }
124
- });
125
- });
116
+ async function fetchEntities() {
117
+ const [projectsById, statesById, membersById, groupsById, epicsById, iterationsById, labels] = await Promise.all([
118
+ client_default.listProjects().then((r) => r.data).then(mapByItemId),
119
+ client_default.listWorkflows().then((r) => r.data).then((wfs) => wfs.reduce((states, wf) => states.concat(wf.states), [])).then(mapByItemId),
120
+ client_default.listMembers(null).then((r) => r.data).then(mapByItemStringId),
121
+ client_default.listGroups().then((r) => r.data).then(mapByItemStringId),
122
+ client_default.listEpics(null).then((r) => r.data).then(mapByItemId),
123
+ client_default.listIterations(null).then((r) => r.data).then(mapByItemId),
124
+ client_default.listLabels(null).then((r) => r.data)
125
+ ]).catch((err) => {
126
+ log(`Error fetching workflows: ${err}`);
127
+ process.exit(2);
128
+ });
129
+ debug("response workflows, members, groups, projects, epics, iterations");
130
+ return { projectsById, statesById, membersById, groupsById, epicsById, iterationsById, labels };
126
131
  }
127
- var listStories = function (program) { return __awaiter(void 0, void 0, void 0, function () {
128
- var entities, stories;
129
- return __generator(this, function (_a) {
130
- switch (_a.label) {
131
- case 0:
132
- debug('request workflows, members, projects, epics');
133
- return [4, fetchEntities()];
134
- case 1:
135
- entities = _a.sent();
136
- return [4, fetchStories(program, entities)];
137
- case 2:
138
- stories = _a.sent();
139
- debug('filtering stories');
140
- return [2, filterStories(program, stories, entities).sort(sortStories(program))];
141
- }
142
- });
143
- }); };
132
+ var listStories = async (program) => {
133
+ debug("request workflows, members, projects, epics");
134
+ const entities = await fetchEntities();
135
+ const stories = await fetchStories(program, entities);
136
+ debug("filtering stories");
137
+ return filterStories(program, stories, entities).sort(sortStories(program));
138
+ };
144
139
  function mapByItemId(items) {
145
- return items.reduce(function (map, obj) { return map.set(obj.id, obj); }, new Map());
140
+ return items.reduce((map, obj) => map.set(obj.id, obj), /* @__PURE__ */ new Map());
146
141
  }
147
142
  function mapByItemStringId(items) {
148
- return items.reduce(function (map, obj) { return map.set(obj.id, obj); }, new Map());
143
+ return items.reduce((map, obj) => map.set(obj.id, obj), /* @__PURE__ */ new Map());
149
144
  }
150
- function fetchStories(program, entities) {
151
- return __awaiter(this, void 0, void 0, function () {
152
- var regexProject, projectIds;
153
- return __generator(this, function (_a) {
154
- if ((program.args || []).length) {
155
- debug('using the search endpoint');
156
- return [2, searchStories(program)];
157
- }
158
- debug('filtering projects');
159
- regexProject = new RegExp(program.project, 'i');
160
- projectIds = __spreadArray([], __read(entities.projectsById.values()), false).filter(function (p) { return !!(p.id + p.name).match(regexProject); });
161
- debug('request all stories for project(s)', projectIds.map(function (p) { return p.name; }).join(', '));
162
- return [2, Promise.all(projectIds.map(function (p) { return client_1.default.listStories(p.id, null); })).then(function (projectStories) {
163
- return projectStories.reduce(function (acc, stories) { return acc.concat(stories.data); }, []);
164
- })];
165
- });
166
- });
145
+ async function fetchStories(program, entities) {
146
+ if ((program.args || []).length) {
147
+ debug("using the search endpoint");
148
+ return searchStories(program);
149
+ }
150
+ debug("filtering projects");
151
+ const regexProject = new RegExp(program.project, "i");
152
+ const projectIds = [...entities.projectsById.values()].filter(
153
+ (p) => !!(p.id + p.name).match(regexProject)
154
+ );
155
+ debug("request all stories for project(s)", projectIds.map((p) => p.name).join(", "));
156
+ return Promise.all(projectIds.map((p) => client_default.listStories(p.id, null))).then(
157
+ (projectStories) => projectStories.reduce((acc, stories) => acc.concat(stories.data), [])
158
+ );
167
159
  }
168
- function searchStories(program) {
169
- return __awaiter(this, void 0, void 0, function () {
170
- var query, result, stories, nextCursor;
171
- return __generator(this, function (_a) {
172
- switch (_a.label) {
173
- case 0:
174
- query = program.args.join(' ').replace('%self%', config.mentionName);
175
- return [4, client_1.default.searchStories({ query: query })];
176
- case 1:
177
- result = _a.sent();
178
- stories = result.data.data.map(storySearchResultToStory);
179
- _a.label = 2;
180
- case 2:
181
- if (!result.data.next) return [3, 4];
182
- nextCursor = new URLSearchParams(result.data.next).get('next');
183
- return [4, client_1.default.searchStories({ query: query, next: nextCursor })];
184
- case 3:
185
- result = _a.sent();
186
- stories = stories.concat(result.data.data.map(storySearchResultToStory));
187
- return [3, 2];
188
- case 4: return [2, stories];
189
- }
190
- });
191
- });
160
+ async function searchStories(program) {
161
+ const query = program.args.join(" ").replace("%self%", config2.mentionName);
162
+ let result = await client_default.searchStories({ query });
163
+ let stories = result.data.data.map(storySearchResultToStory);
164
+ while (result.data.next) {
165
+ const nextCursor = new URLSearchParams(result.data.next).get("next");
166
+ result = await client_default.searchStories({ query, next: nextCursor });
167
+ stories = stories.concat(result.data.data.map(storySearchResultToStory));
168
+ }
169
+ return stories;
192
170
  }
193
- var storySearchResultToStory = function (storySearchResult) {
194
- return __assign(__assign({}, storySearchResult), { description: storySearchResult.description || '', linked_files: storySearchResult.linked_files || [], comments: storySearchResult.comments || [], branches: storySearchResult.branches || [], tasks: storySearchResult.tasks || [], pull_requests: storySearchResult.pull_requests || [], commits: storySearchResult.commits || [], files: storySearchResult.files || [] });
171
+ var storySearchResultToStory = (storySearchResult) => {
172
+ return {
173
+ ...storySearchResult,
174
+ description: storySearchResult.description || "",
175
+ linked_files: storySearchResult.linked_files || [],
176
+ comments: storySearchResult.comments || [],
177
+ branches: storySearchResult.branches || [],
178
+ tasks: storySearchResult.tasks || [],
179
+ pull_requests: storySearchResult.pull_requests || [],
180
+ commits: storySearchResult.commits || [],
181
+ files: storySearchResult.files || []
182
+ };
195
183
  };
196
- var hydrateStory = function (entities, story) {
197
- debug('hydrating story');
198
- var augmented = story;
199
- augmented.project = entities.projectsById.get(story.project_id);
200
- augmented.state = entities.statesById.get(story.workflow_state_id);
201
- augmented.epic = entities.epicsById.get(story.epic_id);
202
- augmented.iteration = entities.iterationsById.get(story.iteration_id);
203
- augmented.owners = story.owner_ids.map(function (id) { return entities.membersById.get(id); });
204
- augmented.requester = entities.membersById.get(story.requested_by_id);
205
- augmented.group = entities.groupsById.get(story.group_id);
206
- debug('hydrated story');
207
- return augmented;
184
+ var hydrateStory = (entities, story) => {
185
+ debug("hydrating story");
186
+ const augmented = story;
187
+ augmented.project = entities.projectsById.get(story.project_id);
188
+ augmented.state = entities.statesById.get(story.workflow_state_id);
189
+ augmented.epic = entities.epicsById.get(story.epic_id);
190
+ augmented.iteration = entities.iterationsById.get(story.iteration_id);
191
+ augmented.owners = story.owner_ids.map((id) => entities.membersById.get(id));
192
+ augmented.requester = entities.membersById.get(story.requested_by_id);
193
+ augmented.group = entities.groupsById.get(story.group_id);
194
+ debug("hydrated story");
195
+ return augmented;
208
196
  };
209
- var isNumber = function (val) { return !!(val || val === 0) && !isNaN(Number(val.toString())); };
210
- var findEntity = function (entities, id) {
211
- if (entities.get(id)) {
212
- return entities.get(id);
213
- }
214
- if (isNumber(id) && Number(id.toString())) {
215
- return entities.get(Number(id.toString()));
216
- }
217
- var match = new RegExp("" + id, 'i');
218
- return Object.values(entities).filter(function (s) { return !!s.name.match(match); })[0];
219
- };
220
- var findProject = function (entities, project) {
221
- return findEntity(entities.projectsById, project);
197
+ var isNumber = (val) => !!(val || val === 0) && !isNaN(Number(val.toString()));
198
+ var findEntity = (entities, id) => {
199
+ if (entities.get(id)) {
200
+ return entities.get(id);
201
+ }
202
+ if (isNumber(id) && Number(id.toString())) {
203
+ return entities.get(Number(id.toString()));
204
+ }
205
+ const match = new RegExp(`${id}`, "i");
206
+ return Object.values(entities).filter((s) => !!s.name.match(match))[0];
222
207
  };
223
- var findGroup = function (entities, group) { return findEntity(entities.groupsById, group); };
224
- var findState = function (entities, state) { return findEntity(entities.statesById, state); };
225
- var findEpic = function (entities, epicName) { return findEntity(entities.epicsById, epicName); };
226
- var findIteration = function (entities, iterationName) {
227
- return findEntity(entities.statesById, iterationName);
208
+ var findProject = (entities, project) => findEntity(entities.projectsById, project);
209
+ var findGroup = (entities, group) => findEntity(entities.groupsById, group);
210
+ var findState = (entities, state) => findEntity(entities.statesById, state);
211
+ var findEpic = (entities, epicName) => findEntity(entities.epicsById, epicName);
212
+ var findIteration = (entities, iterationName) => findEntity(entities.statesById, iterationName);
213
+ var findOwnerIds = (entities, owners) => {
214
+ const ownerMatch = new RegExp(owners.split(",").join("|"), "i");
215
+ return Object.values(entities.membersById).filter((m) => !!`${m.id} ${m.profile.name} ${m.profile.mention_name}`.match(ownerMatch)).map((m) => m.id);
228
216
  };
229
- var findOwnerIds = function (entities, owners) {
230
- var ownerMatch = new RegExp(owners.split(',').join('|'), 'i');
231
- return Object.values(entities.membersById)
232
- .filter(function (m) { return !!(m.id + " " + m.profile.name + " " + m.profile.mention_name).match(ownerMatch); })
233
- .map(function (m) { return m.id; });
217
+ var findLabelNames = (entities, label) => {
218
+ const labelMatch = new RegExp(label.split(",").join("|"), "i");
219
+ return entities.labels.filter((m) => !!`${m.id} ${m.name}`.match(labelMatch)).map((m) => ({ name: m.name }));
234
220
  };
235
- var findLabelNames = function (entities, label) {
236
- var labelMatch = new RegExp(label.split(',').join('|'), 'i');
237
- return entities.labels
238
- .filter(function (m) { return !!(m.id + " " + m.name).match(labelMatch); })
239
- .map(function (m) { return ({ name: m.name }); });
240
- };
241
- var filterStories = function (program, stories, entities) {
242
- var created_at;
243
- if (program.created) {
244
- created_at = parseDateComparator(program.created);
221
+ var filterStories = (program, stories, entities) => {
222
+ let created_at;
223
+ if (program.created) {
224
+ created_at = parseDateComparator(program.created);
225
+ }
226
+ let updated_at;
227
+ if (program.updated) {
228
+ updated_at = parseDateComparator(program.updated);
229
+ }
230
+ let estimate;
231
+ if (program.estimate) {
232
+ estimate = parseNumberComparator(program.estimate);
233
+ }
234
+ const regexLabel = new RegExp(program.label, "i");
235
+ const regexState = new RegExp(program.state, "i");
236
+ const regexOwner = new RegExp(program.owner, "i");
237
+ const regexText = new RegExp(program.text, "i");
238
+ const regexType = new RegExp(program.type, "i");
239
+ const regexEpic = new RegExp(program.epic, "i");
240
+ const regexIteration = new RegExp(program.iteration, "i");
241
+ return stories.map((story) => hydrateStory(entities, story)).filter((s) => {
242
+ if (!program.archived && s.archived) {
243
+ return false;
245
244
  }
246
- var updated_at;
247
- if (program.updated) {
248
- updated_at = parseDateComparator(program.updated);
245
+ if (!(s.labels.map((l) => `${l.id},${l.name}`).join(",") + "").match(regexLabel)) {
246
+ return false;
249
247
  }
250
- var estimate;
251
- if (program.estimate) {
252
- estimate = parseNumberComparator(program.estimate);
248
+ if (!(s.workflow_state_id + " " + (s.state || {}).name).match(
249
+ regexState
250
+ )) {
251
+ return false;
253
252
  }
254
- var regexLabel = new RegExp(program.label, 'i');
255
- var regexState = new RegExp(program.state, 'i');
256
- var regexOwner = new RegExp(program.owner, 'i');
257
- var regexText = new RegExp(program.text, 'i');
258
- var regexType = new RegExp(program.type, 'i');
259
- var regexEpic = new RegExp(program.epic, 'i');
260
- var regexIteration = new RegExp(program.iteration, 'i');
261
- return stories
262
- .map(function (story) { return hydrateStory(entities, story); })
263
- .filter(function (s) {
264
- if (!program.archived && s.archived) {
265
- return false;
266
- }
267
- if (!(s.labels.map(function (l) { return l.id + "," + l.name; }).join(',') + '').match(regexLabel)) {
268
- return false;
269
- }
270
- if (!(s.workflow_state_id + ' ' + (s.state || {}).name).match(regexState)) {
271
- return false;
272
- }
273
- if (!(s.epic_id + ' ' + (s.epic || {}).name).match(regexEpic)) {
274
- return false;
275
- }
276
- if (!(s.iteration_id + ' ' + (s.iteration || {}).name).match(regexIteration)) {
277
- return false;
278
- }
279
- if (program.owner) {
280
- var owned = s.owners.filter(function (o) {
281
- return !!(o.profile.name + " " + o.profile.mention_name).match(regexOwner);
282
- }).length > 0;
283
- if (!owned)
284
- return false;
285
- }
286
- if (!s.name.match(regexText)) {
287
- return false;
288
- }
289
- if (!s.story_type.match(regexType)) {
290
- return false;
291
- }
292
- if (created_at && !created_at(s.created_at)) {
293
- return false;
294
- }
295
- if (updated_at && !updated_at(s.updated_at)) {
296
- return false;
297
- }
298
- return !(estimate && !estimate(s.estimate));
299
- });
300
- };
301
- var sortStories = function (program) {
302
- var fields = (program.sort || '').split(',').map(function (s) {
303
- return s.split(':').map(function (ss) { return ss.split('.'); });
304
- });
305
- var pluck = function (acc, val) {
306
- if (acc[val] === undefined)
307
- return {};
308
- return acc[val];
309
- };
310
- debug('sorting stories');
311
- return function (a, b) {
312
- return fields.reduce(function (acc, field) {
313
- if (acc !== 0)
314
- return acc;
315
- var ap = field[0].reduce(pluck, a);
316
- var bp = field[0].reduce(pluck, b);
317
- if (ap === bp)
318
- return 0;
319
- var direction = (field[1] || [''])[0].match(/des/i) ? 1 : -1;
320
- if (ap > bp) {
321
- if (direction > 0)
322
- return -1;
323
- }
324
- else {
325
- if (direction < 0)
326
- return -1;
327
- }
328
- return 1;
329
- }, 0);
330
- };
331
- };
332
- var printFormattedStory = function (program) {
333
- return function (story) {
334
- var _a;
335
- var defaultFormat = "#%id %t\n \tType: %y/%e\n \tTeam: %T\n \tProject: %p\n \tEpic: %epic\n \tIteration: %i\n \tRequester: %r\n \tOwners: %o\n \tState: %s\n \tLabels: %l\n \tURL: %u\n \tCreated: %c\n \tUpdated: %updated\n \tArchived: %a\n ";
336
- var format = program.format || defaultFormat;
337
- var labels = story.labels.map(function (l) { return l.name + " (#" + l.id + ")"; });
338
- var owners = story.owners.map(function (o) { return o.profile.name + " (" + o.profile.mention_name + ")"; });
339
- var url = "https://app.shortcut.com/story/" + story.id;
340
- var project = story.project ? story.project.name + " (#" + story.project.id + ")" : 'None';
341
- log(format
342
- .replace(/%j/, JSON.stringify(__assign(__assign({}, story), { url: url }), null, 2))
343
- .replace(/%id/, chalk_1.default.blue.bold("" + story.id))
344
- .replace(/%t/, chalk_1.default.blue("" + story.name))
345
- .replace(/%d/, story.description || '')
346
- .replace(/%y/, story.story_type)
347
- .replace(/%l/, labels.join(', ') || '_')
348
- .replace(/%epic/, story.epic_id ? (story.epic || {}).name + " (#" + story.epic_id + ")" : '_')
349
- .replace(/%e/, "" + (story.estimate || '_'))
350
- .replace(/%i/, story.iteration_id
351
- ? (story.iteration || {}).name + " (#" + story.iteration_id + ")"
352
- : '_')
353
- .replace(/%p/, project)
354
- .replace(/%T/, ((_a = story.group) === null || _a === void 0 ? void 0 : _a.name) || '_')
355
- .replace(/%o/, owners.join(', ') || '_')
356
- .replace(/%r/, story.requester.profile.name + " (" + story.requester.profile.mention_name + ")" ||
357
- '_')
358
- .replace(/%s/, (story.state || {}).name + " (#" + story.workflow_state_id + ")")
359
- .replace(/%c/, "" + story.created_at)
360
- .replace(/%updated/, "" + (story.updated_at !== story.created_at ? story.updated_at : '_'))
361
- .replace(/%u/, url)
362
- .replace(/%a/, "" + story.archived)
363
- .replace(/%gbs/, "" + buildStoryBranch(story, config.mentionName + "/sc-" + story.id + "/"))
364
- .replace(/%gb/, "" + buildStoryBranch(story)));
365
- return story;
366
- };
367
- };
368
- var buildURL = function () {
369
- var segments = [];
370
- for (var _i = 0; _i < arguments.length; _i++) {
371
- segments[_i] = arguments[_i];
372
- }
373
- return __spreadArray([
374
- 'https://app.shortcut.com',
375
- config.urlSlug
376
- ], __read(segments.map(function (item) { return item.toString(); })), false).join('/');
377
- };
378
- var storyURL = function (story) { return buildURL('story', story.id); };
379
- var printDetailedStory = function (story, entities) {
380
- var _a;
381
- if (entities === void 0) { entities = {}; }
382
- var labels = story.labels.map(function (l) {
383
- return chalk_1.default.bold("#" + l.id) + (" " + l.name);
384
- });
385
- var owners = story.owners.map(function (o) {
386
- var mentionName = chalk_1.default.bold("" + o.profile.mention_name);
387
- return o.profile.name + " (" + mentionName + ")";
388
- });
389
- log(chalk_1.default.blue.bold("#" + story.id) + chalk_1.default.blue(" " + story.name));
390
- log(chalk_1.default.bold('Desc:') + (" " + formatLong(story.description || '_')));
391
- log(chalk_1.default.bold('Team:') + (" " + (((_a = story.group) === null || _a === void 0 ? void 0 : _a.name) || '_')));
392
- log(chalk_1.default.bold('Owners:') + (" " + (owners.join(', ') || '_')));
393
- log(chalk_1.default.bold('Requester:') +
394
- (" " + story.requester.profile.name + " (" + story.requester.profile.mention_name + ")"));
395
- log(chalk_1.default.bold('Type:') + (" " + story.story_type + "/" + (story.estimate || '_')));
396
- log(chalk_1.default.bold('Label:') + (" " + (labels.join(', ') || '_')));
397
- if (story.project) {
398
- log(chalk_1.default.bold('Project:') + chalk_1.default.bold(" #" + story.project_id + " ") + story.project.name);
253
+ if (!(s.epic_id + " " + (s.epic || {}).name).match(regexEpic)) {
254
+ return false;
399
255
  }
400
- if (story.group) {
401
- log(chalk_1.default.bold('Team:') + chalk_1.default.bold(" #" + story.group_id + " ") + story.group.name);
256
+ if (!(s.iteration_id + " " + (s.iteration || {}).name).match(
257
+ regexIteration
258
+ )) {
259
+ return false;
402
260
  }
403
- if (story.epic) {
404
- log(chalk_1.default.bold('Epic:') + chalk_1.default.bold(" #" + story.epic_id + " ") + story.epic.name);
261
+ if (program.owner) {
262
+ const owned = s.owners.filter((o) => {
263
+ return !!`${o.profile.name} ${o.profile.mention_name}`.match(regexOwner);
264
+ }).length > 0;
265
+ if (!owned) return false;
405
266
  }
406
- else {
407
- log(chalk_1.default.bold('Epic:') + ' _');
267
+ if (!s.name.match(regexText)) {
268
+ return false;
408
269
  }
409
- if (story.iteration) {
410
- log(chalk_1.default.bold('Iteration:') + chalk_1.default.bold(" #" + story.iteration_id + " ") + story.iteration.name);
270
+ if (!s.story_type.match(regexType)) {
271
+ return false;
411
272
  }
412
- else {
413
- log(chalk_1.default.bold('Iteration:') + ' _');
273
+ if (created_at && !created_at(s.created_at)) {
274
+ return false;
414
275
  }
415
- log(chalk_1.default.bold('State:') + chalk_1.default.bold(" #" + story.workflow_state_id + " ") + story.state.name);
416
- log(chalk_1.default.bold('Created:') + (" " + story.created_at));
417
- if (story.created_at !== story.updated_at) {
418
- log(chalk_1.default.bold('Updated:') + (" " + story.updated_at));
276
+ if (updated_at && !updated_at(s.updated_at)) {
277
+ return false;
419
278
  }
420
- log(chalk_1.default.bold('URL:') + (" " + storyURL(story)));
421
- if (story.archived) {
422
- log(chalk_1.default.bold('Archived: ') + chalk_1.default.bold("" + story.archived));
423
- }
424
- if (story.completed) {
425
- log(chalk_1.default.bold('Completed: ') + chalk_1.default.bold("" + story.completed_at));
426
- }
427
- story.tasks.map(function (c) {
428
- log(chalk_1.default.bold('Task: ') +
429
- (c.complete ? '[X]' : '[ ]') +
430
- ' ' +
431
- formatLong(c.description));
432
- return c;
433
- });
434
- story.comments
435
- .filter(function (comment) { return !comment.deleted; })
436
- .map(function (c) {
437
- var author = entities.membersById.get(c.author_id);
438
- log(chalk_1.default.bold('Comment:') + (" " + formatLong(c.text)));
439
- log(" " + author.profile.name + " " + chalk_1.default.bold('at:') + (" " + c.updated_at));
440
- return c;
441
- });
442
- story.files.map(function (file) {
443
- log(chalk_1.default.bold('File:') + (" " + file.name));
444
- log(" " + file.url);
445
- return file;
446
- });
447
- log();
279
+ return !(estimate && !estimate(s.estimate));
280
+ });
281
+ };
282
+ var sortStories = (program) => {
283
+ const fields = (program.sort || "").split(",").map((s) => {
284
+ return s.split(":").map((ss) => ss.split("."));
285
+ });
286
+ const pluck = (acc, val) => {
287
+ if (acc[val] === void 0) return {};
288
+ return acc[val];
289
+ };
290
+ debug("sorting stories");
291
+ return (a, b) => {
292
+ return fields.reduce((acc, field) => {
293
+ if (acc !== 0) return acc;
294
+ const ap = field[0].reduce(pluck, a);
295
+ const bp = field[0].reduce(pluck, b);
296
+ if (ap === bp) return 0;
297
+ const direction = (field[1] || [""])[0].match(/des/i) ? 1 : -1;
298
+ if (ap > bp) {
299
+ if (direction > 0) return -1;
300
+ } else {
301
+ if (direction < 0) return -1;
302
+ }
303
+ return 1;
304
+ }, 0);
305
+ };
448
306
  };
449
- var formatLong = function (str) { return str.split('\n').join('\n '); };
450
- var parseDateComparator = function (arg) {
451
- var match = arg.match(/[0-9].*/) || { index: 0, '0': { length: 30 } };
452
- var parsedDate = new Date(arg.slice(match.index));
453
- var comparator = arg.slice(0, match.index);
454
- return function (date) {
455
- switch (comparator) {
456
- case '<':
457
- return new Date(date) < parsedDate;
458
- case '>':
459
- return new Date(date) > parsedDate;
460
- case '=':
461
- default:
462
- return new Date(date.slice(0, match[0].length)).getTime() === parsedDate.getTime();
463
- }
464
- };
307
+ var printFormattedStory = (program) => {
308
+ return (story) => {
309
+ const defaultFormat = `#%id %t
310
+ Type: %y/%e
311
+ Team: %T
312
+ Project: %p
313
+ Epic: %epic
314
+ Iteration: %i
315
+ Requester: %r
316
+ Owners: %o
317
+ State: %s
318
+ Labels: %l
319
+ URL: %u
320
+ Created: %c
321
+ Updated: %updated
322
+ Archived: %a
323
+ `;
324
+ const format = program.format || defaultFormat;
325
+ const labels = story.labels.map((l) => `${l.name} (#${l.id})`);
326
+ const owners = story.owners.map(
327
+ (o) => `${o.profile.name} (${o.profile.mention_name})`
328
+ );
329
+ const url = `https://app.shortcut.com/story/${story.id}`;
330
+ const project = story.project ? `${story.project.name} (#${story.project.id})` : "None";
331
+ log(
332
+ format.replace(/%j/, JSON.stringify({ ...story, url }, null, 2)).replace(/%id/, import_chalk.default.blue.bold(`${story.id}`)).replace(/%t/, import_chalk.default.blue(`${story.name}`)).replace(/%d/, story.description || "").replace(/%y/, story.story_type).replace(/%l/, labels.join(", ") || "_").replace(
333
+ /%epic/,
334
+ story.epic_id ? `${(story.epic || {}).name} (#${story.epic_id})` : "_"
335
+ ).replace(/%e/, `${story.estimate || "_"}`).replace(
336
+ /%i/,
337
+ story.iteration_id ? `${(story.iteration || {}).name} (#${story.iteration_id})` : "_"
338
+ ).replace(/%p/, project).replace(/%T/, story.group?.name || "_").replace(/%o/, owners.join(", ") || "_").replace(
339
+ /%r/,
340
+ // eslint-disable-next-line no-constant-binary-expression
341
+ `${story.requester.profile.name} (${story.requester.profile.mention_name})` || "_"
342
+ ).replace(
343
+ /%s/,
344
+ `${(story.state || {}).name} (#${story.workflow_state_id})`
345
+ ).replace(/%c/, `${story.created_at}`).replace(
346
+ /%updated/,
347
+ `${story.updated_at !== story.created_at ? story.updated_at : "_"}`
348
+ ).replace(/%u/, url).replace(/%a/, `${story.archived}`).replace(
349
+ /%gbs/,
350
+ `${buildStoryBranch(story, `${config2.mentionName}/sc-${story.id}/`)}`
351
+ ).replace(/%gb/, `${buildStoryBranch(story)}`)
352
+ );
353
+ return story;
354
+ };
465
355
  };
466
- var parseNumberComparator = function (arg) {
467
- var match = arg.match(/[0-9].*/) || { index: 0, '0': { length: 30 } };
468
- var parsedNumber = Number(arg.slice(match.index));
469
- var comparator = arg.slice(0, match.index).trimRight();
470
- return function (n) {
471
- switch (comparator) {
472
- case '<':
473
- return Number(n) < parsedNumber;
474
- case '>':
475
- return Number(n) > parsedNumber;
476
- case '=':
477
- default:
478
- return Number(n) === parsedNumber;
479
- }
480
- };
356
+ var buildURL = (...segments) => {
357
+ return [
358
+ "https://app.shortcut.com",
359
+ config2.urlSlug,
360
+ ...segments.map((item) => item.toString())
361
+ ].join("/");
362
+ };
363
+ var storyURL = (story) => buildURL("story", story.id);
364
+ var printDetailedStory = (story, entities = {}) => {
365
+ const labels = story.labels.map((l) => {
366
+ return import_chalk.default.bold(`#${l.id}`) + ` ${l.name}`;
367
+ });
368
+ const owners = story.owners.map((o) => {
369
+ const mentionName = import_chalk.default.bold(`${o.profile.mention_name}`);
370
+ return `${o.profile.name} (${mentionName})`;
371
+ });
372
+ log(import_chalk.default.blue.bold(`#${story.id}`) + import_chalk.default.blue(` ${story.name}`));
373
+ log(import_chalk.default.bold("Desc:") + ` ${formatLong(story.description || "_")}`);
374
+ log(import_chalk.default.bold("Team:") + ` ${story.group?.name || "_"}`);
375
+ log(import_chalk.default.bold("Owners:") + ` ${owners.join(", ") || "_"}`);
376
+ log(
377
+ import_chalk.default.bold("Requester:") + ` ${story.requester.profile.name} (${story.requester.profile.mention_name})`
378
+ );
379
+ log(import_chalk.default.bold("Type:") + ` ${story.story_type}/${story.estimate || "_"}`);
380
+ log(import_chalk.default.bold("Label:") + ` ${labels.join(", ") || "_"}`);
381
+ if (story.project) {
382
+ log(import_chalk.default.bold("Project:") + import_chalk.default.bold(` #${story.project_id} `) + story.project.name);
383
+ }
384
+ if (story.group) {
385
+ log(import_chalk.default.bold("Team:") + import_chalk.default.bold(` #${story.group_id} `) + story.group.name);
386
+ }
387
+ if (story.epic) {
388
+ log(import_chalk.default.bold("Epic:") + import_chalk.default.bold(` #${story.epic_id} `) + story.epic.name);
389
+ } else {
390
+ log(import_chalk.default.bold("Epic:") + " _");
391
+ }
392
+ if (story.iteration) {
393
+ log(
394
+ import_chalk.default.bold("Iteration:") + import_chalk.default.bold(` #${story.iteration_id} `) + story.iteration.name
395
+ );
396
+ } else {
397
+ log(import_chalk.default.bold("Iteration:") + " _");
398
+ }
399
+ log(import_chalk.default.bold("State:") + import_chalk.default.bold(` #${story.workflow_state_id} `) + story.state.name);
400
+ log(import_chalk.default.bold("Created:") + ` ${story.created_at}`);
401
+ if (story.created_at !== story.updated_at) {
402
+ log(import_chalk.default.bold("Updated:") + ` ${story.updated_at}`);
403
+ }
404
+ log(import_chalk.default.bold("URL:") + ` ${storyURL(story)}`);
405
+ if (story.archived) {
406
+ log(import_chalk.default.bold("Archived: ") + import_chalk.default.bold(`${story.archived}`));
407
+ }
408
+ if (story.completed) {
409
+ log(import_chalk.default.bold("Completed: ") + import_chalk.default.bold(`${story.completed_at}`));
410
+ }
411
+ story.tasks.map((c) => {
412
+ log(
413
+ import_chalk.default.bold("Task: ") + (c.complete ? "[X]" : "[ ]") + " " + formatLong(c.description)
414
+ );
415
+ return c;
416
+ });
417
+ story.comments.filter((comment) => !comment.deleted).map((c) => {
418
+ const author = entities.membersById.get(c.author_id);
419
+ log(import_chalk.default.bold("Comment:") + ` ${formatLong(c.text)}`);
420
+ log(` ${author.profile.name} ` + import_chalk.default.bold("at:") + ` ${c.updated_at}`);
421
+ return c;
422
+ });
423
+ story.files.map((file) => {
424
+ log(import_chalk.default.bold("File:") + ` ${file.name}`);
425
+ log(` ${file.url}`);
426
+ return file;
427
+ });
428
+ log();
429
+ };
430
+ var formatLong = (str) => str.split("\n").join("\n ");
431
+ var parseDateComparator = (arg) => {
432
+ const match = arg.match(/[0-9].*/) || { index: 0, "0": { length: 30 } };
433
+ const parsedDate = new Date(arg.slice(match.index));
434
+ const comparator = arg.slice(0, match.index);
435
+ return (date) => {
436
+ switch (comparator) {
437
+ case "<":
438
+ return new Date(date) < parsedDate;
439
+ case ">":
440
+ return new Date(date) > parsedDate;
441
+ case "=":
442
+ default:
443
+ return new Date(date.slice(0, match[0].length)).getTime() === parsedDate.getTime();
444
+ }
445
+ };
446
+ };
447
+ var parseNumberComparator = (arg) => {
448
+ const match = arg.match(/[0-9].*/) || { index: 0, "0": { length: 30 } };
449
+ const parsedNumber = Number(arg.slice(match.index));
450
+ const comparator = arg.slice(0, match.index).trimRight();
451
+ return (n) => {
452
+ switch (comparator) {
453
+ case "<":
454
+ return Number(n) < parsedNumber;
455
+ case ">":
456
+ return Number(n) > parsedNumber;
457
+ case "=":
458
+ default:
459
+ return Number(n) === parsedNumber;
460
+ }
461
+ };
481
462
  };
482
- var buildStoryBranch = function (story, prefix) {
483
- if (prefix === void 0) { prefix = ''; }
484
- prefix = prefix || config.mentionName + "/sc-" + story.id + "/" + story.story_type + "-";
485
- var slug = story.name
486
- .toLowerCase()
487
- .replace(/\W/g, '-')
488
- .replace(/[^a-z0-9-]/g, '')
489
- .slice(0, 30)
490
- .replace(/-$/, '');
491
- return "" + prefix + slug;
463
+ var buildStoryBranch = (story, prefix = "") => {
464
+ prefix = prefix || `${config2.mentionName}/sc-${story.id}/${story.story_type}-`;
465
+ const slug = story.name.toLowerCase().replace(/\W/g, "-").replace(/[^a-z0-9-]/g, "").slice(0, 30).replace(/-$/, "");
466
+ return `${prefix}${slug}`;
492
467
  };
493
- var checkoutStoryBranch = function (story, prefix) {
494
- if (prefix === void 0) { prefix = ''; }
495
- var branch = buildStoryBranch(story, prefix);
496
- debug('checking out git branch: ' + branch);
497
- (0, child_process_1.execSync)("git checkout " + branch + " 2> /dev/null || git checkout -b " + branch);
468
+ var checkoutStoryBranch = (story, prefix = "") => {
469
+ const branch = buildStoryBranch(story, prefix);
470
+ debug("checking out git branch: " + branch);
471
+ (0, import_child_process.execSync)(`git checkout ${branch} 2> /dev/null || git checkout -b ${branch}`);
498
472
  };
499
- var fileURL = function (file) { return file.url + "?token=" + config.token; };
500
- exports.default = {
501
- listStories: listStories,
502
- printFormattedStory: printFormattedStory,
503
- printDetailedStory: printDetailedStory,
504
- checkoutStoryBranch: checkoutStoryBranch,
505
- fetchEntities: fetchEntities,
506
- hydrateStory: hydrateStory,
507
- findProject: findProject,
508
- findGroup: findGroup,
509
- findState: findState,
510
- findEpic: findEpic,
511
- findIteration: findIteration,
512
- findOwnerIds: findOwnerIds,
513
- findLabelNames: findLabelNames,
514
- fileURL: fileURL,
515
- storyURL: storyURL,
516
- buildURL: buildURL,
473
+ var fileURL = (file) => `${file.url}?token=${config2.token}`;
474
+ var stories_default = {
475
+ listStories,
476
+ printFormattedStory,
477
+ printDetailedStory,
478
+ checkoutStoryBranch,
479
+ fetchEntities,
480
+ hydrateStory,
481
+ findProject,
482
+ findGroup,
483
+ findState,
484
+ findEpic,
485
+ findIteration,
486
+ findOwnerIds,
487
+ findLabelNames,
488
+ fileURL,
489
+ storyURL,
490
+ buildURL
517
491
  };
518
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rvcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3Rvcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUF5QztBQUV6QyxtQ0FBOEI7QUFFOUIsK0JBQTBCO0FBRTFCLCtDQUF5QztBQUV6QywrQkFBOEI7QUFpQjlCLElBQU0sS0FBSyxHQUFHLElBQUEsZUFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLElBQU0sTUFBTSxHQUFHLElBQUEsc0JBQVUsR0FBRSxDQUFDO0FBQzVCLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUE2QnhCLFNBQWUsYUFBYTs7Ozs7d0JBU3BCLFdBQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQzt3QkFDbEIsZ0JBQU07NkJBQ0QsWUFBWSxFQUFFOzZCQUNkLElBQUksQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLEVBQU4sQ0FBTSxDQUFDOzZCQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDO3dCQUN0QixnQkFBTTs2QkFDRCxhQUFhLEVBQUU7NkJBQ2YsSUFBSSxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLElBQUksRUFBTixDQUFNLENBQUM7NkJBQ25CLElBQUksQ0FBQyxVQUFDLEdBQWUsSUFBSyxPQUFBLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBQyxNQUFNLEVBQUUsRUFBRSxJQUFLLE9BQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQXhCLENBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQXhELENBQXdELENBQUM7NkJBQ25GLElBQUksQ0FBQyxXQUFXLENBQUM7d0JBQ3RCLGdCQUFNOzZCQUNELFdBQVcsQ0FBQyxJQUFJLENBQUM7NkJBQ2pCLElB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