cross-seed 6.0.0-8 → 6.0.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.
Files changed (70) hide show
  1. package/dist/action.js +177 -71
  2. package/dist/action.js.map +1 -1
  3. package/dist/arr.js +62 -54
  4. package/dist/arr.js.map +1 -1
  5. package/dist/clients/Deluge.js +70 -46
  6. package/dist/clients/Deluge.js.map +1 -1
  7. package/dist/clients/QBittorrent.js +110 -68
  8. package/dist/clients/QBittorrent.js.map +1 -1
  9. package/dist/clients/RTorrent.js +46 -23
  10. package/dist/clients/RTorrent.js.map +1 -1
  11. package/dist/clients/TorrentClient.js +14 -1
  12. package/dist/clients/TorrentClient.js.map +1 -1
  13. package/dist/clients/Transmission.js +30 -10
  14. package/dist/clients/Transmission.js.map +1 -1
  15. package/dist/cmd.js +46 -23
  16. package/dist/cmd.js.map +1 -1
  17. package/dist/config.template.cjs +59 -59
  18. package/dist/config.template.cjs.map +1 -1
  19. package/dist/configSchema.js +90 -26
  20. package/dist/configSchema.js.map +1 -1
  21. package/dist/configuration.js +4 -1
  22. package/dist/configuration.js.map +1 -1
  23. package/dist/constants.js +77 -9
  24. package/dist/constants.js.map +1 -1
  25. package/dist/dataFiles.js +4 -5
  26. package/dist/dataFiles.js.map +1 -1
  27. package/dist/db.js +2 -1
  28. package/dist/db.js.map +1 -1
  29. package/dist/decide.js +279 -169
  30. package/dist/decide.js.map +1 -1
  31. package/dist/diff.js +13 -3
  32. package/dist/diff.js.map +1 -1
  33. package/dist/errors.js.map +1 -1
  34. package/dist/indexers.js +94 -33
  35. package/dist/indexers.js.map +1 -1
  36. package/dist/inject.js +448 -0
  37. package/dist/inject.js.map +1 -0
  38. package/dist/jobs.js +13 -6
  39. package/dist/jobs.js.map +1 -1
  40. package/dist/logger.js +27 -9
  41. package/dist/logger.js.map +1 -1
  42. package/dist/migrations/00-initialSchema.js.map +1 -1
  43. package/dist/migrations/05-caps.js.map +1 -1
  44. package/dist/migrations/06-uniqueDecisions.js +29 -0
  45. package/dist/migrations/06-uniqueDecisions.js.map +1 -0
  46. package/dist/migrations/07-limits.js +12 -0
  47. package/dist/migrations/07-limits.js.map +1 -0
  48. package/dist/migrations/migrations.js +4 -0
  49. package/dist/migrations/migrations.js.map +1 -1
  50. package/dist/parseTorrent.js +6 -0
  51. package/dist/parseTorrent.js.map +1 -1
  52. package/dist/pipeline.js +224 -112
  53. package/dist/pipeline.js.map +1 -1
  54. package/dist/preFilter.js +122 -55
  55. package/dist/preFilter.js.map +1 -1
  56. package/dist/pushNotifier.js +7 -5
  57. package/dist/pushNotifier.js.map +1 -1
  58. package/dist/searchee.js +198 -17
  59. package/dist/searchee.js.map +1 -1
  60. package/dist/server.js +106 -54
  61. package/dist/server.js.map +1 -1
  62. package/dist/startup.js +16 -7
  63. package/dist/startup.js.map +1 -1
  64. package/dist/torrent.js +116 -50
  65. package/dist/torrent.js.map +1 -1
  66. package/dist/torznab.js +323 -153
  67. package/dist/torznab.js.map +1 -1
  68. package/dist/utils.js +229 -44
  69. package/dist/utils.js.map +1 -1
  70. package/package.json +11 -6
package/dist/action.js CHANGED
@@ -1,66 +1,93 @@
1
1
  import chalk from "chalk";
2
- import { existsSync, linkSync, mkdirSync, statSync, symlinkSync } from "fs";
2
+ import { existsSync, linkSync, lstatSync, mkdirSync, readlinkSync, rmSync, statSync, symlinkSync, } from "fs";
3
3
  import { dirname, join, resolve } from "path";
4
4
  import { getClient } from "./clients/TorrentClient.js";
5
5
  import { Action, Decision, InjectionResult, LinkType, SaveResult, } from "./constants.js";
6
- import { logger } from "./logger.js";
6
+ import { Label, logger } from "./logger.js";
7
7
  import { resultOf, resultOfErr } from "./Result.js";
8
8
  import { getRuntimeConfig } from "./runtimeConfig.js";
9
+ import { createSearcheeFromPath, getSearcheeSource, } from "./searchee.js";
9
10
  import { saveTorrentFile } from "./torrent.js";
10
- import { getMediaType } from "./utils.js";
11
- function logInjectionResult(result, tracker, name, decision) {
12
- const styledName = chalk.green.bold(name);
13
- const styledTracker = chalk.bold(tracker);
14
- const foundBy = `Found ${styledName} on ${styledTracker} by`;
11
+ import { getLogString, getMediaType } from "./utils.js";
12
+ function logActionResult(result, newMeta, searchee, tracker, decision) {
13
+ const metaLog = getLogString(newMeta, chalk.green.bold);
14
+ const searcheeLog = getLogString(searchee, chalk.magenta.bold);
15
+ const source = `${getSearcheeSource(searchee)} (${searcheeLog})`;
16
+ const foundBy = `Found ${metaLog} on ${chalk.bold(tracker)} by`;
17
+ let infoOrVerbose = logger.info;
18
+ let warnOrVerbose = logger.warn;
19
+ if (searchee.label === Label.INJECT) {
20
+ infoOrVerbose = logger.verbose;
21
+ warnOrVerbose = logger.verbose;
22
+ }
15
23
  switch (result) {
24
+ case SaveResult.SAVED:
25
+ infoOrVerbose({
26
+ label: searchee.label,
27
+ message: `${foundBy} ${chalk.green.bold(decision)} from ${source} - saved`,
28
+ });
29
+ break;
16
30
  case InjectionResult.SUCCESS:
17
- logger.info(`${foundBy} ${chalk.green.bold(decision)} - injected`);
31
+ infoOrVerbose({
32
+ label: searchee.label,
33
+ message: `${foundBy} ${chalk.green.bold(decision)} from ${source} - injected`,
34
+ });
18
35
  break;
19
36
  case InjectionResult.ALREADY_EXISTS:
20
- logger.info(`${foundBy} ${chalk.yellow(decision)} - exists`);
37
+ infoOrVerbose({
38
+ label: searchee.label,
39
+ message: `${foundBy} ${chalk.yellow(decision)} from ${source} - exists`,
40
+ });
21
41
  break;
22
42
  case InjectionResult.TORRENT_NOT_COMPLETE:
23
- logger.warn(`${foundBy} by ${chalk.yellow(decision)} - skipping incomplete torrent`);
43
+ warnOrVerbose({
44
+ label: searchee.label,
45
+ message: `${foundBy} ${chalk.yellow(decision)} from ${source} - incomplete torrent, saving...`,
46
+ });
24
47
  break;
25
48
  case InjectionResult.FAILURE:
26
49
  default:
27
- logger.error(`${foundBy} ${chalk.red(decision)} - failed to inject, saving...`);
50
+ logger.error({
51
+ label: searchee.label,
52
+ message: `${foundBy} ${chalk.red(decision)} from ${source} - failed to inject, saving...`,
53
+ });
28
54
  break;
29
55
  }
30
56
  }
31
57
  /**
32
58
  * @return the root of linked files.
33
59
  */
34
- function linkExactTree(searchee, newMeta, destinationDir, sourceRoot) {
35
- if (searchee.files.length === 1) {
36
- return fuzzyLinkOneFile(searchee, newMeta, destinationDir, sourceRoot);
37
- }
60
+ function linkExactTree(newMeta, destinationDir, sourceRoot, options) {
61
+ let alreadyExisted = false;
62
+ let linkedNewFiles = false;
38
63
  for (const newFile of newMeta.files) {
39
- const srcFilePath = join(dirname(sourceRoot), newFile.path);
64
+ const srcFilePath = statSync(sourceRoot).isFile()
65
+ ? sourceRoot
66
+ : join(dirname(sourceRoot), newFile.path);
40
67
  const destFilePath = join(destinationDir, newFile.path);
68
+ if (existsSync(destFilePath)) {
69
+ alreadyExisted = true;
70
+ continue;
71
+ }
72
+ if (options.ignoreMissing && !existsSync(srcFilePath))
73
+ continue;
41
74
  mkdirSync(dirname(destFilePath), { recursive: true });
42
- linkFile(srcFilePath, destFilePath);
75
+ if (linkFile(srcFilePath, destFilePath)) {
76
+ linkedNewFiles = true;
77
+ }
43
78
  }
44
- return join(destinationDir, newMeta.name);
45
- }
46
- /**
47
- * @return the root of linked file.
48
- */
49
- function fuzzyLinkOneFile(searchee, newMeta, destinationDir, sourceRoot) {
50
- const srcFilePath = statSync(sourceRoot).isFile()
51
- ? sourceRoot
52
- : join(dirname(sourceRoot), searchee.files[0].path);
53
- const destFilePath = join(destinationDir, newMeta.files[0].path);
54
- mkdirSync(dirname(destFilePath), { recursive: true });
55
- linkFile(srcFilePath, destFilePath);
56
- return join(destinationDir, newMeta.name);
79
+ const contentPath = join(destinationDir, newMeta.name);
80
+ return { contentPath, alreadyExisted, linkedNewFiles };
57
81
  }
58
82
  /**
59
83
  * @return the root of linked files.
60
84
  */
61
- function fuzzyLinkPartial(searchee, newMeta, destinationDir, sourceRoot) {
85
+ function linkFuzzyTree(searchee, newMeta, destinationDir, sourceRoot, options) {
86
+ let alreadyExisted = false;
87
+ let linkedNewFiles = false;
88
+ const availableFiles = searchee.files.slice();
62
89
  for (const newFile of newMeta.files) {
63
- let matchedSearcheeFiles = searchee.files.filter((searcheeFile) => searcheeFile.length === newFile.length);
90
+ let matchedSearcheeFiles = availableFiles.filter((searcheeFile) => searcheeFile.length === newFile.length);
64
91
  if (matchedSearcheeFiles.length > 1) {
65
92
  matchedSearcheeFiles = matchedSearcheeFiles.filter((searcheeFile) => searcheeFile.name === newFile.name);
66
93
  }
@@ -69,21 +96,71 @@ function fuzzyLinkPartial(searchee, newMeta, destinationDir, sourceRoot) {
69
96
  ? sourceRoot
70
97
  : join(dirname(sourceRoot), matchedSearcheeFiles[0].path);
71
98
  const destFilePath = join(destinationDir, newFile.path);
99
+ const index = availableFiles.indexOf(matchedSearcheeFiles[0]);
100
+ availableFiles.splice(index, 1);
101
+ if (existsSync(destFilePath)) {
102
+ alreadyExisted = true;
103
+ continue;
104
+ }
105
+ if (options.ignoreMissing && !existsSync(srcFilePath))
106
+ continue;
72
107
  mkdirSync(dirname(destFilePath), { recursive: true });
73
- linkFile(srcFilePath, destFilePath);
108
+ if (linkFile(srcFilePath, destFilePath)) {
109
+ linkedNewFiles = true;
110
+ }
74
111
  }
75
112
  }
76
- return join(destinationDir, newMeta.name);
113
+ const contentPath = join(destinationDir, newMeta.name);
114
+ return { contentPath, alreadyExisted, linkedNewFiles };
115
+ }
116
+ function unlinkMetafile(meta, destinationDir) {
117
+ const file = meta.files[0];
118
+ let rootFolder = file.path;
119
+ let parent = dirname(rootFolder);
120
+ while (parent !== ".") {
121
+ rootFolder = parent;
122
+ parent = dirname(rootFolder);
123
+ }
124
+ const fullPath = join(destinationDir, rootFolder);
125
+ if (!existsSync(fullPath))
126
+ return;
127
+ if (resolve(fullPath) === resolve(destinationDir))
128
+ return;
129
+ logger.verbose(`Unlinking ${fullPath}`);
130
+ rmSync(fullPath, { recursive: true });
77
131
  }
78
- async function linkAllFilesInMetafile(searchee, newMeta, tracker, decision) {
132
+ export async function linkAllFilesInMetafile(searchee, newMeta, tracker, decision, options) {
79
133
  const { linkDir, flatLinking } = getRuntimeConfig();
80
- const fullLinkDir = flatLinking ? linkDir : join(linkDir, tracker);
134
+ const newMetaClientSavePathRes = await getClient().getDownloadDir(newMeta, {
135
+ onlyCompleted: false,
136
+ });
137
+ const fullLinkDir = newMetaClientSavePathRes.isOk()
138
+ ? newMetaClientSavePathRes.unwrap() // Use existing if ALREADY_EXISTS
139
+ : flatLinking
140
+ ? linkDir
141
+ : join(linkDir, tracker);
81
142
  let sourceRoot;
82
143
  if (searchee.path) {
144
+ if (!existsSync(searchee.path)) {
145
+ logger.error({
146
+ label: searchee.label,
147
+ message: `Linking failed, ${searchee.path} not found. Make sure Docker volume mounts are set up properly.`,
148
+ });
149
+ return resultOfErr("MISSING_DATA");
150
+ }
151
+ const result = await createSearcheeFromPath(searchee.path);
152
+ if (result.isErr()) {
153
+ return resultOfErr("TORRENT_NOT_FOUND");
154
+ }
155
+ const refreshedSearchee = result.unwrap();
156
+ if (options.onlyCompleted &&
157
+ searchee.length !== refreshedSearchee.length) {
158
+ return resultOfErr("TORRENT_NOT_COMPLETE");
159
+ }
83
160
  sourceRoot = searchee.path;
84
161
  }
85
162
  else {
86
- const downloadDirResult = await getClient().getDownloadDir(searchee);
163
+ const downloadDirResult = await getClient().getDownloadDir(searchee, { onlyCompleted: options.onlyCompleted });
87
164
  if (downloadDirResult.isErr()) {
88
165
  return downloadDirResult.mapErr((e) => e === "NOT_FOUND" || e === "UNKNOWN_ERROR"
89
166
  ? "TORRENT_NOT_FOUND"
@@ -92,52 +169,56 @@ async function linkAllFilesInMetafile(searchee, newMeta, tracker, decision) {
92
169
  sourceRoot = join(downloadDirResult.unwrap(), searchee.files.length === 1
93
170
  ? searchee.files[0].path
94
171
  : searchee.name);
95
- }
96
- if (!existsSync(sourceRoot)) {
97
- logger.error(`Linking failed, ${sourceRoot} not found. Make sure Docker volume mounts are set up properly.`);
98
- return resultOfErr("MISSING_DATA");
172
+ if (!existsSync(sourceRoot)) {
173
+ logger.error({
174
+ label: searchee.label,
175
+ message: `Linking failed, ${sourceRoot} not found. Make sure Docker volume mounts are set up properly.`,
176
+ });
177
+ return resultOfErr("MISSING_DATA");
178
+ }
99
179
  }
100
180
  if (decision === Decision.MATCH) {
101
- return resultOf(linkExactTree(searchee, newMeta, fullLinkDir, sourceRoot));
102
- }
103
- else if (decision === Decision.MATCH_SIZE_ONLY) {
104
- return resultOf(fuzzyLinkOneFile(searchee, newMeta, fullLinkDir, sourceRoot));
181
+ return resultOf(linkExactTree(newMeta, fullLinkDir, sourceRoot, {
182
+ ignoreMissing: !options.onlyCompleted,
183
+ }));
105
184
  }
106
185
  else {
107
- return resultOf(fuzzyLinkPartial(searchee, newMeta, fullLinkDir, sourceRoot));
186
+ return resultOf(linkFuzzyTree(searchee, newMeta, fullLinkDir, sourceRoot, {
187
+ ignoreMissing: !options.onlyCompleted,
188
+ }));
108
189
  }
109
190
  }
110
191
  export async function performAction(newMeta, decision, searchee, tracker) {
111
192
  const { action, linkDir } = getRuntimeConfig();
112
193
  if (action === Action.SAVE) {
113
194
  await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
114
- const styledName = chalk.green.bold(newMeta.name);
115
- const styledTracker = chalk.bold(tracker);
116
- logger.info(`Found ${styledName} on ${styledTracker} by ${decision} - saved`);
117
- return SaveResult.SAVED;
195
+ logActionResult(SaveResult.SAVED, newMeta, searchee, tracker, decision);
196
+ return { actionResult: SaveResult.SAVED, linkedNewFiles: false };
118
197
  }
119
198
  let destinationDir;
199
+ let unlinkOk = false;
200
+ let linkedNewFiles = false;
120
201
  if (linkDir) {
121
- const linkedFilesRootResult = await linkAllFilesInMetafile(searchee, newMeta, tracker, decision);
202
+ const linkedFilesRootResult = await linkAllFilesInMetafile(searchee, newMeta, tracker, decision, { onlyCompleted: true });
122
203
  if (linkedFilesRootResult.isOk()) {
123
- destinationDir = dirname(linkedFilesRootResult.unwrap());
124
- }
125
- else if (decision === Decision.MATCH &&
126
- linkedFilesRootResult.unwrapErr() === "MISSING_DATA") {
127
- logger.warn("Falling back to non-linking.");
128
- if (searchee.path) {
129
- destinationDir = dirname(searchee.path);
130
- }
204
+ const linkResult = linkedFilesRootResult.unwrap();
205
+ destinationDir = dirname(linkResult.contentPath);
206
+ unlinkOk = !linkResult.alreadyExisted;
207
+ linkedNewFiles = linkResult.linkedNewFiles;
131
208
  }
132
209
  else {
133
210
  const result = linkedFilesRootResult.unwrapErr();
134
- logger.error(`Failed to link files for ${newMeta.name}: ${result}`);
211
+ const warnOrVerbose = searchee.label !== Label.INJECT ? logger.warn : logger.verbose;
212
+ warnOrVerbose({
213
+ label: searchee.label,
214
+ message: `Failed to link files for ${getLogString(newMeta)}: ${result}`,
215
+ });
135
216
  const injectionResult = result === "TORRENT_NOT_COMPLETE"
136
217
  ? InjectionResult.TORRENT_NOT_COMPLETE
137
218
  : InjectionResult.FAILURE;
138
- logInjectionResult(injectionResult, tracker, newMeta.name, decision);
219
+ logActionResult(injectionResult, newMeta, searchee, tracker, decision);
139
220
  await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
140
- return injectionResult;
221
+ return { actionResult: injectionResult, linkedNewFiles };
141
222
  }
142
223
  }
143
224
  else if (searchee.path) {
@@ -145,18 +226,27 @@ export async function performAction(newMeta, decision, searchee, tracker) {
145
226
  destinationDir = dirname(searchee.path);
146
227
  }
147
228
  const result = await getClient().inject(newMeta, searchee, decision, destinationDir);
148
- logInjectionResult(result, tracker, newMeta.name, decision);
149
- if (result === InjectionResult.FAILURE) {
229
+ logActionResult(result, newMeta, searchee, tracker, decision);
230
+ if (result === InjectionResult.SUCCESS) {
231
+ // For an easy re-injection user workflow when multiple MATCH_PARTIAL
232
+ if (decision === Decision.MATCH_PARTIAL) {
233
+ await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
234
+ }
235
+ }
236
+ else if (result !== InjectionResult.ALREADY_EXISTS) {
150
237
  await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
238
+ if (unlinkOk && destinationDir) {
239
+ unlinkMetafile(newMeta, destinationDir);
240
+ }
151
241
  }
152
- return result;
242
+ return { actionResult: result, linkedNewFiles };
153
243
  }
154
244
  export async function performActions(searchee, matches) {
155
245
  const results = [];
156
246
  for (const { tracker, assessment } of matches) {
157
- const result = await performAction(assessment.metafile, assessment.decision, searchee, tracker);
158
- results.push(result);
159
- if (result === InjectionResult.TORRENT_NOT_COMPLETE)
247
+ const { actionResult } = await performAction(assessment.metafile, assessment.decision, searchee, tracker);
248
+ results.push(actionResult);
249
+ if (actionResult === InjectionResult.TORRENT_NOT_COMPLETE)
160
250
  break;
161
251
  }
162
252
  return results;
@@ -164,19 +254,35 @@ export async function performActions(searchee, matches) {
164
254
  function linkFile(oldPath, newPath) {
165
255
  const { linkType } = getRuntimeConfig();
166
256
  try {
257
+ const ogFileResolvedPath = unwrapSymlinks(oldPath);
167
258
  if (linkType === LinkType.HARDLINK) {
168
- linkSync(oldPath, newPath);
259
+ linkSync(ogFileResolvedPath, newPath);
169
260
  }
170
261
  else {
171
262
  // we need to resolve because symlinks are resolved outside
172
263
  // the context of cross-seed's working directory
173
- symlinkSync(oldPath, resolve(newPath));
264
+ symlinkSync(ogFileResolvedPath, resolve(newPath));
174
265
  }
266
+ return true;
175
267
  }
176
268
  catch (e) {
177
269
  if (e.code === "EEXIST")
178
- return;
270
+ return false;
179
271
  throw e;
180
272
  }
181
273
  }
274
+ /**
275
+ * Recursively resolves symlinks to the original file. Differs from realpath
276
+ * in that it will not resolve directory symlinks in the middle of the path.
277
+ * @param path
278
+ */
279
+ function unwrapSymlinks(path) {
280
+ for (let i = 0; i < 16; i++) {
281
+ if (!lstatSync(path).isSymbolicLink()) {
282
+ return path;
283
+ }
284
+ path = resolve(dirname(path), readlinkSync(path));
285
+ }
286
+ throw new Error(`too many levels of symbolic links at ${path}`);
287
+ }
182
288
  //# sourceMappingURL=action.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACN,MAAM,EAEN,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,UAAU,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS,kBAAkB,CAC1B,MAAuB,EACvB,OAAe,EACf,IAAY,EACZ,QAAkB;IAElB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,UAAU,OAAO,aAAa,KAAK,CAAC;IAE7D,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,eAAe,CAAC,OAAO;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACnE,MAAM;QACP,KAAK,eAAe,CAAC,cAAc;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC7D,MAAM;QACP,KAAK,eAAe,CAAC,oBAAoB;YACxC,MAAM,CAAC,IAAI,CACV,GAAG,OAAO,OAAO,KAAK,CAAC,MAAM,CAC5B,QAAQ,CACR,gCAAgC,CACjC,CAAC;YACF,MAAM;QACP,KAAK,eAAe,CAAC,OAAO,CAAC;QAC7B;YACC,MAAM,CAAC,KAAK,CACX,GAAG,OAAO,IAAI,KAAK,CAAC,GAAG,CACtB,QAAQ,CACR,gCAAgC,CACjC,CAAC;YACF,MAAM;IACR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACrB,QAAkB,EAClB,OAAiB,EACjB,cAAsB,EACtB,UAAkB;IAElB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACxB,QAAkB,EAClB,OAAiB,EACjB,cAAsB,EACtB,UAAkB;IAElB,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QAChD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACxB,QAAkB,EAClB,OAAiB,EACjB,cAAsB,EACtB,UAAkB;IAElB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,oBAAoB,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAC/C,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CACxD,CAAC;QACF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,CACjD,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CACpD,CAAC;QACH,CAAC;QACD,IAAI,oBAAoB,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;gBAChD,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACxD,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,QAAkB,EAClB,OAAiB,EACjB,OAAe,EACf,QAGyB;IAUzB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE,IAAI,UAAkB,CAAC;IACvB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;SAAM,CAAC;QACP,MAAM,iBAAiB,GAAG,MAAM,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,eAAe;gBACzC,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,CAAC,CACJ,CAAC;QACH,CAAC;QACD,UAAU,GAAG,IAAI,CAChB,iBAAiB,CAAC,MAAM,EAAE,EAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YACxB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAChB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CACX,mBAAmB,UAAU,iEAAiE,CAC9F,CAAC;QACF,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,QAAQ,CACd,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CACzD,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,QAAQ,CACd,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,QAAQ,CACd,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAC5D,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,OAAiB,EACjB,QAGyB,EACzB,QAAkB,EAClB,OAAe;IAEf,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE/C,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CACV,SAAS,UAAU,OAAO,aAAa,OAAO,QAAQ,UAAU,CAChE,CAAC;QACF,OAAO,UAAU,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,cAAkC,CAAC;IAEvC,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,qBAAqB,GAAG,MAAM,sBAAsB,CACzD,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,CACR,CAAC;QACF,IAAI,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,IACN,QAAQ,KAAK,QAAQ,CAAC,KAAK;YAC3B,qBAAqB,CAAC,SAAS,EAAE,KAAK,cAAc,EACnD,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC5C,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,eAAe,GACpB,MAAM,KAAK,sBAAsB;gBAChC,CAAC,CAAC,eAAe,CAAC,oBAAoB;gBACtC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC;YAC5B,kBAAkB,CACjB,eAAe,EACf,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,QAAQ,CACR,CAAC;YACF,MAAM,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,eAAe,CAAC;QACxB,CAAC;IACF,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1B,2DAA2D;QAC3D,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,MAAM,CACtC,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,cAAc,CACd,CAAC;IAEF,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,MAAM,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAQ,EAAE,OAAO;IACrD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,CACjC,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,QAAQ,EACnB,QAAQ,EACR,OAAO,CACP,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,MAAM,KAAK,eAAe,CAAC,oBAAoB;YAAE,MAAM;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,OAAe;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACJ,IAAI,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,2DAA2D;YAC3D,gDAAgD;YAChD,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAChC,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
package/dist/arr.js CHANGED
@@ -2,11 +2,18 @@ import chalk from "chalk";
2
2
  import ms from "ms";
3
3
  import { join as posixJoin } from "node:path/posix";
4
4
  import { URLSearchParams } from "node:url";
5
+ import { SCENE_TITLE_REGEX } from "./constants.js";
5
6
  import { CrossSeedError } from "./errors.js";
6
7
  import { Label, logger } from "./logger.js";
7
8
  import { resultOf, resultOfErr } from "./Result.js";
8
9
  import { getRuntimeConfig } from "./runtimeConfig.js";
9
- import { capitalizeFirstLetter, getApikey, getMediaType, isTruthy, MediaType, sanitizeUrl, } from "./utils.js";
10
+ import { cleanseSeparators, getApikey, isTruthy, MediaType, sanitizeUrl, stripMetaFromName, } from "./utils.js";
11
+ export function arrIdsEqual(a, b) {
12
+ return (a?.imdbId === b?.imdbId &&
13
+ a?.tmdbId === b?.tmdbId &&
14
+ a?.tvdbId === b?.tvdbId &&
15
+ a?.tvMazeId === b?.tvMazeId);
16
+ }
10
17
  export async function validateUArrLs() {
11
18
  const { sonarr, radarr } = getRuntimeConfig();
12
19
  if (sonarr) {
@@ -64,12 +71,13 @@ async function makeArrApiCall(uArrL, resourcePath, params = new URLSearchParams(
64
71
  let response;
65
72
  try {
66
73
  response = await fetch(url, {
67
- signal: AbortSignal.timeout(ms("5 seconds")),
74
+ signal: AbortSignal.timeout(ms("30 seconds")),
68
75
  headers: { "X-Api-Key": apikey },
69
76
  });
70
77
  }
71
78
  catch (networkError) {
72
- if (networkError.name === "AbortError") {
79
+ if (networkError.name === "AbortError" ||
80
+ networkError.name === "TimeoutError") {
73
81
  return resultOfErr(new Error("connection timeout"));
74
82
  }
75
83
  return resultOfErr(networkError);
@@ -88,42 +96,25 @@ async function makeArrApiCall(uArrL, resourcePath, params = new URLSearchParams(
88
96
  return resultOfErr(new Error(`Arr response was non-JSON. ${getBodySampleMessage(responseText)}`));
89
97
  }
90
98
  }
91
- async function getExternalIdsFromArr(searchee, uArrL) {
92
- const response = await makeArrApiCall(uArrL, "/api/v3/parse", new URLSearchParams({ title: searchee.name }));
93
- if (response.isOk()) {
94
- const responseBody = response.unwrap();
95
- if ("movie" in responseBody) {
96
- const { tvdbId, tmdbId, imdbId } = responseBody.movie;
97
- return { tvdbId, imdbId, tmdbId };
98
- }
99
- else if ("series" in responseBody) {
100
- const { tvdbId, tmdbId, imdbId } = responseBody.series;
101
- return { tvdbId, imdbId, tmdbId };
102
- }
103
- }
104
- return {};
99
+ async function getMediaFromArr(uArrL, title) {
100
+ return await makeArrApiCall(uArrL, "/api/v3/parse", new URLSearchParams({ title }));
105
101
  }
106
- function formatFoundIds(foundIds) {
102
+ export function formatFoundIds(foundIds) {
107
103
  return Object.entries(foundIds)
108
- .filter(([, idValue]) => idValue)
104
+ .filter(([idName]) => ["imdbid", "tmdbid", "tvdbid", "tvmazeid"].includes(idName.toLowerCase()))
109
105
  .map(([idName, idValue]) => {
110
- const externalProvider = idName.toUpperCase().replace("ID", "");
111
- return `${chalk.yellow(externalProvider)}: ${chalk.white(idValue)}`;
106
+ const name = idName.toUpperCase().replace("ID", "");
107
+ const val = idValue ?? "N/A";
108
+ return `${chalk.yellow(name)}=${chalk.white(val)}`;
112
109
  })
113
110
  .join(" ");
114
111
  }
115
- function logArrQueryResult(externalIds, searchTerm, mediaType, error) {
116
- const mediaTypeStr = mediaType === MediaType.MOVIE ? "movie" : "series";
117
- const label = mediaType === MediaType.MOVIE ? Label.RADARR : Label.SONARR;
112
+ function logArrQueryResult(externalIds, searchTerm, label, error) {
118
113
  if (error) {
119
114
  if (!Object.values(externalIds).some(isTruthy)) {
120
115
  logger.verbose({
121
116
  label: label,
122
- message: `Lookup failed for ${chalk.yellow(searchTerm)}`,
123
- });
124
- logger.verbose({
125
- label: label,
126
- message: `Make sure the ${mediaTypeStr} is added to ${capitalizeFirstLetter(label)}.`,
117
+ message: `Lookup failed for ${chalk.yellow(searchTerm)} - ${chalk.red(error.message)} - make sure the item is added to an Arr instance.`,
127
118
  });
128
119
  return;
129
120
  }
@@ -137,7 +128,7 @@ function logArrQueryResult(externalIds, searchTerm, mediaType, error) {
137
128
  const foundIdsStr = formatFoundIds(externalIds);
138
129
  logger.verbose({
139
130
  label: label,
140
- message: `Found ${mediaTypeStr} for ${chalk.green.bold(searchTerm)} -> ${foundIdsStr}`,
131
+ message: `Found media for ${chalk.green.bold(searchTerm)} -> ${foundIdsStr}`,
141
132
  });
142
133
  }
143
134
  }
@@ -146,44 +137,61 @@ function getRelevantArrInstances(mediaType) {
146
137
  switch (mediaType) {
147
138
  case MediaType.SEASON:
148
139
  case MediaType.EPISODE:
149
- return sonarr ?? [];
140
+ return sonarr;
150
141
  case MediaType.MOVIE:
151
- return radarr ?? [];
142
+ return radarr;
143
+ case MediaType.ANIME:
144
+ case MediaType.VIDEO:
145
+ return [...sonarr, ...radarr];
152
146
  default:
153
147
  return [];
154
148
  }
155
149
  }
156
- export async function scanAllArrsForExternalIds(searchee, mediaType) {
150
+ export async function scanAllArrsForMedia(searcheeTitle, mediaType) {
157
151
  const uArrLs = getRelevantArrInstances(mediaType);
158
- try {
159
- for (const uArrL of uArrLs) {
160
- const externalIds = await getExternalIdsFromArr(searchee, uArrL);
161
- if (Object.values(externalIds).some(isTruthy)) {
162
- logArrQueryResult(externalIds, searchee.name, mediaType);
163
- return resultOf(externalIds);
152
+ if (uArrLs.length === 0) {
153
+ return resultOfErr(false);
154
+ }
155
+ const title = mediaType !== MediaType.VIDEO
156
+ ? searcheeTitle.match(SCENE_TITLE_REGEX).groups.title
157
+ : cleanseSeparators(stripMetaFromName(searcheeTitle));
158
+ let error = new Error(`No ids found for ${title} | MediaType: ${mediaType.toUpperCase()}`);
159
+ for (const uArrL of uArrLs) {
160
+ const name = mediaType === MediaType.VIDEO &&
161
+ getRuntimeConfig().sonarr?.includes(uArrL)
162
+ ? `${title} S00E00` // Sonarr needs season or episode
163
+ : title;
164
+ const result = await getMediaFromArr(uArrL, name);
165
+ if (result.isErr()) {
166
+ error = result.unwrapErr();
167
+ continue;
168
+ }
169
+ const response = result.unwrap();
170
+ const ids = response.movie ?? response.series ?? {};
171
+ for (const [key, value] of Object.entries(ids)) {
172
+ if (value === 0 || value === "0") {
173
+ ids[key] = undefined;
164
174
  }
165
175
  }
166
- throw new Error("fall through to catch");
167
- }
168
- catch (error) {
169
- logArrQueryResult({}, searchee.name, mediaType, error);
170
- return resultOfErr(false);
176
+ if (Object.values(ids).some(isTruthy)) {
177
+ const label = response.movie ? Label.RADARR : Label.SONARR;
178
+ logArrQueryResult(ids, name, label);
179
+ return resultOf(response);
180
+ }
171
181
  }
182
+ logArrQueryResult({}, searcheeTitle, Label.ARRS, error);
183
+ return resultOfErr(false);
172
184
  }
173
- export async function getRelevantArrIds(searchee, ids, caps) {
174
- const mediaType = getMediaType(searchee);
175
- const idSearchCaps = mediaType === MediaType.EPISODE || mediaType === MediaType.SEASON
176
- ? caps.tvIdSearch
177
- : caps.movieIdSearch;
185
+ export async function getRelevantArrIds(caps, parsedMedia) {
186
+ const idSearchCaps = parsedMedia.movie
187
+ ? caps.movieIdSearch
188
+ : caps.tvIdSearch;
189
+ const ids = parsedMedia.movie ?? parsedMedia.series;
178
190
  return {
179
191
  tvdbid: idSearchCaps.tvdbId ? ids.tvdbId : undefined,
180
192
  tmdbid: idSearchCaps.tmdbId ? ids.tmdbId : undefined,
181
193
  imdbid: idSearchCaps.imdbId ? ids.imdbId : undefined,
194
+ tvmazeid: idSearchCaps.tvMazeId ? ids.tvMazeId : undefined,
182
195
  };
183
196
  }
184
- export async function getAvailableArrIds(searchee) {
185
- const mediaType = getMediaType(searchee);
186
- const result = await scanAllArrsForExternalIds(searchee, mediaType);
187
- return result.orElse({});
188
- }
189
197
  //# sourceMappingURL=arr.js.map
package/dist/arr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"arr.js","sourceRoot":"","sources":["../src/arr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arr.js","sourceRoot":"","sources":["../src/arr.ts"],"names":[],"mappings":"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"}