@itznexus/itznexus-cli 1.69.0 → 1.70.1

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,5 +1,5 @@
1
1
  import { Command } from "commander";
2
- import { type ShortPlatform } from "../../lib/short-productions.js";
2
+ import { type ShortPlatform, type ShortProduction } from "../../lib/short-productions.js";
3
3
  import { type Short } from "../../lib/shorts.js";
4
4
  export declare function collectPlatform(value: string, previous: ShortPlatform[]): ShortPlatform[];
5
5
  /**
@@ -8,4 +8,11 @@ export declare function collectPlatform(value: string, previous: ShortPlatform[]
8
8
  * or refresh the short. No platform involved: publishing is a separate step.
9
9
  */
10
10
  export declare function uploadShort(slug: string, quiet: boolean): Promise<Short>;
11
+ /**
12
+ * Resolve the short for prepare/publish: reuse the existing draft or upload
13
+ * a fresh one. When POST.md's title changed since the last upload, re-upsert
14
+ * the short with its existing file ids (the /shorts upsert swaps title
15
+ * without touching publications) so the title stays in sync file-free.
16
+ */
17
+ export declare function ensureShort(slug: string, production: ShortProduction, quiet: boolean): Promise<Short>;
11
18
  export declare const createCommand: Command;
@@ -5,6 +5,7 @@ import { api } from "../../lib/api.js";
5
5
  import { handleError } from "../../lib/format.js";
6
6
  import { uploadLocalFile } from "./files.js";
7
7
  import { SHORT_PLATFORMS, resolveShortProduction, } from "../../lib/short-productions.js";
8
+ import { getShort } from "../../lib/shorts.js";
8
9
  export function collectPlatform(value, previous) {
9
10
  if (!SHORT_PLATFORMS.includes(value)) {
10
11
  throw new Error(`Unknown platform "${value}". Use ${SHORT_PLATFORMS.join(" or ")}.`);
@@ -30,10 +31,36 @@ export async function uploadShort(slug, quiet) {
30
31
  srtFileId = (await uploadLocalFile(production.srtPath)).id;
31
32
  }
32
33
  const payload = { slug, videoFileId: video.id };
34
+ if (production.title)
35
+ payload.title = production.title;
33
36
  if (srtFileId)
34
37
  payload.srtFileId = srtFileId;
35
38
  return api.post("/shorts", payload);
36
39
  }
40
+ /**
41
+ * Resolve the short for prepare/publish: reuse the existing draft or upload
42
+ * a fresh one. When POST.md's title changed since the last upload, re-upsert
43
+ * the short with its existing file ids (the /shorts upsert swaps title
44
+ * without touching publications) so the title stays in sync file-free.
45
+ */
46
+ export async function ensureShort(slug, production, quiet) {
47
+ const existing = await getShort(slug);
48
+ if (!existing)
49
+ return uploadShort(slug, quiet);
50
+ if (!production.title ||
51
+ existing.title === production.title ||
52
+ !existing.videoFileId) {
53
+ return existing;
54
+ }
55
+ const payload = {
56
+ slug,
57
+ title: production.title,
58
+ videoFileId: existing.videoFileId,
59
+ };
60
+ if (existing.srtFileId)
61
+ payload.srtFileId = existing.srtFileId;
62
+ return api.post("/shorts", payload);
63
+ }
37
64
  export const createCommand = new Command("create")
38
65
  .description("Create (or refresh) a short draft: upload the final video (and .srt) from productions/<slug>/, without publishing anywhere")
39
66
  .argument("<slug>", "Production slug (folder name under productions/)")
@@ -1 +1 @@
1
- {"version":3,"file":"shorts-create.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shorts-create.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-create.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,7 @@ import chalk from "chalk";
3
3
  import { api } from "../../lib/api.js";
4
4
  import { printList, handleError } from "../../lib/format.js";
5
5
  import { PLATFORM_SECTION_NAMES, SHORT_PLATFORMS, resolveShortProduction, } from "../../lib/short-productions.js";
6
- import { getShort } from "../../lib/shorts.js";
7
- import { collectPlatform, uploadShort } from "./shorts-create.js";
6
+ import { collectPlatform, ensureShort } from "./shorts-create.js";
8
7
  const ARMABLE = new Set(["draft", "pending", "failed"]);
9
8
  export const prepareCommand = new Command("prepare")
10
9
  .description("Prepare a short for review: create the draft from productions/<slug>/ if missing (uploading files as needed) and arm each platform publication with its POST.md caption, without publishing anywhere")
@@ -21,7 +20,7 @@ export const prepareCommand = new Command("prepare")
21
20
  throw new Error(`POST.md has no "${PLATFORM_SECTION_NAMES[platform]}" section (needed for ${platform})`);
22
21
  }
23
22
  }
24
- const short = (await getShort(slug)) ?? (await uploadShort(slug, quiet));
23
+ const short = await ensureShort(slug, production, quiet);
25
24
  const armed = [];
26
25
  for (const platform of platforms) {
27
26
  const existing = short.publications.find((p) => p.platform === platform);
@@ -1 +1 @@
1
- {"version":3,"file":"shorts-prepare.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-prepare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shorts-prepare.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,sBAAsB,EACtB,eAAe,EAEf,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CACV,sMAAsM,CACvM;KACA,QAAQ,CAAC,QAAQ,EAAE,kDAAkD,CAAC;KACtE,MAAM,CACL,uBAAuB,EACvB,4EAA4E,EAC5E,eAAe,EACf,EAAqB,CACtB;KACA,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC;KACzD,MAAM,CACL,KAAK,EACH,IAAY,EACZ,IAAmD,EACnD,EAAE;IACF,IAAI,CAAC;QACH,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAEjC,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,mBAAmB,sBAAsB,CAAC,QAAQ,CAAC,yBAAyB,QAAQ,GAAG,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC/B,CAAC;YACF,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,KAAK,QAAQ,aAAa,QAAQ,CAAC,MAAM,YAAY,CACtD,CACF,CAAC;gBACJ,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CACR,MAAM,GAAG,CAAC,IAAI,CAAmB,WAAW,IAAI,eAAe,EAAE;gBAC/D,QAAQ;gBACR,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACvC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,SAAS,CACP,KAA6C,EAC7C;YACE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;YACjD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7C,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;SACtC,EACD,EAAE,CACH,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAChB,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CACrE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC,CACF,CAAC"}
@@ -3,8 +3,8 @@ import chalk from "chalk";
3
3
  import { api } from "../../lib/api.js";
4
4
  import { printList, handleError } from "../../lib/format.js";
5
5
  import { PLATFORM_SECTION_NAMES, SHORT_PLATFORMS, resolveShortProduction, } from "../../lib/short-productions.js";
6
- import { getShort, pollPublications, } from "../../lib/shorts.js";
7
- import { collectPlatform, uploadShort } from "./shorts-create.js";
6
+ import { pollPublications } from "../../lib/shorts.js";
7
+ import { collectPlatform, ensureShort } from "./shorts-create.js";
8
8
  const ARMABLE = new Set(["draft", "pending", "failed"]);
9
9
  export const publishCommand = new Command("publish")
10
10
  .description("Send a short: create the draft from productions/<slug>/ if missing (uploading files as needed), arm each platform publication with its POST.md caption, queue publishing, then poll until each one lands")
@@ -21,7 +21,7 @@ export const publishCommand = new Command("publish")
21
21
  throw new Error(`POST.md has no "${PLATFORM_SECTION_NAMES[platform]}" section (needed for ${platform})`);
22
22
  }
23
23
  }
24
- const short = (await getShort(slug)) ?? (await uploadShort(slug, quiet));
24
+ const short = await ensureShort(slug, production, quiet);
25
25
  const tracked = [];
26
26
  for (const platform of platforms) {
27
27
  const existing = short.publications.find((p) => p.platform === platform);
@@ -1 +1 @@
1
- {"version":3,"file":"shorts-publish.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shorts-publish.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-publish.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,11 @@ export declare const UPDATED_EXIT_CODE = 75;
2
2
  /**
3
3
  * Check for updates and auto-install if a newer version is available.
4
4
  * Skips entirely in dev mode (npm link) or if checked recently.
5
- * After a successful update the process EXITS (code 75) without running
6
- * the command: the loaded code is stale and continuing on a swapped-out
7
- * install breaks in unpredictable ways. The caller re-runs the command.
5
+ * After a successful update this process cannot continue: its loaded code
6
+ * is stale and running on a swapped-out install breaks in unpredictable
7
+ * ways. So the command is re-executed in a fresh process and we exit with
8
+ * the child's code, which keeps the update invisible to callers. Only when
9
+ * the re-exec itself fails do we fall back to exit 75 ("updated, re-run").
8
10
  * A failed update check or install stays silent and never blocks.
9
11
  */
10
12
  export declare function checkForUpdates(): void;
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import os from "node:os";
4
- import { execSync } from "node:child_process";
4
+ import { execSync, spawnSync } from "node:child_process";
5
5
  import { fileURLToPath } from "node:url";
6
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
7
  const PKG_ROOT = path.resolve(__dirname, "..", "..");
@@ -67,21 +67,39 @@ function performUpdate() {
67
67
  return false;
68
68
  }
69
69
  }
70
- // Exit code after a successful self-update: the command did NOT run and
71
- // must be re-run. Distinct from 1 so callers can treat it as "retry".
70
+ // Exit code when a self-update happened but the command could not be
71
+ // re-executed: it did NOT run and must be re-run. Distinct from 1 so
72
+ // callers can treat it as "retry" rather than a real failure.
72
73
  export const UPDATED_EXIT_CODE = 75;
74
+ // Set on the re-executed child so it never re-enters the update path.
75
+ const SKIP_ENV = "ITZNEXUS_SKIP_UPDATE";
76
+ /**
77
+ * Re-run the current invocation in a fresh process, which loads the freshly
78
+ * installed code. Returns the child's exit code, or null when it could not
79
+ * be spawned or died on a signal.
80
+ */
81
+ function reExec() {
82
+ const result = spawnSync(process.execPath, [process.argv[1], ...process.argv.slice(2)], { stdio: "inherit", env: { ...process.env, [SKIP_ENV]: "1" } });
83
+ if (result.error || result.status === null)
84
+ return null;
85
+ return result.status;
86
+ }
73
87
  /**
74
88
  * Check for updates and auto-install if a newer version is available.
75
89
  * Skips entirely in dev mode (npm link) or if checked recently.
76
- * After a successful update the process EXITS (code 75) without running
77
- * the command: the loaded code is stale and continuing on a swapped-out
78
- * install breaks in unpredictable ways. The caller re-runs the command.
90
+ * After a successful update this process cannot continue: its loaded code
91
+ * is stale and running on a swapped-out install breaks in unpredictable
92
+ * ways. So the command is re-executed in a fresh process and we exit with
93
+ * the child's code, which keeps the update invisible to callers. Only when
94
+ * the re-exec itself fails do we fall back to exit 75 ("updated, re-run").
79
95
  * A failed update check or install stays silent and never blocks.
80
96
  */
81
97
  export function checkForUpdates() {
82
98
  try {
83
99
  if (isDevMode())
84
100
  return;
101
+ if (process.env[SKIP_ENV])
102
+ return;
85
103
  const lastCheck = getLastCheckTime();
86
104
  if (Date.now() - lastCheck < CHECK_INTERVAL_MS)
87
105
  return;
@@ -90,12 +108,12 @@ export function checkForUpdates() {
90
108
  const latest = getLatestVersion();
91
109
  if (!latest || latest === installed)
92
110
  return;
93
- const updated = performUpdate();
94
- if (updated) {
95
- // Informational, not an error: stdout, and callers key off exit 75.
96
- console.log(`[itznexus] Updated ${installed} -> ${latest}. Re-run the command.`);
97
- process.exit(UPDATED_EXIT_CODE);
98
- }
111
+ if (!performUpdate())
112
+ return;
113
+ // stderr: stdout belongs to the command's own output (--json parsers).
114
+ console.error(`[itznexus] Updated ${installed} -> ${latest}.`);
115
+ const code = reExec();
116
+ process.exit(code === null ? UPDATED_EXIT_CODE : code);
99
117
  }
100
118
  catch {
101
119
  // Never let update logic break the CLI
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,11 @@ export type ShortProduction = {
5
5
  dir: string;
6
6
  videoPath: string;
7
7
  srtPath: string | null;
8
+ title: string | null;
9
+ captions: Partial<Record<ShortPlatform, string>>;
10
+ };
11
+ export type ParsedPost = {
12
+ title: string | null;
8
13
  captions: Partial<Record<ShortPlatform, string>>;
9
14
  };
10
15
  /**
@@ -13,15 +18,19 @@ export type ShortProduction = {
13
18
  */
14
19
  export declare function findProductionsRoot(startDir: string): string | null;
15
20
  /**
16
- * Parse a POST.md posting kit into per-platform captions. Each recognized
17
- * `## <section>` heading's full text becomes that platform's caption, minus
18
- * lines starting with "Note :" or "Note:", trimmed of blank edges. Anything
19
- * before the first heading (e.g. the Cover title line) is ignored. Captions
20
- * are posted as plain text, so POST.md markdown decoration is dropped:
21
- * `---` separator lines are skipped and backtick-wrapped lines (the hashtag
22
- * rows) are unwrapped.
21
+ * Parse a POST.md posting kit into the production title and per-platform
22
+ * captions. Each recognized `## <section>` heading's text becomes that
23
+ * platform's caption. Captions publish as plain text, exactly as written,
24
+ * so POST.md structure is dropped on the way:
25
+ * - a `Titre :` / `Title:` line becomes the production title (first wins)
26
+ * and never appears in a caption;
27
+ * - a leading `Description :` label is stripped, its text kept;
28
+ * - note paragraphs (starting `Note :` or `_`, until a blank line) and
29
+ * `---` separators are skipped;
30
+ * - backtick-wrapped lines (the hashtag rows) are unwrapped.
31
+ * Anything before the first heading (e.g. the Cover title line) is ignored.
23
32
  */
24
- export declare function parsePostCaptions(markdown: string): Partial<Record<ShortPlatform, string>>;
33
+ export declare function parsePostCaptions(markdown: string): ParsedPost;
25
34
  /**
26
35
  * Resolve a production folder from any working directory inside the
27
36
  * short-productions tree: locate `productions/<slug>/`, require the final
@@ -33,18 +33,24 @@ export function findProductionsRoot(startDir) {
33
33
  }
34
34
  }
35
35
  /**
36
- * Parse a POST.md posting kit into per-platform captions. Each recognized
37
- * `## <section>` heading's full text becomes that platform's caption, minus
38
- * lines starting with "Note :" or "Note:", trimmed of blank edges. Anything
39
- * before the first heading (e.g. the Cover title line) is ignored. Captions
40
- * are posted as plain text, so POST.md markdown decoration is dropped:
41
- * `---` separator lines are skipped and backtick-wrapped lines (the hashtag
42
- * rows) are unwrapped.
36
+ * Parse a POST.md posting kit into the production title and per-platform
37
+ * captions. Each recognized `## <section>` heading's text becomes that
38
+ * platform's caption. Captions publish as plain text, exactly as written,
39
+ * so POST.md structure is dropped on the way:
40
+ * - a `Titre :` / `Title:` line becomes the production title (first wins)
41
+ * and never appears in a caption;
42
+ * - a leading `Description :` label is stripped, its text kept;
43
+ * - note paragraphs (starting `Note :` or `_`, until a blank line) and
44
+ * `---` separators are skipped;
45
+ * - backtick-wrapped lines (the hashtag rows) are unwrapped.
46
+ * Anything before the first heading (e.g. the Cover title line) is ignored.
43
47
  */
44
48
  export function parsePostCaptions(markdown) {
45
49
  const captions = {};
50
+ let title = null;
46
51
  let current = null;
47
52
  let lines = [];
53
+ let inNote = false;
48
54
  const flush = () => {
49
55
  if (current)
50
56
  captions[current] = lines.join("\n").trim();
@@ -54,19 +60,35 @@ export function parsePostCaptions(markdown) {
54
60
  const heading = line.match(/^##\s+(.+?)\s*$/);
55
61
  if (heading) {
56
62
  flush();
63
+ inNote = false;
57
64
  current = SECTION_PLATFORMS[heading[1].toLowerCase()] ?? null;
58
65
  continue;
59
66
  }
60
67
  if (!current)
61
68
  continue;
62
- if (line.startsWith("Note :") || line.startsWith("Note:"))
69
+ const trimmed = line.trim();
70
+ if (trimmed === "") {
71
+ inNote = false;
72
+ lines.push(line);
63
73
  continue;
64
- if (/^-{3,}\s*$/.test(line.trim()))
74
+ }
75
+ if (inNote)
76
+ continue;
77
+ if (/^Note\s*:/.test(trimmed) || trimmed.startsWith("_")) {
78
+ inNote = true;
79
+ continue;
80
+ }
81
+ if (/^-{3,}$/.test(trimmed))
82
+ continue;
83
+ const titled = trimmed.match(/^(?:Titre|Title)\s*:\s*(.+)$/);
84
+ if (titled) {
85
+ title ??= titled[1];
65
86
  continue;
66
- lines.push(unwrapInlineCode(line));
87
+ }
88
+ lines.push(unwrapInlineCode(line.replace(/^Description\s*:\s*/, "")));
67
89
  }
68
90
  flush();
69
- return captions;
91
+ return { title, captions };
70
92
  }
71
93
  function unwrapInlineCode(line) {
72
94
  const trimmed = line.trim();
@@ -97,9 +119,9 @@ export function resolveShortProduction(slug, cwd) {
97
119
  if (!fs.existsSync(postPath)) {
98
120
  throw new Error(`POST.md not found: ${postPath}`);
99
121
  }
100
- const captions = parsePostCaptions(fs.readFileSync(postPath, "utf-8"));
122
+ const { title, captions } = parsePostCaptions(fs.readFileSync(postPath, "utf-8"));
101
123
  const srtCandidate = path.join(dir, `${slug}.srt`);
102
124
  const srtPath = fs.existsSync(srtCandidate) ? srtCandidate : null;
103
- return { dir, videoPath, srtPath, captions };
125
+ return { dir, videoPath, srtPath, title, captions };
104
126
  }
105
127
  //# sourceMappingURL=short-productions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"short-productions.js","sourceRoot":"","sources":["../../src/lib/short-productions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"short-productions.js","sourceRoot":"","sources":["../../src/lib/short-productions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itznexus/itznexus-cli",
3
- "version": "1.69.0",
3
+ "version": "1.70.1",
4
4
  "description": "ITzNexus CLI: operational commands for ITzWorking",
5
5
  "type": "module",
6
6
  "publishConfig": {