codeboard-studio 0.2.1 → 0.3.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/NOTICE CHANGED
@@ -1,23 +1,23 @@
1
- Codeboard — MIT-licensed implementation.
2
-
3
- Runtime dependencies:
4
- - skia-canvas: MIT
5
- - sharp: Apache-2.0 (bundled libvips and codecs carry their own notices)
6
- - commander: MIT
7
- - zod: MIT
8
- - fflate: MIT
9
- - fast-xml-parser: MIT
10
- - SQLite through Node.js: SQLite is public domain; see Node distribution notices.
11
-
12
- Skia uses a BSD-style license and bundled third-party notices. Consult installed
13
- dependency distributions and https://skia.org/docs/user/license/.
14
- FFmpeg is external and is not bundled; the installed FFmpeg build determines
15
- its applicable LGPL/GPL notices and codecs.
16
-
17
- Original example artwork, synthesized audio, and torn-feather bitmap tip are
18
- dedicated to the public domain under CC0-1.0. Example source code is MIT.
19
- https://creativecommons.org/publicdomain/zero/1.0/
20
-
21
- No Toon Boom assets, Photoshop brushes, GIMP brushes, or Krita resources are
22
- included in the npm distribution. Third-party files under ignored tmp/ were
23
- used only for import evaluation; their redistribution rights are not assumed.
1
+ Codeboard — MIT-licensed implementation.
2
+
3
+ Runtime dependencies:
4
+ - skia-canvas: MIT
5
+ - sharp: Apache-2.0 (bundled libvips and codecs carry their own notices)
6
+ - commander: MIT
7
+ - zod: MIT
8
+ - fflate: MIT
9
+ - fast-xml-parser: MIT
10
+ - SQLite through Node.js: SQLite is public domain; see Node distribution notices.
11
+
12
+ Skia uses a BSD-style license and bundled third-party notices. Consult installed
13
+ dependency distributions and https://skia.org/docs/user/license/.
14
+ FFmpeg is external and is not bundled; the installed FFmpeg build determines
15
+ its applicable LGPL/GPL notices and codecs.
16
+
17
+ Original example artwork, synthesized audio, and torn-feather bitmap tip are
18
+ dedicated to the public domain under CC0-1.0. Example source code is MIT.
19
+ https://creativecommons.org/publicdomain/zero/1.0/
20
+
21
+ No Toon Boom assets, Photoshop brushes, GIMP brushes, or Krita resources are
22
+ included in the npm distribution. Third-party files under ignored tmp/ were
23
+ used only for import evaluation; their redistribution rights are not assumed.
package/README.md CHANGED
@@ -6,23 +6,18 @@ Codeboard is a JavaScript/TypeScript toolkit for drawing, storyboards, and 2D an
6
6
 
7
7
  The [agent skills](docs/agent-plugin.md) guide drawing, brushes, storyboards, animation, camera, audio, revision, review, and debugging. Install the plugin in Codex or Claude Code, or copy the complete skill folders into another compatible Agent Skills host. The source and bundled offline reference live under `plugin/`.
8
8
 
9
- [Website](https://codeboard.nonom.xyz) · [Documentation](https://codeboard.nonom.xyz/docs/) · [Examples](https://codeboard.nonom.xyz/examples/) · [GitHub Releases](https://github.com/nonomnonom/codeboard/releases/latest)
9
+ [Website](https://codeboard.nonom.xyz) · [Documentation](https://codeboard.nonom.xyz/docs/) · [Examples](https://codeboard.nonom.xyz/examples/) · [npm package](https://www.npmjs.com/package/codeboard-studio)
10
10
 
11
11
  ## Install
12
12
 
13
- macOS or Linux:
13
+ Install Node.js 22.22 or later and npm, then run on Windows, macOS, or Linux:
14
14
 
15
15
  ```sh
16
- curl -fsSL https://codeboard.nonom.xyz/install.sh | sh
16
+ npm install -g codeboard-studio
17
+ codeboard --version
17
18
  ```
18
19
 
19
- Windows, in 64-bit PowerShell:
20
-
21
- ```powershell
22
- & ([scriptblock]::Create((Invoke-RestMethod https://codeboard.nonom.xyz/install.ps1)))
23
- ```
24
-
25
- The installer downloads a GitHub release, verifies its checksum, and sets up the `codeboard` command. Node is included; no npm account is required. [Supported systems and installation options](docs/install.md).
20
+ For a project dependency, use `npm install --save-exact codeboard-studio` and run the CLI with `npx codeboard`. The same package exports the JavaScript/TypeScript library. [Installation, updates, and migration](docs/install.md).
26
21
 
27
22
  ## Draw something
28
23
 
package/dist/src/cli.js CHANGED
@@ -7,7 +7,6 @@ import { writeFile } from "node:fs/promises";
7
7
  import { spawn } from "node:child_process";
8
8
  import { fileURLToPath } from "node:url";
9
9
  import { starter } from "./starter.js";
10
- import { confirmUpdate, installUpdate, latestRelease, newerRelease, notifyUpdate } from "./updates.js";
11
10
  import { exportMovie } from "./export/movie-export.js";
12
11
  import { StoryboardProject } from "./core/project.js";
13
12
  import { exportStoryboard } from "./export/storyboard-export.js";
@@ -23,29 +22,6 @@ const program = new Command()
23
22
  .enablePositionalOptions()
24
23
  .description("Draw, animate, and render through JavaScript or TypeScript")
25
24
  .version(version);
26
- program.hook("preAction", async (_command, action) => {
27
- if (action.name() !== "update")
28
- await notifyUpdate(packagePath, version);
29
- });
30
- program.command("update")
31
- .description("Check for and install the latest stable GitHub release")
32
- .option("--check", "Check without installing")
33
- .option("-y, --yes", "Install without an interactive confirmation")
34
- .action(async (options) => {
35
- try {
36
- const latest = await latestRelease();
37
- if (!newerRelease(latest, version)) {
38
- console.log(`Codeboard ${version} is up to date (latest stable: ${latest}).`);
39
- return;
40
- }
41
- console.log(`Codeboard ${latest} is available (installed: ${version}).`);
42
- if (!options.check && (options.yes || await confirmUpdate()))
43
- await installUpdate(packagePath, version, latest);
44
- }
45
- catch (error) {
46
- program.error(error instanceof Error ? error.message : String(error));
47
- }
48
- });
49
25
  program.command("init")
50
26
  .argument("[file]", "New JavaScript authoring file", "scene.mjs")
51
27
  .action(async (file) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -46,17 +46,17 @@ export class ProjectStore {
46
46
  const version = Number(this.db.prepare("PRAGMA user_version").get().user_version);
47
47
  const app = Number(this.db.prepare("PRAGMA application_id").get().application_id);
48
48
  if (version === 0 && app === 0 && create && !this.db.prepare("SELECT name FROM sqlite_master WHERE type='table'").get()) {
49
- this.db.exec(`BEGIN IMMEDIATE;
50
- PRAGMA application_id=${APPLICATION_ID}; PRAGMA user_version=${FORMAT_VERSION};
51
- CREATE TABLE payloads(hash TEXT PRIMARY KEY,kind TEXT NOT NULL,codec TEXT NOT NULL CHECK(codec IN ('br','raw')),raw_size INTEGER NOT NULL CHECK(raw_size>=0),data BLOB NOT NULL);
52
- CREATE TABLE roots(key TEXT PRIMARY KEY,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
53
- CREATE TABLE payload_links(parent TEXT NOT NULL REFERENCES payloads(hash) ON DELETE CASCADE,child TEXT NOT NULL REFERENCES payloads(hash) ON DELETE CASCADE,PRIMARY KEY(parent,child)) WITHOUT ROWID;
54
- CREATE TABLE panels(id TEXT PRIMARY KEY,position INTEGER NOT NULL,info TEXT NOT NULL,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
55
- CREATE TABLE components(id TEXT PRIMARY KEY,position INTEGER NOT NULL,info TEXT NOT NULL,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
56
- CREATE TABLE objects(id TEXT PRIMARY KEY,panel_id TEXT NOT NULL REFERENCES panels(id) ON DELETE CASCADE,name TEXT NOT NULL,kind TEXT NOT NULL) WITHOUT ROWID;
57
- CREATE INDEX objects_panel ON objects(panel_id);
58
- CREATE TABLE assets(id TEXT PRIMARY KEY,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
59
- CREATE TABLE changes(position INTEGER PRIMARY KEY,entry TEXT NOT NULL);
49
+ this.db.exec(`BEGIN IMMEDIATE;
50
+ PRAGMA application_id=${APPLICATION_ID}; PRAGMA user_version=${FORMAT_VERSION};
51
+ CREATE TABLE payloads(hash TEXT PRIMARY KEY,kind TEXT NOT NULL,codec TEXT NOT NULL CHECK(codec IN ('br','raw')),raw_size INTEGER NOT NULL CHECK(raw_size>=0),data BLOB NOT NULL);
52
+ CREATE TABLE roots(key TEXT PRIMARY KEY,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
53
+ CREATE TABLE payload_links(parent TEXT NOT NULL REFERENCES payloads(hash) ON DELETE CASCADE,child TEXT NOT NULL REFERENCES payloads(hash) ON DELETE CASCADE,PRIMARY KEY(parent,child)) WITHOUT ROWID;
54
+ CREATE TABLE panels(id TEXT PRIMARY KEY,position INTEGER NOT NULL,info TEXT NOT NULL,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
55
+ CREATE TABLE components(id TEXT PRIMARY KEY,position INTEGER NOT NULL,info TEXT NOT NULL,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
56
+ CREATE TABLE objects(id TEXT PRIMARY KEY,panel_id TEXT NOT NULL REFERENCES panels(id) ON DELETE CASCADE,name TEXT NOT NULL,kind TEXT NOT NULL) WITHOUT ROWID;
57
+ CREATE INDEX objects_panel ON objects(panel_id);
58
+ CREATE TABLE assets(id TEXT PRIMARY KEY,hash TEXT NOT NULL REFERENCES payloads(hash)) WITHOUT ROWID;
59
+ CREATE TABLE changes(position INTEGER PRIMARY KEY,entry TEXT NOT NULL);
60
60
  COMMIT;`);
61
61
  }
62
62
  else if (version !== FORMAT_VERSION || app !== APPLICATION_ID)
@@ -344,10 +344,10 @@ export class ProjectStore {
344
344
  compact() {
345
345
  this.db.exec("BEGIN IMMEDIATE");
346
346
  try {
347
- this.db.exec(`
348
- WITH RECURSIVE live(hash) AS (
349
- SELECT hash FROM roots UNION SELECT hash FROM panels UNION SELECT hash FROM components UNION SELECT hash FROM assets
350
- UNION SELECT child FROM payload_links JOIN live ON parent=live.hash
347
+ this.db.exec(`
348
+ WITH RECURSIVE live(hash) AS (
349
+ SELECT hash FROM roots UNION SELECT hash FROM panels UNION SELECT hash FROM components UNION SELECT hash FROM assets
350
+ UNION SELECT child FROM payload_links JOIN live ON parent=live.hash
351
351
  ) DELETE FROM payloads WHERE hash NOT IN (SELECT hash FROM live);`);
352
352
  this.db.exec("COMMIT");
353
353
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeboard-studio",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Code-first drawing and storyboard tools for JavaScript and TypeScript",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,7 +37,6 @@
37
37
  ],
38
38
  "scripts": {
39
39
  "build": "node scripts/build.mjs",
40
- "package:portable": "npm run build && node scripts/build-portable.mjs",
41
40
  "test": "vitest run",
42
41
  "test:package": "node scripts/verify-package.mjs",
43
42
  "test:install": "node scripts/verify-package.mjs --install",
@@ -69,16 +68,18 @@
69
68
  "commander": "^14.0.1",
70
69
  "fast-xml-parser": "^5.11.2",
71
70
  "fflate": "^0.8.3",
72
- "semver": "^7.8.5",
73
71
  "sharp": "^0.35.5",
74
72
  "skia-canvas": "^3.0.8",
75
73
  "zod": "^4.1.12"
76
74
  },
77
75
  "devDependencies": {
78
76
  "@types/node": "^24.7.0",
79
- "@types/semver": "^7.8.0",
80
77
  "tsx": "^4.20.6",
81
78
  "typescript": "^5.9.3",
82
79
  "vitest": "^4.1.11"
80
+ },
81
+ "publishConfig": {
82
+ "access": "public",
83
+ "registry": "https://registry.npmjs.org/"
83
84
  }
84
85
  }
@@ -1,10 +0,0 @@
1
- export declare function newerRelease(latest: string, current: string): boolean;
2
- export declare function latestRelease(timeout?: number): Promise<string>;
3
- export declare function updateCachePath(): string;
4
- export declare function cachedRelease(cachePath: string): Promise<string | undefined>;
5
- export declare function confirmUpdate(): Promise<boolean>;
6
- export declare function notifyUpdate(packagePath: string, version: string): Promise<void>;
7
- export declare function installationArguments(packagePath: string, current: string, latest: string): Promise<string[]>;
8
- export declare function verifyInstaller(bytes: Uint8Array, checksums: string, name: string): void;
9
- export declare function installUpdate(packagePath: string, current: string, latest: string): Promise<void>;
10
- //# sourceMappingURL=updates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../../src/updates.ts"],"names":[],"mappings":"AAWA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGrE;AAQD,wBAAsB,aAAa,CAAC,OAAO,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpE;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkBlF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatF;AAED,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKxF;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBvG"}
@@ -1,134 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { mkdtemp, mkdir, readFile, writeFile, rename, rm } from "node:fs/promises";
3
- import { dirname, basename, join } from "node:path";
4
- import { homedir, tmpdir } from "node:os";
5
- import { spawn } from "node:child_process";
6
- import { createInterface } from "node:readline/promises";
7
- import { gt, valid } from "semver";
8
- const repository = "https://github.com/nonomnonom/codeboard";
9
- const stableVersion = (value) => valid(value) === value && !value.includes("-") && !value.includes("+");
10
- export function newerRelease(latest, current) {
11
- if (!stableVersion(latest))
12
- throw new Error("GitHub returned an invalid stable release version.");
13
- return valid(current) !== null && gt(latest, current);
14
- }
15
- async function download(url, timeout) {
16
- const response = await fetch(url, { signal: AbortSignal.timeout(timeout), headers: { "User-Agent": "Codeboard CLI", Accept: "application/vnd.github+json" } });
17
- if (!response.ok)
18
- throw new Error(`Update request failed (HTTP ${response.status}). Try again later.`);
19
- return response;
20
- }
21
- export async function latestRelease(timeout = 10000) {
22
- const response = await download("https://api.github.com/repos/nonomnonom/codeboard/releases/latest", timeout);
23
- const release = await response.json();
24
- if (typeof release.tag_name !== "string" || !release.tag_name.startsWith("v") || !stableVersion(release.tag_name.slice(1)) || release.draft || release.prerelease) {
25
- throw new Error("GitHub did not return a stable Codeboard release.");
26
- }
27
- return release.tag_name.slice(1);
28
- }
29
- export function updateCachePath() {
30
- const root = process.platform === "win32" ? process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local") : process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache");
31
- return join(root, "codeboard", "update-check.json");
32
- }
33
- export async function cachedRelease(cachePath) {
34
- const now = Date.now();
35
- try {
36
- const cache = JSON.parse(await readFile(cachePath, "utf8"));
37
- if (Number.isFinite(cache.checkedAt) && now >= cache.checkedAt && now - cache.checkedAt < 86400000) {
38
- return typeof cache.latest === "string" && stableVersion(cache.latest) ? cache.latest : undefined;
39
- }
40
- }
41
- catch { /* A missing or damaged cache is safe to rebuild. */ }
42
- let latest;
43
- try {
44
- latest = await latestRelease(1500);
45
- }
46
- catch { /* Offline commands still run; retry tomorrow. */ }
47
- const temporary = `${cachePath}.${process.pid}.tmp`;
48
- try {
49
- await mkdir(dirname(cachePath), { recursive: true });
50
- await writeFile(temporary, JSON.stringify({ checkedAt: now, latest }));
51
- await rename(temporary, cachePath);
52
- }
53
- catch { /* Update checks do not require a writable cache. */ }
54
- finally {
55
- await rm(temporary, { force: true }).catch(() => { });
56
- }
57
- return latest;
58
- }
59
- export async function confirmUpdate() {
60
- if (!process.stdin.isTTY || !process.stderr.isTTY || process.env.CI) {
61
- throw new Error("Update needs confirmation in an interactive terminal. To install from a script, use codeboard update --yes.");
62
- }
63
- const terminal = createInterface({ input: process.stdin, output: process.stderr });
64
- try {
65
- return /^(y|yes)$/i.test((await terminal.question("Install update? [y/N] ")).trim());
66
- }
67
- finally {
68
- terminal.close();
69
- }
70
- }
71
- export async function notifyUpdate(packagePath, version) {
72
- if (!process.stdin.isTTY || !process.stdout.isTTY || !process.stderr.isTTY || process.env.CI || process.env.CODEBOARD_NO_UPDATE_CHECK === "1")
73
- return;
74
- const latest = await cachedRelease(updateCachePath());
75
- if (!latest || !newerRelease(latest, version))
76
- return;
77
- process.stderr.write(`Codeboard ${latest} is available (installed: ${version}).\n`);
78
- try {
79
- await installationArguments(packagePath, version, latest);
80
- }
81
- catch {
82
- process.stderr.write("Update this copy using https://codeboard.nonom.xyz/docs/install/\n");
83
- return;
84
- }
85
- try {
86
- if (await confirmUpdate()) {
87
- await installUpdate(packagePath, version, latest);
88
- process.stderr.write(`Update installed. This command continues with ${version}; new commands use ${latest}.\n`);
89
- }
90
- }
91
- catch (error) {
92
- process.stderr.write(`Could not update: ${error instanceof Error ? error.message : String(error)}\n`);
93
- }
94
- }
95
- export async function installationArguments(packagePath, current, latest) {
96
- const directory = dirname(packagePath);
97
- if (basename(dirname(directory)) !== "versions" || basename(directory) !== current || (await readFile(join(directory, ".codeboard-install"), "utf8").catch(() => "")).trim() !== current) {
98
- throw new Error("This copy is not managed by the Codeboard installer. Install or update it using https://codeboard.nonom.xyz/docs/install/");
99
- }
100
- const root = dirname(dirname(directory));
101
- if (process.platform === "win32")
102
- return ["-Version", latest, "-InstallDir", root, "-NoModifyPath"];
103
- return ["--version", latest, "--no-modify-path", ...(root === join(homedir(), ".local", "share", "codeboard") ? [] : ["--prefix", root])];
104
- }
105
- export function verifyInstaller(bytes, checksums, name) {
106
- const matches = checksums.split(/\r?\n/).map(line => /^([a-fA-F0-9]{64})\s+\*?(.+)$/.exec(line)).filter(match => match?.[2] === name);
107
- if (matches.length !== 1 || createHash("sha256").update(bytes).digest("hex") !== matches[0][1].toLowerCase()) {
108
- throw new Error("Installer checksum mismatch. Nothing was installed.");
109
- }
110
- }
111
- export async function installUpdate(packagePath, current, latest) {
112
- if (!stableVersion(latest))
113
- throw new Error("Invalid release version.");
114
- const args = await installationArguments(packagePath, current, latest);
115
- const name = process.platform === "win32" ? "install.ps1" : "install.sh";
116
- const base = `${repository}/releases/download/v${latest}`;
117
- const bytes = new Uint8Array(await (await download(`${base}/${name}`, 30000)).arrayBuffer());
118
- const checksums = await (await download(`${base}/SHA256SUMS`, 30000)).text();
119
- verifyInstaller(bytes, checksums, name);
120
- const directory = await mkdtemp(join(tmpdir(), "codeboard-update-"));
121
- try {
122
- const script = join(directory, name);
123
- await writeFile(script, bytes);
124
- const windows = process.platform === "win32";
125
- const child = spawn(windows ? "powershell.exe" : "sh", windows ? ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", script, ...args] : [script, ...args], { stdio: "inherit", windowsHide: true });
126
- const code = await new Promise((accept, reject) => { child.once("error", reject); child.once("exit", accept); });
127
- if (code !== 0)
128
- throw new Error("Update did not complete. Retry codeboard update; your previous version is retained.");
129
- }
130
- finally {
131
- await rm(directory, { recursive: true, force: true });
132
- }
133
- }
134
- //# sourceMappingURL=updates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/updates.ts"],"names":[],"mappings":"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"}