@itznexus/itznexus-cli 1.69.0 → 1.70.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.
- package/dist/commands/api/shorts-create.d.ts +8 -1
- package/dist/commands/api/shorts-create.js +27 -0
- package/dist/commands/api/shorts-create.js.map +1 -1
- package/dist/commands/api/shorts-prepare.js +2 -3
- package/dist/commands/api/shorts-prepare.js.map +1 -1
- package/dist/commands/api/shorts-publish.js +3 -3
- package/dist/commands/api/shorts-publish.js.map +1 -1
- package/dist/lib/short-productions.d.ts +17 -8
- package/dist/lib/short-productions.js +35 -13
- package/dist/lib/short-productions.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,eAAe,
|
|
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 {
|
|
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 =
|
|
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":"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;
|
|
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 {
|
|
7
|
-
import { collectPlatform,
|
|
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 =
|
|
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":"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;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"shorts-publish.js","sourceRoot":"","sources":["../../../src/commands/api/shorts-publish.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
|
|
17
|
-
* `## <section>` heading's
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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):
|
|
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
|
|
37
|
-
* `## <section>` heading's
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
-
|
|
69
|
+
const trimmed = line.trim();
|
|
70
|
+
if (trimmed === "") {
|
|
71
|
+
inNote = false;
|
|
72
|
+
lines.push(line);
|
|
63
73
|
continue;
|
|
64
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAG3E,yEAAyE;AACzE,mCAAmC;AACnC,MAAM,iBAAiB,GAAkC;IACvD,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,WAAW;IAC9B,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAkC;IACnE,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,mBAAmB;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"short-productions.js","sourceRoot":"","sources":["../../src/lib/short-productions.ts"],"names":[],"mappings":"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"}
|