@docyrus/animaguru 0.39.0 → 0.39.2
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/animaguru.js
CHANGED
|
@@ -8083,17 +8083,17 @@ If you're a developer and you believe this is a bug in isomorphic-git, please fi
|
|
|
8083
8083
|
const length = Math.ceil((62 + bpath.length + 1) / 8) * 8;
|
|
8084
8084
|
const written = Buffer.alloc(length);
|
|
8085
8085
|
const writer = new BufferCursor(written);
|
|
8086
|
-
const
|
|
8087
|
-
writer.writeUInt32BE(
|
|
8088
|
-
writer.writeUInt32BE(
|
|
8089
|
-
writer.writeUInt32BE(
|
|
8090
|
-
writer.writeUInt32BE(
|
|
8091
|
-
writer.writeUInt32BE(
|
|
8092
|
-
writer.writeUInt32BE(
|
|
8093
|
-
writer.writeUInt32BE(
|
|
8094
|
-
writer.writeUInt32BE(
|
|
8095
|
-
writer.writeUInt32BE(
|
|
8096
|
-
writer.writeUInt32BE(
|
|
8086
|
+
const stat14 = normalizeStats(entry);
|
|
8087
|
+
writer.writeUInt32BE(stat14.ctimeSeconds);
|
|
8088
|
+
writer.writeUInt32BE(stat14.ctimeNanoseconds);
|
|
8089
|
+
writer.writeUInt32BE(stat14.mtimeSeconds);
|
|
8090
|
+
writer.writeUInt32BE(stat14.mtimeNanoseconds);
|
|
8091
|
+
writer.writeUInt32BE(stat14.dev);
|
|
8092
|
+
writer.writeUInt32BE(stat14.ino);
|
|
8093
|
+
writer.writeUInt32BE(stat14.mode);
|
|
8094
|
+
writer.writeUInt32BE(stat14.uid);
|
|
8095
|
+
writer.writeUInt32BE(stat14.gid);
|
|
8096
|
+
writer.writeUInt32BE(stat14.size);
|
|
8097
8097
|
writer.write(entry.oid, 20, "hex");
|
|
8098
8098
|
writer.writeUInt16BE(renderCacheEntryFlags(entry));
|
|
8099
8099
|
writer.write(entry.path, bpath.length, "utf8");
|
|
@@ -8145,13 +8145,13 @@ If you're a developer and you believe this is a bug in isomorphic-git, please fi
|
|
|
8145
8145
|
};
|
|
8146
8146
|
}
|
|
8147
8147
|
async function updateCachedIndexFile(fs2, filepath, cache) {
|
|
8148
|
-
const [
|
|
8148
|
+
const [stat14, rawIndexFile] = await Promise.all([
|
|
8149
8149
|
fs2.lstat(filepath),
|
|
8150
8150
|
fs2.read(filepath)
|
|
8151
8151
|
]);
|
|
8152
8152
|
const index3 = await GitIndex.from(rawIndexFile);
|
|
8153
8153
|
cache.map.set(filepath, index3);
|
|
8154
|
-
cache.stats.set(filepath,
|
|
8154
|
+
cache.stats.set(filepath, stat14);
|
|
8155
8155
|
}
|
|
8156
8156
|
async function isIndexStale(fs2, filepath, cache) {
|
|
8157
8157
|
const savedStats = cache.stats.get(filepath);
|
|
@@ -11179,23 +11179,23 @@ ${obj.gpgsig ? obj.gpgsig : ""}`;
|
|
|
11179
11179
|
async stat(entry) {
|
|
11180
11180
|
if (entry._stat === false) {
|
|
11181
11181
|
const { fs: fs2, dir } = this;
|
|
11182
|
-
let
|
|
11183
|
-
if (!
|
|
11182
|
+
let stat14 = await fs2.lstat(`${dir}/${entry._fullpath}`);
|
|
11183
|
+
if (!stat14) {
|
|
11184
11184
|
throw new Error(
|
|
11185
11185
|
`ENOENT: no such file or directory, lstat '${entry._fullpath}'`
|
|
11186
11186
|
);
|
|
11187
11187
|
}
|
|
11188
|
-
let type =
|
|
11189
|
-
if (type === "blob" && !
|
|
11188
|
+
let type = stat14.isDirectory() ? "tree" : "blob";
|
|
11189
|
+
if (type === "blob" && !stat14.isFile() && !stat14.isSymbolicLink()) {
|
|
11190
11190
|
type = "special";
|
|
11191
11191
|
}
|
|
11192
11192
|
entry._type = type;
|
|
11193
|
-
|
|
11194
|
-
entry._mode =
|
|
11195
|
-
if (
|
|
11196
|
-
|
|
11193
|
+
stat14 = normalizeStats(stat14);
|
|
11194
|
+
entry._mode = stat14.mode;
|
|
11195
|
+
if (stat14.size === -1 && entry._actualSize) {
|
|
11196
|
+
stat14.size = entry._actualSize;
|
|
11197
11197
|
}
|
|
11198
|
-
entry._stat =
|
|
11198
|
+
entry._stat = stat14;
|
|
11199
11199
|
}
|
|
11200
11200
|
return entry._stat;
|
|
11201
11201
|
}
|
|
@@ -11416,9 +11416,9 @@ ${obj.gpgsig ? obj.gpgsig : ""}`;
|
|
|
11416
11416
|
await Promise.all(
|
|
11417
11417
|
entries.map((entry) => {
|
|
11418
11418
|
const subpath = join21(filepath, entry);
|
|
11419
|
-
return fs2.lstat(subpath).then((
|
|
11420
|
-
if (!
|
|
11421
|
-
return
|
|
11419
|
+
return fs2.lstat(subpath).then((stat14) => {
|
|
11420
|
+
if (!stat14) return;
|
|
11421
|
+
return stat14.isDirectory() ? rmRecursive(fs2, subpath) : fs2.rm(subpath);
|
|
11422
11422
|
});
|
|
11423
11423
|
})
|
|
11424
11424
|
).then(() => fs2.rmdir(filepath));
|
|
@@ -19761,7 +19761,7 @@ var require_ignore2 = __commonJS({
|
|
|
19761
19761
|
// cli/package.json
|
|
19762
19762
|
var package_default = {
|
|
19763
19763
|
name: "@docyrus/animaguru",
|
|
19764
|
-
version: "0.39.
|
|
19764
|
+
version: "0.39.2",
|
|
19765
19765
|
description: "Agent-friendly AnimaGuru CLI built with CrustJS",
|
|
19766
19766
|
type: "module",
|
|
19767
19767
|
bin: {
|
|
@@ -50996,7 +50996,7 @@ var socialProfileRequest = external_exports.object({
|
|
|
50996
50996
|
|
|
50997
50997
|
// cli/src/curl.ts
|
|
50998
50998
|
import { createWriteStream as createWriteStream2, openAsBlob as openAsBlob2 } from "node:fs";
|
|
50999
|
-
import { readFile as readFile20, unlink as unlink3 } from "node:fs/promises";
|
|
50999
|
+
import { readFile as readFile20, stat as stat13, unlink as unlink3 } from "node:fs/promises";
|
|
51000
51000
|
import { extname as extname4, resolve as resolve17 } from "node:path";
|
|
51001
51001
|
import { Readable as Readable2 } from "node:stream";
|
|
51002
51002
|
import { pipeline as pipeline2 } from "node:stream/promises";
|
|
@@ -51037,7 +51037,16 @@ var readStdin = async () => {
|
|
|
51037
51037
|
};
|
|
51038
51038
|
async function bodyValue(value, io) {
|
|
51039
51039
|
if (value === "@-") return (io.stdin ?? readStdin)();
|
|
51040
|
-
return value.startsWith("@") ? readFile20(
|
|
51040
|
+
return value.startsWith("@") ? readFile20(await localFile(value.slice(1))) : value;
|
|
51041
|
+
}
|
|
51042
|
+
async function localFile(path) {
|
|
51043
|
+
const file2 = resolve17(path);
|
|
51044
|
+
const info = await stat13(file2).catch((error62) => {
|
|
51045
|
+
if (error62.code === "ENOENT" || error62.code === "ENOTDIR") throw new Error(`File not found: ${file2}`);
|
|
51046
|
+
throw new Error(`Can't open ${file2}: ${error62.message}`);
|
|
51047
|
+
});
|
|
51048
|
+
if (!info.isFile()) throw new Error(`Not a file: ${file2}`);
|
|
51049
|
+
return file2;
|
|
51041
51050
|
}
|
|
51042
51051
|
var parsesAsJson = (body) => {
|
|
51043
51052
|
try {
|
|
@@ -51053,7 +51062,7 @@ async function curl(options, io) {
|
|
|
51053
51062
|
if ([options.data, options.json, options.uploadFile].filter((value) => value !== void 0).length > 1) throw new Error("Use one of --data, --json and --upload-file.");
|
|
51054
51063
|
let body;
|
|
51055
51064
|
if (options.uploadFile !== void 0) {
|
|
51056
|
-
const file2 =
|
|
51065
|
+
const file2 = await localFile(options.uploadFile);
|
|
51057
51066
|
body = await openAsBlob2(file2);
|
|
51058
51067
|
if (!headers.has("content-type")) headers.set("Content-Type", UPLOAD_TYPES[extname4(file2).toLowerCase()] ?? "application/octet-stream");
|
|
51059
51068
|
} else if (options.json !== void 0) {
|
|
@@ -51420,7 +51429,7 @@ Confirm code: ${device.user_code}`);
|
|
|
51420
51429
|
{ name: "output", type: "string", required: true, description: "Workspace root to receive the branding/ folder" },
|
|
51421
51430
|
{ name: "file", type: "string", description: "Download only this brand file ID" },
|
|
51422
51431
|
{ name: "force", type: "boolean", description: "Replace existing files" }
|
|
51423
|
-
).action(async ({ args, flags, stdout, signal }) => out(stdout, await downloadBrand(new Client(flags.url, signal), args.id, flags.output, flags)))))).command("library", (library) => library.add(defineCommand("search", { description: "Search the asset library (
|
|
51432
|
+
).action(async ({ args, flags, stdout, signal }) => out(stdout, await downloadBrand(new Client(flags.url, signal), args.id, flags.output, flags)))))).command("library", (library) => library.add(defineCommand("search", { description: "Search the asset library (every plan, including the Starter trial): ready-made sprites, images, videos, music, speech and sound effects, by natural language and keywords" }, (command) => command.args({ name: "query", type: "string", variadic: true, description: "What you need, e.g. whoosh transition, upbeat piano background, pixel knight" }).flags(
|
|
51424
51433
|
urlFlag,
|
|
51425
51434
|
{ name: "type", type: "string", choices: LIBRARY_ASSET_TYPES, description: "Only this type" },
|
|
51426
51435
|
{ name: "labels", type: "string", description: "Comma-separated labels every result must have, e.g. loop,transparent" },
|
package/package.json
CHANGED
|
@@ -92,7 +92,7 @@ Before choreographing a scene from scratch, search the AnimaGuru motion library
|
|
|
92
92
|
|
|
93
93
|
## Asset library
|
|
94
94
|
|
|
95
|
-
Pro and Team
|
|
95
|
+
Every plan (Individual Starter and its trial, Individual Pro, Team), and members of a team on the Team plan, can take ready-made music, sound effects, voice-overs, clips, images and sprites from the AnimaGuru asset library instead of generating them: `animaguru library search DESCRIPTION --type music|sfx|speech|video|image|sprite` (natural language and keywords). `animaguru library download ID --output public/assets/` saves a file into the film (sprites save their sheets with `animation.json` frame rectangles and timing); `animaguru library import ID --project PROJECT_ID` adds it to an AnimaGuru project's assets instead. Prefer a library whoosh or background track over generating one; it spends no credits.
|
|
96
96
|
|
|
97
97
|
## Vectors
|
|
98
98
|
|
|
@@ -118,4 +118,4 @@ After signing in with `animaguru auth login`, run `animaguru submit --yes` here
|
|
|
118
118
|
|
|
119
119
|
## Cloud versions
|
|
120
120
|
|
|
121
|
-
On Individual Pro or Team, `animaguru cloud link` syncs this folder with a new AnimaGuru project, or with an existing one through `--project PROJECT_ID`. `animaguru cloud push -m "What changed"` then saves a version, `animaguru cloud pull` brings in versions saved elsewhere, and `animaguru cloud clone PROJECT_ID` continues on another computer. `animaguru cloud restore VERSION` returns to an earlier version; push afterwards to keep it. Dependencies, exports, frames, `.env` files, credentials and anything in `.gitignore` or `.animaguruignore` stay local. The project's Animations tab in the studio lists every version and its files.
|
|
121
|
+
On any plan (Individual Starter, including its 7-day trial, Individual Pro or Team), `animaguru cloud link` syncs this folder with a new AnimaGuru project, or with an existing one through `--project PROJECT_ID`. `animaguru cloud push -m "What changed"` then saves a version, `animaguru cloud pull` brings in versions saved elsewhere, and `animaguru cloud clone PROJECT_ID` continues on another computer. `animaguru cloud restore VERSION` returns to an earlier version; push afterwards to keep it. Dependencies, exports, frames, `.env` files, credentials and anything in `.gitignore` or `.animaguruignore` stay local. The project's Animations tab in the studio lists every version and its files.
|