gooseworks 0.5.8 → 0.5.9-dev.56.eca9486d
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/agents/claude-mcp.d.ts +7 -1
- package/dist/agents/claude-mcp.d.ts.map +1 -1
- package/dist/agents/claude-mcp.js +43 -10
- package/dist/agents/claude-mcp.js.map +1 -1
- package/dist/auth/credentials.d.ts +8 -0
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/auth/credentials.js +35 -1
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/device-flow.d.ts +4 -1
- package/dist/auth/device-flow.d.ts.map +1 -1
- package/dist/auth/device-flow.js +8 -3
- package/dist/auth/device-flow.js.map +1 -1
- package/dist/auth/oauth-server.d.ts +9 -1
- package/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +19 -11
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/auth/revoke.d.ts +10 -0
- package/dist/auth/revoke.d.ts.map +1 -0
- package/dist/auth/revoke.js +31 -0
- package/dist/auth/revoke.js.map +1 -0
- package/dist/commands/login.d.ts +15 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +34 -10
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +29 -11
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/video.d.ts +35 -0
- package/dist/commands/video.d.ts.map +1 -1
- package/dist/commands/video.js +475 -39
- package/dist/commands/video.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kit/core/canonical.d.ts +3 -1
- package/dist/kit/core/canonical.d.ts.map +1 -1
- package/dist/kit/core/canonical.js +1 -1
- package/dist/kit/core/canonical.js.map +1 -1
- package/dist/kit/core/check.d.ts +2 -0
- package/dist/kit/core/check.d.ts.map +1 -1
- package/dist/kit/core/check.js +12 -2
- package/dist/kit/core/check.js.map +1 -1
- package/dist/kit/core/detach.d.ts +11 -0
- package/dist/kit/core/detach.d.ts.map +1 -0
- package/dist/kit/core/detach.js +72 -0
- package/dist/kit/core/detach.js.map +1 -0
- package/dist/kit/core/diff.d.ts +5 -0
- package/dist/kit/core/diff.d.ts.map +1 -0
- package/dist/kit/core/diff.js +132 -0
- package/dist/kit/core/diff.js.map +1 -0
- package/dist/kit/core/errors.d.ts +7 -1
- package/dist/kit/core/errors.d.ts.map +1 -1
- package/dist/kit/core/errors.js +11 -1
- package/dist/kit/core/errors.js.map +1 -1
- package/dist/kit/core/eyes.d.ts +80 -0
- package/dist/kit/core/eyes.d.ts.map +1 -0
- package/dist/kit/core/eyes.js +366 -0
- package/dist/kit/core/eyes.js.map +1 -0
- package/dist/kit/core/files.js +2 -2
- package/dist/kit/core/files.js.map +1 -1
- package/dist/kit/core/lock.d.ts +4 -0
- package/dist/kit/core/lock.d.ts.map +1 -0
- package/dist/kit/core/lock.js +13 -0
- package/dist/kit/core/lock.js.map +1 -0
- package/dist/kit/core/log.d.ts +38 -2
- package/dist/kit/core/log.d.ts.map +1 -1
- package/dist/kit/core/log.js +38 -5
- package/dist/kit/core/log.js.map +1 -1
- package/dist/kit/core/outcome.d.ts +114 -0
- package/dist/kit/core/outcome.d.ts.map +1 -0
- package/dist/kit/core/outcome.js +246 -0
- package/dist/kit/core/outcome.js.map +1 -0
- package/dist/kit/core/patch.d.ts +64 -0
- package/dist/kit/core/patch.d.ts.map +1 -0
- package/dist/kit/core/patch.js +289 -0
- package/dist/kit/core/patch.js.map +1 -0
- package/dist/kit/core/paths.d.ts +17 -0
- package/dist/kit/core/paths.d.ts.map +1 -1
- package/dist/kit/core/paths.js +21 -0
- package/dist/kit/core/paths.js.map +1 -1
- package/dist/kit/core/pieces.d.ts +16 -4
- package/dist/kit/core/pieces.d.ts.map +1 -1
- package/dist/kit/core/pieces.js +84 -27
- package/dist/kit/core/pieces.js.map +1 -1
- package/dist/kit/core/progress-reporter.d.ts +21 -4
- package/dist/kit/core/progress-reporter.d.ts.map +1 -1
- package/dist/kit/core/progress-reporter.js +74 -12
- package/dist/kit/core/progress-reporter.js.map +1 -1
- package/dist/kit/core/progress.d.ts +41 -4
- package/dist/kit/core/progress.d.ts.map +1 -1
- package/dist/kit/core/progress.js +105 -18
- package/dist/kit/core/progress.js.map +1 -1
- package/dist/kit/core/refusal-log.d.ts +7 -0
- package/dist/kit/core/refusal-log.d.ts.map +1 -0
- package/dist/kit/core/refusal-log.js +54 -0
- package/dist/kit/core/refusal-log.js.map +1 -0
- package/dist/kit/core/run.d.ts +39 -5
- package/dist/kit/core/run.d.ts.map +1 -1
- package/dist/kit/core/run.js +514 -83
- package/dist/kit/core/run.js.map +1 -1
- package/dist/kit/core/save.d.ts +7 -3
- package/dist/kit/core/save.d.ts.map +1 -1
- package/dist/kit/core/save.js +57 -20
- package/dist/kit/core/save.js.map +1 -1
- package/dist/kit/core/style.d.ts +1 -0
- package/dist/kit/core/style.d.ts.map +1 -1
- package/dist/kit/core/style.js +1 -1
- package/dist/kit/core/style.js.map +1 -1
- package/dist/kit/line/client.d.ts +14 -2
- package/dist/kit/line/client.d.ts.map +1 -1
- package/dist/kit/line/client.js +40 -20
- package/dist/kit/line/client.js.map +1 -1
- package/dist/kit/line/types.d.ts +33 -1
- package/dist/kit/line/types.d.ts.map +1 -1
- package/dist/kit/maker/cues.d.ts +67 -0
- package/dist/kit/maker/cues.d.ts.map +1 -0
- package/dist/kit/maker/cues.js +204 -0
- package/dist/kit/maker/cues.js.map +1 -0
- package/dist/kit/maker/encode.d.ts +5 -0
- package/dist/kit/maker/encode.d.ts.map +1 -1
- package/dist/kit/maker/encode.js +7 -1
- package/dist/kit/maker/encode.js.map +1 -1
- package/dist/kit/maker/facts.d.ts +46 -0
- package/dist/kit/maker/facts.d.ts.map +1 -0
- package/dist/kit/maker/facts.js +159 -0
- package/dist/kit/maker/facts.js.map +1 -0
- package/dist/kit/maker/inputs.d.ts +48 -3
- package/dist/kit/maker/inputs.d.ts.map +1 -1
- package/dist/kit/maker/inputs.js +151 -22
- package/dist/kit/maker/inputs.js.map +1 -1
- package/dist/kit/maker/make.d.ts +20 -1
- package/dist/kit/maker/make.d.ts.map +1 -1
- package/dist/kit/maker/make.js +129 -21
- package/dist/kit/maker/make.js.map +1 -1
- package/dist/kit/maker/page.d.ts.map +1 -1
- package/dist/kit/maker/page.js +49 -1
- package/dist/kit/maker/page.js.map +1 -1
- package/dist/kit/maker/parts/html-frames/1.2.1/part.json +1083 -0
- package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -1
- package/dist/kit/maker/parts/html-frames/src/part.js +4 -1
- package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -1
- package/dist/kit/maker/runtime.d.ts.map +1 -1
- package/dist/kit/maker/runtime.js +54 -7
- package/dist/kit/maker/runtime.js.map +1 -1
- package/dist/kit/maker/timing.d.ts +74 -0
- package/dist/kit/maker/timing.d.ts.map +1 -0
- package/dist/kit/maker/timing.js +152 -0
- package/dist/kit/maker/timing.js.map +1 -0
- package/dist/kit/maker/under.d.ts +126 -0
- package/dist/kit/maker/under.d.ts.map +1 -0
- package/dist/kit/maker/under.js +299 -0
- package/dist/kit/maker/under.js.map +1 -0
- package/dist/kit/parts/catalog.d.ts +3 -20
- package/dist/kit/parts/catalog.d.ts.map +1 -1
- package/dist/kit/parts/catalog.js +6 -41
- package/dist/kit/parts/catalog.js.map +1 -1
- package/dist/kit/parts/loader.d.ts +7 -2
- package/dist/kit/parts/loader.d.ts.map +1 -1
- package/dist/kit/parts/loader.js +88 -23
- package/dist/kit/parts/loader.js.map +1 -1
- package/dist/skills/master-skill.d.ts +4 -6
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +28 -28
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/routes.js +5 -5
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/server-entry-skills.d.ts +6 -6
- package/dist/skills/server-entry-skills.d.ts.map +1 -1
- package/dist/skills/server-entry-skills.js +89 -60
- package/dist/skills/server-entry-skills.js.map +1 -1
- package/dist/utils/browser-preflight.d.ts +3 -0
- package/dist/utils/browser-preflight.d.ts.map +1 -1
- package/dist/utils/browser-preflight.js +27 -6
- package/dist/utils/browser-preflight.js.map +1 -1
- package/dist/utils/exit.d.ts +6 -0
- package/dist/utils/exit.d.ts.map +1 -0
- package/dist/utils/exit.js +37 -0
- package/dist/utils/exit.js.map +1 -0
- package/package.json +14 -3
- package/skills/goose-ads/SKILL.md +8 -8
- package/skills/goose-product-photos/SKILL.md +8 -8
- package/skills/goose-video/SKILL.md +29 -595
- package/skills/goose-video-local/SKILL.md +3 -1572
- package/skills/gooseworks/SKILL.md +10 -12
- package/skills/make-custom-video/SKILL.md +25 -672
- package/skills/manifest.json +7 -7
- package/skills/routes.json +3 -3
- package/dist/kit/maker/parts/html-frames/1.1.0/part.json +0 -199
- package/dist/skills/production-video-skills.json +0 -5
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LOOK_FOR = exports.PRESENCE_MIN = exports.SHEET_FRAMES = void 0;
|
|
37
|
+
exports.tileSize = tileSize;
|
|
38
|
+
exports.sheetTimes = sheetTimes;
|
|
39
|
+
exports.tileLabel = tileLabel;
|
|
40
|
+
exports.composeSheet = composeSheet;
|
|
41
|
+
exports.encodePng = encodePng;
|
|
42
|
+
exports.productColours = productColours;
|
|
43
|
+
exports.bestCover = bestCover;
|
|
44
|
+
exports.presenceWarning = presenceWarning;
|
|
45
|
+
exports.lookAtFinal = lookAtFinal;
|
|
46
|
+
// What an agent with eyes looks at before it says a video is ready, and the one content warning a
|
|
47
|
+
// machine can give without a vision model:
|
|
48
|
+
// final/contact-sheet.png about 12 frames across the video and its end card, each labelled by scene
|
|
49
|
+
// final/eyes.json which scene and second each tile is, the sheet's path and the warnings
|
|
50
|
+
// The product-presence warning compares the frozen product photos with the sampled frames by colour
|
|
51
|
+
// alone, so it only ever warns: a product whose colours are nowhere in the video may not show.
|
|
52
|
+
const child_process_1 = require("child_process");
|
|
53
|
+
const promises_1 = require("fs/promises");
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const zlib_1 = require("zlib");
|
|
56
|
+
const toolchain_1 = require("./toolchain");
|
|
57
|
+
/** Frames across the video, before the end card. */
|
|
58
|
+
exports.SHEET_FRAMES = 12;
|
|
59
|
+
const COLUMNS = 4;
|
|
60
|
+
/** Each tile's long side, in pixels. */
|
|
61
|
+
const TILE_LONG = 320;
|
|
62
|
+
/** The label strip under each tile. */
|
|
63
|
+
const LABEL_H = 20;
|
|
64
|
+
const GAP = 4;
|
|
65
|
+
/** One frame grab may take this long. */
|
|
66
|
+
const GRAB_MS = 20_000;
|
|
67
|
+
/** At most this many product photos are compared. */
|
|
68
|
+
const MAX_PHOTOS = 4;
|
|
69
|
+
/** A product photo's colours must cover this much of some patch of a frame for the product to count as seen. */
|
|
70
|
+
exports.PRESENCE_MIN = 0.5;
|
|
71
|
+
/** What an agent looks for on the sheet before it says the video is ready. */
|
|
72
|
+
exports.LOOK_FOR = [
|
|
73
|
+
'The product shows, facing the camera, where the plan puts it.',
|
|
74
|
+
'Every word on screen is readable on a phone.',
|
|
75
|
+
'No other brand’s name or logo shows.',
|
|
76
|
+
'No spoken or written word is cut off.',
|
|
77
|
+
];
|
|
78
|
+
/** One raw picture from ffmpeg's stdout, exactly `bytes` long. */
|
|
79
|
+
const grabWith = (ffmpeg) => (file, args, bytes, signal) => new Promise((resolve, reject) => {
|
|
80
|
+
const child = (0, child_process_1.spawn)(ffmpeg, ['-v', 'error', ...args.slice(0, args.indexOf('-i')), '-i', file, ...args.slice(args.indexOf('-i') + 1), '-frames:v', '1', '-f', 'rawvideo', 'pipe:1'], {
|
|
81
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
82
|
+
env: (0, toolchain_1.childEnv)(),
|
|
83
|
+
signal,
|
|
84
|
+
});
|
|
85
|
+
const chunks = [];
|
|
86
|
+
let got = 0;
|
|
87
|
+
const timer = setTimeout(() => child.kill('SIGKILL'), GRAB_MS);
|
|
88
|
+
child.stdout.on('data', (chunk) => {
|
|
89
|
+
got += chunk.length;
|
|
90
|
+
if (got <= bytes)
|
|
91
|
+
chunks.push(chunk);
|
|
92
|
+
});
|
|
93
|
+
child.on('error', (error) => {
|
|
94
|
+
clearTimeout(timer);
|
|
95
|
+
reject(error);
|
|
96
|
+
});
|
|
97
|
+
child.on('close', (code) => {
|
|
98
|
+
clearTimeout(timer);
|
|
99
|
+
const data = Buffer.concat(chunks);
|
|
100
|
+
if (code === 0 && data.length === bytes)
|
|
101
|
+
resolve(data);
|
|
102
|
+
else
|
|
103
|
+
reject(new Error(`no frame from ${path.basename(file)}`));
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
/** The tile size for a picture of this shape: the long side TILE_LONG, both sides even. */
|
|
107
|
+
function tileSize(width, height) {
|
|
108
|
+
const scale = TILE_LONG / Math.max(width, height, 1);
|
|
109
|
+
const even = (n) => Math.max(2, Math.round((n * scale) / 2) * 2);
|
|
110
|
+
return { width: even(width), height: even(height) };
|
|
111
|
+
}
|
|
112
|
+
/** Where the frames are taken: evenly across the video before its end card, then the end card's middle. */
|
|
113
|
+
function sheetTimes(timeline) {
|
|
114
|
+
const card = timeline.end_card && timeline.end_card.end_s > timeline.end_card.start_s ? timeline.end_card : null;
|
|
115
|
+
const bodyEnd = Math.max(card ? card.start_s : timeline.duration_s, 0.1);
|
|
116
|
+
const scenes = [...(timeline.scenes ?? [])].sort((a, b) => a.start_s - b.start_s);
|
|
117
|
+
const tiles = [];
|
|
118
|
+
for (let i = 0; i < exports.SHEET_FRAMES; i++) {
|
|
119
|
+
const at = +((bodyEnd * (i + 0.5)) / exports.SHEET_FRAMES).toFixed(2);
|
|
120
|
+
const index = scenes.findIndex((scene) => at >= scene.start_s && at < scene.end_s);
|
|
121
|
+
tiles.push({ tile: i + 1, at_s: at, ...(index >= 0 ? { scene_id: scenes[index].id, scene: index + 1 } : {}) });
|
|
122
|
+
}
|
|
123
|
+
if (card)
|
|
124
|
+
tiles.push({ tile: exports.SHEET_FRAMES + 1, at_s: +((card.start_s + card.end_s) / 2).toFixed(2), end_card: true });
|
|
125
|
+
return tiles;
|
|
126
|
+
}
|
|
127
|
+
/** A tile's label: its scene and second, or END for the end card. */
|
|
128
|
+
function tileLabel(tile) {
|
|
129
|
+
if (tile.end_card)
|
|
130
|
+
return 'END';
|
|
131
|
+
return `${tile.scene ? `S${tile.scene} ` : ''}${tile.at_s.toFixed(1)}`;
|
|
132
|
+
}
|
|
133
|
+
// A 5 by 7 font for the labels: each row of a glyph is 5 bits, the left pixel first.
|
|
134
|
+
const FONT = {
|
|
135
|
+
'0': [14, 17, 19, 21, 25, 17, 14],
|
|
136
|
+
'1': [4, 12, 4, 4, 4, 4, 14],
|
|
137
|
+
'2': [14, 17, 1, 2, 4, 8, 31],
|
|
138
|
+
'3': [30, 1, 1, 14, 1, 1, 30],
|
|
139
|
+
'4': [2, 6, 10, 18, 31, 2, 2],
|
|
140
|
+
'5': [31, 16, 30, 1, 1, 17, 14],
|
|
141
|
+
'6': [6, 8, 16, 30, 17, 17, 14],
|
|
142
|
+
'7': [31, 1, 2, 4, 8, 8, 8],
|
|
143
|
+
'8': [14, 17, 17, 14, 17, 17, 14],
|
|
144
|
+
'9': [14, 17, 17, 15, 1, 2, 12],
|
|
145
|
+
S: [15, 16, 16, 14, 1, 1, 30],
|
|
146
|
+
E: [31, 16, 16, 30, 16, 16, 31],
|
|
147
|
+
N: [17, 25, 21, 19, 17, 17, 17],
|
|
148
|
+
D: [30, 17, 17, 17, 17, 17, 30],
|
|
149
|
+
'.': [0, 0, 0, 0, 0, 12, 12],
|
|
150
|
+
' ': [0, 0, 0, 0, 0, 0, 0],
|
|
151
|
+
};
|
|
152
|
+
function drawText(sheet, text, x0, y0, scale = 2) {
|
|
153
|
+
let x = x0;
|
|
154
|
+
for (const char of text) {
|
|
155
|
+
const rows = FONT[char] ?? FONT[' '];
|
|
156
|
+
for (let row = 0; row < 7; row++)
|
|
157
|
+
for (let col = 0; col < 5; col++) {
|
|
158
|
+
if (!(rows[row] & (16 >> col)))
|
|
159
|
+
continue;
|
|
160
|
+
for (let dy = 0; dy < scale; dy++)
|
|
161
|
+
for (let dx = 0; dx < scale; dx++) {
|
|
162
|
+
const px = x + col * scale + dx;
|
|
163
|
+
const py = y0 + row * scale + dy;
|
|
164
|
+
if (px < sheet.width && py < sheet.height)
|
|
165
|
+
sheet.data.fill(255, (py * sheet.width + px) * 3, (py * sheet.width + px) * 3 + 3);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
x += 6 * scale;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** The tiles in a grid on a dark sheet, each with its label underneath. */
|
|
172
|
+
function composeSheet(frames, tile) {
|
|
173
|
+
const rows = Math.ceil(frames.length / COLUMNS);
|
|
174
|
+
const cols = Math.min(frames.length, COLUMNS);
|
|
175
|
+
const width = cols * tile.width + (cols + 1) * GAP;
|
|
176
|
+
const height = rows * (tile.height + LABEL_H) + (rows + 1) * GAP;
|
|
177
|
+
const sheet = { width, height, data: Buffer.alloc(width * height * 3, 24) };
|
|
178
|
+
frames.forEach(({ tile: info, frame }, i) => {
|
|
179
|
+
const x0 = GAP + (i % COLUMNS) * (tile.width + GAP);
|
|
180
|
+
const y0 = GAP + Math.floor(i / COLUMNS) * (tile.height + LABEL_H + GAP);
|
|
181
|
+
if (frame)
|
|
182
|
+
for (let y = 0; y < tile.height; y++)
|
|
183
|
+
frame.data.copy(sheet.data, ((y0 + y) * width + x0) * 3, y * tile.width * 3, (y + 1) * tile.width * 3);
|
|
184
|
+
drawText(sheet, frame ? tileLabel(info) : `${tileLabel(info)} .`, x0 + 4, y0 + tile.height + 3);
|
|
185
|
+
});
|
|
186
|
+
return sheet;
|
|
187
|
+
}
|
|
188
|
+
const CRC_TABLE = Array.from({ length: 256 }, (_, n) => {
|
|
189
|
+
let c = n;
|
|
190
|
+
for (let k = 0; k < 8; k++)
|
|
191
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
192
|
+
return c >>> 0;
|
|
193
|
+
});
|
|
194
|
+
function crc32(data) {
|
|
195
|
+
let c = 0xffffffff;
|
|
196
|
+
for (const byte of data)
|
|
197
|
+
c = CRC_TABLE[(c ^ byte) & 0xff] ^ (c >>> 8);
|
|
198
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
199
|
+
}
|
|
200
|
+
function chunk(type, body) {
|
|
201
|
+
const head = Buffer.alloc(8);
|
|
202
|
+
head.writeUInt32BE(body.length, 0);
|
|
203
|
+
head.write(type, 4, 'ascii');
|
|
204
|
+
const crc = Buffer.alloc(4);
|
|
205
|
+
crc.writeUInt32BE(crc32(Buffer.concat([head.subarray(4), body])), 0);
|
|
206
|
+
return Buffer.concat([head, body, crc]);
|
|
207
|
+
}
|
|
208
|
+
/** An RGB picture as a PNG file's bytes. */
|
|
209
|
+
function encodePng(picture) {
|
|
210
|
+
const header = Buffer.alloc(13);
|
|
211
|
+
header.writeUInt32BE(picture.width, 0);
|
|
212
|
+
header.writeUInt32BE(picture.height, 4);
|
|
213
|
+
header.set([8, 2, 0, 0, 0], 8);
|
|
214
|
+
const stride = picture.width * 3;
|
|
215
|
+
const raw = Buffer.alloc((stride + 1) * picture.height);
|
|
216
|
+
for (let y = 0; y < picture.height; y++)
|
|
217
|
+
picture.data.copy(raw, y * (stride + 1) + 1, y * stride, (y + 1) * stride);
|
|
218
|
+
return Buffer.concat([Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]), chunk('IHDR', header), chunk('IDAT', (0, zlib_1.deflateSync)(raw)), chunk('IEND', Buffer.alloc(0))]);
|
|
219
|
+
}
|
|
220
|
+
// Colour bins: 4 for greys (by brightness), then 12 hues by 2 saturations by 2 brightnesses.
|
|
221
|
+
const BINS = 4 + 12 * 2 * 2;
|
|
222
|
+
function binOf(r, g, b) {
|
|
223
|
+
const max = Math.max(r, g, b);
|
|
224
|
+
const min = Math.min(r, g, b);
|
|
225
|
+
const v = max / 255;
|
|
226
|
+
const s = max === 0 ? 0 : (max - min) / max;
|
|
227
|
+
if (s < 0.2 || v < 0.15)
|
|
228
|
+
return Math.min(Math.floor(v * 4), 3);
|
|
229
|
+
let h = 0;
|
|
230
|
+
if (max === r)
|
|
231
|
+
h = ((g - b) / (max - min) + 6) % 6;
|
|
232
|
+
else if (max === g)
|
|
233
|
+
h = (b - r) / (max - min) + 2;
|
|
234
|
+
else
|
|
235
|
+
h = (r - g) / (max - min) + 4;
|
|
236
|
+
return 4 + Math.min(Math.floor(h * 2), 11) * 4 + (s < 0.55 ? 0 : 2) + (v < 0.6 ? 0 : 1);
|
|
237
|
+
}
|
|
238
|
+
/** The product's colour mix: its opaque pixels, or those unlike its border when the photo has no transparency. */
|
|
239
|
+
function productColours(photo) {
|
|
240
|
+
const { width, height, data } = photo;
|
|
241
|
+
const count = width * height;
|
|
242
|
+
let clear = 0;
|
|
243
|
+
for (let i = 0; i < count; i++)
|
|
244
|
+
if (data[i * 4 + 3] < 128)
|
|
245
|
+
clear++;
|
|
246
|
+
const cutout = clear >= count * 0.05;
|
|
247
|
+
// Without transparency, the background is the border's typical colour.
|
|
248
|
+
const border = [];
|
|
249
|
+
for (let x = 0; x < width; x++)
|
|
250
|
+
border.push([0, x], [height - 1, x]);
|
|
251
|
+
for (let y = 0; y < height; y++)
|
|
252
|
+
border.push([y, 0], [y, width - 1]);
|
|
253
|
+
const median = (channel) => {
|
|
254
|
+
const values = border.map(([y, x]) => data[(y * width + x) * 4 + channel]).sort((a, b) => a - b);
|
|
255
|
+
return values[Math.floor(values.length / 2)];
|
|
256
|
+
};
|
|
257
|
+
const bg = [median(0), median(1), median(2)];
|
|
258
|
+
const keep = (i) => {
|
|
259
|
+
if (cutout)
|
|
260
|
+
return data[i * 4 + 3] >= 128;
|
|
261
|
+
const d = Math.abs(data[i * 4] - bg[0]) + Math.abs(data[i * 4 + 1] - bg[1]) + Math.abs(data[i * 4 + 2] - bg[2]);
|
|
262
|
+
return d > 60;
|
|
263
|
+
};
|
|
264
|
+
const hist = new Float64Array(BINS);
|
|
265
|
+
let kept = 0;
|
|
266
|
+
for (let i = 0; i < count; i++)
|
|
267
|
+
if (keep(i)) {
|
|
268
|
+
hist[binOf(data[i * 4], data[i * 4 + 1], data[i * 4 + 2])]++;
|
|
269
|
+
kept++;
|
|
270
|
+
}
|
|
271
|
+
if (kept < count * 0.05)
|
|
272
|
+
return null;
|
|
273
|
+
for (let b = 0; b < BINS; b++)
|
|
274
|
+
hist[b] /= kept;
|
|
275
|
+
return hist;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* How much of the best-matching patch of any frame the product's colours cover (0 to 1): square patches of
|
|
279
|
+
* a quarter, two fifths and seven tenths of the frame's short side, moved half a patch at a time.
|
|
280
|
+
*/
|
|
281
|
+
function bestCover(product, frames) {
|
|
282
|
+
let best = 0;
|
|
283
|
+
for (const frame of frames) {
|
|
284
|
+
const { width, height, data } = frame;
|
|
285
|
+
const bins = new Uint8Array(width * height);
|
|
286
|
+
for (let i = 0; i < bins.length; i++)
|
|
287
|
+
bins[i] = binOf(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
|
|
288
|
+
for (const share of [0.25, 0.4, 0.7]) {
|
|
289
|
+
const side = Math.max(Math.round(Math.min(width, height) * share), 4);
|
|
290
|
+
const step = Math.max(Math.floor(side / 2), 1);
|
|
291
|
+
const counts = new Float64Array(BINS);
|
|
292
|
+
for (let y0 = 0; y0 + side <= height; y0 += step)
|
|
293
|
+
for (let x0 = 0; x0 + side <= width; x0 += step) {
|
|
294
|
+
counts.fill(0);
|
|
295
|
+
for (let y = y0; y < y0 + side; y++)
|
|
296
|
+
for (let x = x0; x < x0 + side; x++)
|
|
297
|
+
counts[bins[y * width + x]]++;
|
|
298
|
+
let cover = 0;
|
|
299
|
+
for (let b = 0; b < BINS; b++)
|
|
300
|
+
cover += Math.min(product[b], counts[b] / (side * side));
|
|
301
|
+
if (cover > best)
|
|
302
|
+
best = cover;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return best;
|
|
307
|
+
}
|
|
308
|
+
/** The warning for a product none of whose photos' colours show in the video; null when one does or none can be read. */
|
|
309
|
+
function presenceWarning(name, photos, frames) {
|
|
310
|
+
if (!photos.length || !frames.length)
|
|
311
|
+
return null;
|
|
312
|
+
const cover = Math.max(...photos.map((photo) => bestCover(photo, frames)));
|
|
313
|
+
if (cover >= exports.PRESENCE_MIN)
|
|
314
|
+
return null;
|
|
315
|
+
const who = name?.trim() ? `“${name.trim().slice(0, 60)}”` : 'The product';
|
|
316
|
+
return {
|
|
317
|
+
check: 'product_visible',
|
|
318
|
+
message: `${who} may not show clearly in the video: none of the frames we looked at matches its photos.`,
|
|
319
|
+
expected: `a frame patch matching the photos at ${exports.PRESENCE_MIN}`,
|
|
320
|
+
found: cover.toFixed(2),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Writes the contact sheet and eyes.json next to the final, and gives back the product-presence warnings.
|
|
325
|
+
* A frame or photo that can't be read is left out; nothing here stops the video.
|
|
326
|
+
*/
|
|
327
|
+
async function lookAtFinal(opts) {
|
|
328
|
+
const grab = opts.grab ?? grabWith(opts.ffmpeg);
|
|
329
|
+
const dir = path.dirname(opts.final);
|
|
330
|
+
const size = tileSize(opts.timeline.width, opts.timeline.height);
|
|
331
|
+
const tiles = sheetTimes(opts.timeline);
|
|
332
|
+
const frames = [];
|
|
333
|
+
for (const tile of tiles) {
|
|
334
|
+
const data = await grab(opts.final, ['-ss', String(tile.at_s), '-i', '-vf', `scale=${size.width}:${size.height}:flags=area,format=rgb24`], size.width * size.height * 3, opts.signal).catch(() => null);
|
|
335
|
+
frames.push({ tile, frame: data ? { ...size, data } : null });
|
|
336
|
+
}
|
|
337
|
+
const seen = frames.filter((f) => f.frame && !f.tile.end_card).map((f) => f.frame);
|
|
338
|
+
let sheet = null;
|
|
339
|
+
if (frames.some((f) => f.frame)) {
|
|
340
|
+
sheet = path.join(dir, 'contact-sheet.png');
|
|
341
|
+
await (0, promises_1.writeFile)(sheet, encodePng(composeSheet(frames, size)), { mode: 0o600 });
|
|
342
|
+
}
|
|
343
|
+
const warnings = [];
|
|
344
|
+
// Every product gets its fair share of the photo budget, at least one readable photo each when it has one.
|
|
345
|
+
const share = Math.max(1, Math.floor(MAX_PHOTOS / Math.max(opts.products.length, 1)));
|
|
346
|
+
for (const product of opts.products) {
|
|
347
|
+
const colours = [];
|
|
348
|
+
let tries = 0;
|
|
349
|
+
for (const photo of product.photos) {
|
|
350
|
+
if (colours.length >= share || tries >= share + 2)
|
|
351
|
+
break;
|
|
352
|
+
tries++;
|
|
353
|
+
const data = await grab(photo, ['-i', '-vf', 'scale=64:64:flags=area,format=rgba'], 64 * 64 * 4, opts.signal).catch(() => null);
|
|
354
|
+
const hist = data ? productColours({ width: 64, height: 64, data }) : null;
|
|
355
|
+
if (hist)
|
|
356
|
+
colours.push(hist);
|
|
357
|
+
}
|
|
358
|
+
const warning = presenceWarning(product.name, colours, seen);
|
|
359
|
+
if (warning)
|
|
360
|
+
warnings.push(warning);
|
|
361
|
+
}
|
|
362
|
+
const eyes = { contact_sheet: sheet, tiles, warnings, look_for: exports.LOOK_FOR };
|
|
363
|
+
await (0, promises_1.writeFile)(path.join(dir, 'eyes.json'), JSON.stringify(eyes, null, 2) + '\n', { mode: 0o600 });
|
|
364
|
+
return eyes;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=eyes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes.js","sourceRoot":"","sources":["../../../src/kit/core/eyes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,4BAIC;AAGD,gCAYC;AAGD,8BAGC;AAyCD,oCAcC;AAwBD,8BASC;AAmBD,wCA8BC;AAMD,8BAqBC;AAGD,0CAWC;AAMD,kCA2CC;AA7VD,kGAAkG;AAClG,2CAA2C;AAC3C,wGAAwG;AACxG,qGAAqG;AACrG,oGAAoG;AACpG,+FAA+F;AAC/F,iDAAsC;AACtC,0CAAwC;AACxC,2CAA6B;AAC7B,+BAAmC;AAGnC,2CAAuC;AAEvC,oDAAoD;AACvC,QAAA,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,wCAAwC;AACxC,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,uCAAuC;AACvC,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,GAAG,GAAG,CAAC,CAAC;AACd,yCAAyC;AACzC,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,qDAAqD;AACrD,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,gHAAgH;AACnG,QAAA,YAAY,GAAG,GAAG,CAAC;AAEhC,8EAA8E;AACjE,QAAA,QAAQ,GAAG;IACtB,+DAA+D;IAC/D,8CAA8C;IAC9C,sCAAsC;IACtC,uCAAuC;CACxC,CAAC;AAgCF,kEAAkE;AAClE,MAAM,QAAQ,GACZ,CAAC,MAAc,EAAQ,EAAE,CACzB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;QAClL,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;QACnC,GAAG,EAAE,IAAA,oBAAQ,GAAE;QACf,MAAM;KACP,CAAC,CAAC;IACH,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;QACpB,IAAI,GAAG,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;;YAClD,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,2FAA2F;AAC3F,SAAgB,QAAQ,CAAC,KAAa,EAAE,MAAc;IACpD,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,2GAA2G;AAC3G,SAAgB,UAAU,CAAC,QAA8D;IACvF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACjH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,oBAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAY,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACtH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,SAAgB,SAAS,CAAC,IAAe;IACvC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,qFAAqF;AACrF,MAAM,IAAI,GAA6B;IACrC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACjC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC5B,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC/B,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACjC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC3B,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAU,EAAE,IAAY,EAAE,EAAU,EAAE,EAAU,EAAE,KAAK,GAAG,CAAC;IAC3E,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;YAC9B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;oBAAE,SAAS;gBACzC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;oBAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;wBAClC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;wBAChC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;wBACjC,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM;4BAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChI,CAAC;YACL,CAAC;QACH,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAgB,YAAY,CAAC,MAAqD,EAAE,IAAuC;IACzH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjE,MAAM,KAAK,GAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACjF,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;QACzE,IAAI,KAAK;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/I,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,IAAY;IACzB,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,IAAY;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,SAAgB,SAAS,CAAC,OAAY;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACpH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAA,kBAAW,EAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjK,CAAC;AAED,6FAA6F;AAC7F,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5B,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACpB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,KAAK,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAC9C,IAAI,GAAG,KAAK,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;;QAC7C,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,kHAAkH;AAClH,SAAgB,cAAc,CAAC,KAAsD;IACnF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;YAAE,KAAK,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC;IACrC,uEAAuE;IACvE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjG,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;QACzB,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,EAAE,CAAC;QACT,CAAC;IACH,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,OAAqB,EAAE,MAAa;IAC5D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,IAAI,IAAI;gBAC9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;wBAAE,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;4BAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxG,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;wBAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;oBACxF,IAAI,KAAK,GAAG,IAAI;wBAAE,IAAI,GAAG,KAAK,CAAC;gBACjC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yHAAyH;AACzH,SAAgB,eAAe,CAAC,IAAwB,EAAE,MAAsB,EAAE,MAAa;IAC7F,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,IAAI,oBAAY;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3E,OAAO;QACL,KAAK,EAAE,iBAAiB;QACxB,OAAO,EAAE,GAAG,GAAG,yFAAyF;QACxG,QAAQ,EAAE,wCAAwC,oBAAY,EAAE;QAChE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACxB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,IAQjC;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,MAAM,GAAkD,EAAE,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,0BAA0B,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACxM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAM,CAAU,CAAC;IAC7F,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC5C,MAAM,IAAA,oBAAS,EAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,2GAA2G;IAC3G,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM;YACzD,KAAK,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,oCAAoC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAChI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3E,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,IAAI,GAAS,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAQ,EAAE,CAAC;IACjF,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/kit/core/files.js
CHANGED
|
@@ -157,7 +157,7 @@ function isLineFile(value) {
|
|
|
157
157
|
typeof v.mime === 'string');
|
|
158
158
|
}
|
|
159
159
|
const MAX_INPUT_BYTES = 200 * 1024 * 1024;
|
|
160
|
-
const mismatch = () => new errors_1.KitStop('A file in the plan does not match the one approved, so
|
|
160
|
+
const mismatch = () => new errors_1.KitStop('A file in the plan does not match the one approved, so the video stopped before using it.', 'refused');
|
|
161
161
|
/** The bytes of one plan file, checked against its size and hash; fetched once per sha256. */
|
|
162
162
|
async function checkedFile(files, file, fetch) {
|
|
163
163
|
await (0, promises_1.mkdir)(files.dir, { recursive: true, mode: 0o700 });
|
|
@@ -165,7 +165,7 @@ async function checkedFile(files, file, fetch) {
|
|
|
165
165
|
const have = (0, fs_1.existsSync)(target) ? await hashFile(target) : null;
|
|
166
166
|
if (!have || have.sha256 !== file.sha256 || have.bytes !== file.bytes) {
|
|
167
167
|
if (file.bytes > MAX_INPUT_BYTES)
|
|
168
|
-
throw new errors_1.KitStop('A file in the plan is larger than the kit allows.
|
|
168
|
+
throw new errors_1.KitStop('A file in the plan is larger than the kit allows.', 'refused');
|
|
169
169
|
const data = await fetch();
|
|
170
170
|
if (data.length !== file.bytes || (0, crypto_1.createHash)('sha256').update(data).digest('hex') !== file.sha256)
|
|
171
171
|
throw mismatch();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/kit/core/files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,wBAEC;AAED,kCASC;AAED,4BAaC;AAKD,0BAkBC;AAGD,wBAQC;AAUD,oCAKC;AAcD,gCAcC;AAoCD,kCA0BC;AAhMD,4EAA4E;AAC5E,gFAAgF;AAChF,mCAAoC;AACpC,2BAAkD;AAClD,0CAA0C;AAC1C,2CAA6B;AAE7B,qCAAmC;AACnC,iCAAqC;AAErC,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW;IAC9E,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY;IAC7G,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe;IACnH,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG,EAAE,YAAY;IAC5G,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IACxE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB;CACpG,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK;IAC1H,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO;IAC9H,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM;CACnE,CAAC;AAEF,SAAgB,MAAM,CAAC,IAAY;IACjC,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAC;AAC9F,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC;IACxG,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,IAAA,qBAAgB,EAAC,IAAI,CAAC;aACnB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC,CAAC;aACD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC;AAID,4FAA4F;AACrF,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,KAAgB,EAAE,KAAa,EAAE,IAAa;IACxF,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5E,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,GAAG,GAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAClH,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;gBAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC7F,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACzD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5D,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;gBAAE,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,gGAAgG;QAClG,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mEAAmE;AAC5D,KAAK,UAAU,MAAM,CAAC,GAAY;IACvC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAUD,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,IAAI,KAAK,uBAAuB,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvM,CAAC;AAcD,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,CACL,IAAI,KAAK,+BAA+B;QACxC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACvC,CAAC,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC,OAAO,EAAE;QACxC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAa1C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,gBAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/kit/core/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../../src/kit/core/lock.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG5D,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAKvE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lockedRef = lockedRef;
|
|
4
|
+
const semver_1 = require("../parts/semver");
|
|
5
|
+
/** The pinned part, or the newer version of its major the lock moved it to. */
|
|
6
|
+
function lockedRef(pin, lock) {
|
|
7
|
+
const entry = lock?.parts?.[pin.id];
|
|
8
|
+
if (!entry || entry.version === pin.version || entry.moved_from !== pin.version)
|
|
9
|
+
return pin;
|
|
10
|
+
const moved = (0, semver_1.isExactVersion)(entry.version) && (0, semver_1.isExactVersion)(pin.version) && entry.version.split('.')[0] === pin.version.split('.')[0] && (0, semver_1.compareVersions)(entry.version, pin.version) > 0;
|
|
11
|
+
return moved ? { id: pin.id, version: entry.version } : pin;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/kit/core/lock.ts"],"names":[],"mappings":";;AAOA,8BAKC;AARD,4CAAkE;AAElE,+EAA+E;AAC/E,SAAgB,SAAS,CAAC,GAAY,EAAE,IAAsB;IAC5D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAC5F,MAAM,KAAK,GAAG,IAAA,uBAAc,EAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAA,uBAAc,EAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAA,wBAAe,EAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3L,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9D,CAAC"}
|
package/dist/kit/core/log.d.ts
CHANGED
|
@@ -1,15 +1,51 @@
|
|
|
1
1
|
import type { PartLogger } from '../part-interface';
|
|
2
2
|
export type Redactor = (text: string) => string;
|
|
3
|
+
/** One event for a program reading the kit's output (`--json`): a line for the person, or a row of the card. */
|
|
4
|
+
export type KitEvent = {
|
|
5
|
+
event: 'say';
|
|
6
|
+
text: string;
|
|
7
|
+
} | {
|
|
8
|
+
event: 'step';
|
|
9
|
+
label: string;
|
|
10
|
+
state: string;
|
|
11
|
+
detail?: string;
|
|
12
|
+
};
|
|
3
13
|
export declare class KitLog {
|
|
4
14
|
private readonly print;
|
|
5
15
|
private readonly redactor;
|
|
16
|
+
/** With `--json`: every line goes out as an event here instead of being printed. */
|
|
17
|
+
private readonly emit?;
|
|
6
18
|
private file;
|
|
7
|
-
|
|
8
|
-
|
|
19
|
+
/** On every entry: which run wrote it, and which GooseWorks package ran. */
|
|
20
|
+
private tags;
|
|
21
|
+
constructor(print: (line: string) => void, redactor?: Redactor,
|
|
22
|
+
/** With `--json`: every line goes out as an event here instead of being printed. */
|
|
23
|
+
emit?: ((event: KitEvent) => void) | undefined);
|
|
24
|
+
/** Writes to this file, such as the video's log.ndjson for a refusal before any run starts. */
|
|
9
25
|
attach(file: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Starts this run's own log, `<dir>/<name>.ndjson` (a new name if that one is taken), and
|
|
28
|
+
* notes it with one line in `index`. Returns the run's name and its file.
|
|
29
|
+
*/
|
|
30
|
+
attachRun(opts: {
|
|
31
|
+
index: string;
|
|
32
|
+
dir: string;
|
|
33
|
+
name: string;
|
|
34
|
+
packageVersion: string;
|
|
35
|
+
fields?: Record<string, unknown>;
|
|
36
|
+
}): {
|
|
37
|
+
run: string;
|
|
38
|
+
file: string;
|
|
39
|
+
};
|
|
10
40
|
clean(text: string): string;
|
|
11
41
|
/** A line for the person running the kit (and the worker's output tail). */
|
|
12
42
|
say(line: string): void;
|
|
43
|
+
/** A row of the card that changed: its line for the person, or a step event with `--json`. */
|
|
44
|
+
step(row: {
|
|
45
|
+
label: string;
|
|
46
|
+
state: string;
|
|
47
|
+
detail?: string;
|
|
48
|
+
}, line: string): void;
|
|
13
49
|
write(level: 'debug' | 'info' | 'warn' | 'error', message: string, fields?: Record<string, unknown>): void;
|
|
14
50
|
/** The logger a part gets: file only, tagged with its step. */
|
|
15
51
|
forStep(step: string): PartLogger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/kit/core/log.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/kit/core/log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGhE,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEhD,gHAAgH;AAChH,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzH,qBAAa,MAAM;IAMf,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IARxB,OAAO,CAAC,IAAI,CAAuB;IACnC,4EAA4E;IAC5E,OAAO,CAAC,IAAI,CAAyD;gBAGlD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC7B,QAAQ,GAAE,QAAiC;IAC5D,oFAAoF;IACnE,IAAI,CAAC,GAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,aAAA;IAGnD,+FAA+F;IAC/F,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAYtJ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B,4EAA4E;IAC5E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOvB,8FAA8F;IAC9F,IAAI,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhF,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU1G,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;CAKlC"}
|
package/dist/kit/core/log.js
CHANGED
|
@@ -34,7 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.KitLog = void 0;
|
|
37
|
-
// The kit's structured log:
|
|
37
|
+
// The kit's structured log, secrets redacted: one file per run of `video make`
|
|
38
|
+
// under the run folder's runs/, and one index line per run in log.ndjson.
|
|
38
39
|
// Lines meant for the person go through `say`; part logs stay in the file.
|
|
39
40
|
const fs_1 = require("fs");
|
|
40
41
|
const path = __importStar(require("path"));
|
|
@@ -42,29 +43,61 @@ const secrets_1 = require("./secrets");
|
|
|
42
43
|
class KitLog {
|
|
43
44
|
print;
|
|
44
45
|
redactor;
|
|
46
|
+
emit;
|
|
45
47
|
file = null;
|
|
46
|
-
|
|
48
|
+
/** On every entry: which run wrote it, and which GooseWorks package ran. */
|
|
49
|
+
tags = null;
|
|
50
|
+
constructor(print, redactor = (text) => (0, secrets_1.redact)(text),
|
|
51
|
+
/** With `--json`: every line goes out as an event here instead of being printed. */
|
|
52
|
+
emit) {
|
|
47
53
|
this.print = print;
|
|
48
54
|
this.redactor = redactor;
|
|
55
|
+
this.emit = emit;
|
|
49
56
|
}
|
|
50
|
-
/**
|
|
57
|
+
/** Writes to this file, such as the video's log.ndjson for a refusal before any run starts. */
|
|
51
58
|
attach(file) {
|
|
52
59
|
(0, fs_1.mkdirSync)(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
53
60
|
this.file = file;
|
|
54
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Starts this run's own log, `<dir>/<name>.ndjson` (a new name if that one is taken), and
|
|
64
|
+
* notes it with one line in `index`. Returns the run's name and its file.
|
|
65
|
+
*/
|
|
66
|
+
attachRun(opts) {
|
|
67
|
+
(0, fs_1.mkdirSync)(opts.dir, { recursive: true, mode: 0o700 });
|
|
68
|
+
let run = opts.name;
|
|
69
|
+
for (let n = 2; (0, fs_1.existsSync)(path.join(opts.dir, `${run}.ndjson`)); n++)
|
|
70
|
+
run = `${opts.name}-${n}`;
|
|
71
|
+
const file = path.join(opts.dir, `${run}.ndjson`);
|
|
72
|
+
this.tags = { run, package_version: opts.packageVersion };
|
|
73
|
+
this.file = opts.index;
|
|
74
|
+
this.write('info', 'run started', { file: path.relative(path.dirname(opts.index), file), ...(opts.fields ?? {}) });
|
|
75
|
+
this.file = file;
|
|
76
|
+
return { run, file };
|
|
77
|
+
}
|
|
55
78
|
clean(text) {
|
|
56
79
|
return (0, secrets_1.redact)(this.redactor(text));
|
|
57
80
|
}
|
|
58
81
|
/** A line for the person running the kit (and the worker's output tail). */
|
|
59
82
|
say(line) {
|
|
60
83
|
const text = this.clean(line);
|
|
61
|
-
this.
|
|
84
|
+
if (this.emit)
|
|
85
|
+
this.emit({ event: 'say', text });
|
|
86
|
+
else
|
|
87
|
+
this.print(text);
|
|
62
88
|
this.write('info', text);
|
|
63
89
|
}
|
|
90
|
+
/** A row of the card that changed: its line for the person, or a step event with `--json`. */
|
|
91
|
+
step(row, line) {
|
|
92
|
+
if (!this.emit)
|
|
93
|
+
return this.say(line);
|
|
94
|
+
this.emit({ event: 'step', label: row.label, state: row.state, ...(row.detail ? { detail: row.detail } : {}) });
|
|
95
|
+
this.write('info', this.clean(line));
|
|
96
|
+
}
|
|
64
97
|
write(level, message, fields) {
|
|
65
98
|
if (!this.file)
|
|
66
99
|
return;
|
|
67
|
-
const entry = { at: new Date().toISOString(), level, message, ...(fields ? { fields } : {}) };
|
|
100
|
+
const entry = { at: new Date().toISOString(), level, ...(this.tags ?? {}), message, ...(fields ? { fields } : {}) };
|
|
68
101
|
try {
|
|
69
102
|
(0, fs_1.appendFileSync)(this.file, this.clean(JSON.stringify(entry)) + '\n', { mode: 0o600 });
|
|
70
103
|
}
|
package/dist/kit/core/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/kit/core/log.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/kit/core/log.ts"],"names":[],"mappings":"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"}
|