@rwoll/canvas-kit 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +506 -2
- package/cli/canvas-kit.mjs +148 -0
- package/cli/lib.mjs +697 -0
- package/cli/release.json +4 -0
- package/dist/client.d.ts +72 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +156 -0
- package/dist/client.js.map +1 -0
- package/dist/define.d.ts +249 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +197 -0
- package/dist/define.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/extension.d.ts +25 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +70 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs.d.ts +56 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +33 -0
- package/dist/jobs.js.map +1 -0
- package/dist/playwright.d.ts +79 -0
- package/dist/playwright.d.ts.map +1 -0
- package/dist/playwright.js +124 -0
- package/dist/playwright.js.map +1 -0
- package/dist/react.d.ts +55 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +72 -0
- package/dist/react.js.map +1 -0
- package/dist/server/headless.d.ts +20 -0
- package/dist/server/headless.d.ts.map +1 -0
- package/dist/server/headless.js +35 -0
- package/dist/server/headless.js.map +1 -0
- package/dist/server/host.d.ts +146 -0
- package/dist/server/host.d.ts.map +1 -0
- package/dist/server/host.js +1078 -0
- package/dist/server/host.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/release.d.ts +30 -0
- package/dist/server/release.d.ts.map +1 -0
- package/dist/server/release.js +71 -0
- package/dist/server/release.js.map +1 -0
- package/dist/server/storage.d.ts +63 -0
- package/dist/server/storage.d.ts.map +1 -0
- package/dist/server/storage.js +253 -0
- package/dist/server/storage.js.map +1 -0
- package/dist/testing.d.ts +49 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +42 -0
- package/dist/testing.js.map +1 -0
- package/dist/vite.d.ts +15 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +213 -0
- package/dist/vite.js.map +1 -0
- package/package.json +115 -3
- package/styles.css +122 -0
- package/templates/canvas/README.md +19 -0
- package/templates/canvas/e2e/canvas.spec.ts +15 -0
- package/templates/canvas/index.html +13 -0
- package/templates/canvas/package.json +29 -0
- package/templates/canvas/playwright.config.ts +5 -0
- package/templates/canvas/server/canvas.test.ts +22 -0
- package/templates/canvas/server/canvas.ts +27 -0
- package/templates/canvas/src/App.css +21 -0
- package/templates/canvas/src/App.tsx +31 -0
- package/templates/canvas/src/index.css +3 -0
- package/templates/canvas/src/main.tsx +11 -0
- package/templates/canvas/tsconfig.app.json +1 -0
- package/templates/canvas/tsconfig.json +7 -0
- package/templates/canvas/tsconfig.node.json +1 -0
- package/templates/canvas/vite.config.ts +7 -0
- package/templates/ui/README.md +18 -0
- package/templates/ui/package.json +22 -0
- package/templates/ui/src/Checklist.tsx +42 -0
- package/templates/ui/src/Header.tsx +17 -0
- package/templates/ui/src/Markdown.tsx +140 -0
- package/templates/ui/src/TextButton.tsx +6 -0
- package/templates/ui/src/index.ts +4 -0
- package/templates/ui/theme.css +143 -0
- package/templates/ui/tsconfig.json +18 -0
- package/tsconfig/canvas.json +27 -0
- package/tsconfig/node.json +24 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { basename, resolve } from 'node:path';
|
|
3
|
+
import { parseArgs } from 'node:util';
|
|
4
|
+
import { CliError, addUiPackage, buildMarketplace, initMarketplace, kitVersion, newCanvas, release, runJob } from './lib.mjs';
|
|
5
|
+
|
|
6
|
+
const USAGE = `Usage: canvas-kit <command> [options]
|
|
7
|
+
|
|
8
|
+
Commands:
|
|
9
|
+
init <dir> --repository <owner/name> [--name <name>] [--owner <name>] [--canvas <name>]
|
|
10
|
+
Create a plugin marketplace repository with a shared ui/ package, optionally with a first canvas.
|
|
11
|
+
new <name> [--title <text>] [--description <text>] [--id <canvas-id>] [--catalog] [--kit <range>]
|
|
12
|
+
Add a canvas package under canvases/. --catalog writes pnpm catalog: ranges;
|
|
13
|
+
--kit sets the @rwoll/canvas-kit range, for example workspace:*. New canvases use the
|
|
14
|
+
marketplace's shared UI package when marketplace.config.json names one.
|
|
15
|
+
ui <package-name> [--catalog]
|
|
16
|
+
Add a shared package of React components and a theme (ui/) that new canvases use.
|
|
17
|
+
build
|
|
18
|
+
Assemble dist/marketplace from plugins/ and the built canvases.
|
|
19
|
+
release [--dry-run] [--skip-checks] [--footer <text>]... [--bundle <file> [--github-output]]
|
|
20
|
+
Build the source branch in a clean worktree and publish it to the publish branch.
|
|
21
|
+
With --bundle, write the prepared commit to a git bundle instead of pushing it;
|
|
22
|
+
--github-output also writes the commit and branch step outputs.
|
|
23
|
+
run [job] [--plugin <folder>] [--canvas <name>] [--key <key>] [--force] [--data-root <folder>]
|
|
24
|
+
Run a canvas's due jobs for its saved documents, with no chat open: every job,
|
|
25
|
+
or one job by name or ID. For launchd, cron, or Task Scheduler. --plugin
|
|
26
|
+
defaults to ./dist/plugin.
|
|
27
|
+
|
|
28
|
+
Options:
|
|
29
|
+
--cwd <dir> Marketplace folder (default: current folder)
|
|
30
|
+
-h, --help Show this help
|
|
31
|
+
-v, --version Show the canvas-kit version
|
|
32
|
+
|
|
33
|
+
The marketplace folder holds marketplace.config.json.`;
|
|
34
|
+
|
|
35
|
+
async function main(argv) {
|
|
36
|
+
const { values, positionals } = parseArgs({
|
|
37
|
+
args: argv,
|
|
38
|
+
allowPositionals: true,
|
|
39
|
+
options: {
|
|
40
|
+
cwd: { type: 'string' },
|
|
41
|
+
help: { type: 'boolean', short: 'h' },
|
|
42
|
+
version: { type: 'boolean', short: 'v' },
|
|
43
|
+
title: { type: 'string' },
|
|
44
|
+
description: { type: 'string' },
|
|
45
|
+
id: { type: 'string' },
|
|
46
|
+
catalog: { type: 'boolean' },
|
|
47
|
+
kit: { type: 'string' },
|
|
48
|
+
name: { type: 'string' },
|
|
49
|
+
owner: { type: 'string' },
|
|
50
|
+
repository: { type: 'string' },
|
|
51
|
+
canvas: { type: 'string' },
|
|
52
|
+
'dry-run': { type: 'boolean' },
|
|
53
|
+
'skip-checks': { type: 'boolean' },
|
|
54
|
+
footer: { type: 'string', multiple: true },
|
|
55
|
+
bundle: { type: 'string' },
|
|
56
|
+
'github-output': { type: 'boolean' },
|
|
57
|
+
plugin: { type: 'string' },
|
|
58
|
+
key: { type: 'string' },
|
|
59
|
+
force: { type: 'boolean' },
|
|
60
|
+
'data-root': { type: 'string' },
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const [command, ...rest] = positionals;
|
|
64
|
+
if (values.version) return console.log(await kitVersion());
|
|
65
|
+
if (values.help || !command) return console.log(USAGE);
|
|
66
|
+
const dir = resolve(values.cwd ?? '.');
|
|
67
|
+
|
|
68
|
+
switch (command) {
|
|
69
|
+
case 'init': {
|
|
70
|
+
const [target] = rest;
|
|
71
|
+
if (!target) throw new CliError('init needs a folder, for example `canvas-kit init my-marketplace --repository me/my-marketplace`');
|
|
72
|
+
if (!values.repository) throw new CliError('init needs --repository <owner/name>');
|
|
73
|
+
const folder = resolve(dir, target);
|
|
74
|
+
const name = values.name ?? basename(folder);
|
|
75
|
+
const owner = values.owner ?? values.repository.split('/')[0];
|
|
76
|
+
const { canvas } = await initMarketplace(folder, { name, owner, repository: values.repository, canvas: values.canvas });
|
|
77
|
+
console.log(`Created ${name} in ${folder}${canvas ? ` with the ${canvas.name} canvas` : ''}.\n\nNext:\n cd ${target}\n pnpm install\n pnpm check`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
case 'new': {
|
|
81
|
+
const [name] = rest;
|
|
82
|
+
if (!name) throw new CliError('new needs a canvas name, for example `canvas-kit new release-board`');
|
|
83
|
+
const canvas = await newCanvas(dir, name, {
|
|
84
|
+
title: values.title,
|
|
85
|
+
description: values.description,
|
|
86
|
+
id: values.id,
|
|
87
|
+
dependencies: values.catalog ? 'catalog' : 'ranges',
|
|
88
|
+
kitRange: values.kit,
|
|
89
|
+
});
|
|
90
|
+
console.log(`Created ${canvas.dir} (canvas id "${canvas.id}"). Run your package manager's install, then its dev script.`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
case 'ui': {
|
|
94
|
+
const [name] = rest;
|
|
95
|
+
if (!name) throw new CliError('ui needs a package name, for example `canvas-kit ui @acme/ui`');
|
|
96
|
+
const ui = await addUiPackage(dir, name, { dependencies: values.catalog ? 'catalog' : 'ranges' });
|
|
97
|
+
console.log(
|
|
98
|
+
`Created ${ui.dir} (${ui.name}) and recorded it in marketplace.config.json.` +
|
|
99
|
+
(ui.workspaceUpdated ? ' Added it to pnpm-workspace.yaml.' : ' Add its folder to your workspace packages.') +
|
|
100
|
+
`\nImport ${ui.name}/theme.css in each canvas's src/main.tsx; new canvases do this for you.`,
|
|
101
|
+
);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
case 'build': {
|
|
105
|
+
const { catalog, outDir } = await buildMarketplace(dir);
|
|
106
|
+
console.log(`Built ${catalog.name} with ${catalog.plugins.length} plugins in ${outDir}:`);
|
|
107
|
+
for (const plugin of catalog.plugins) console.log(` ${plugin.name}@${plugin.version}`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
case 'run': {
|
|
111
|
+
const [job] = rest;
|
|
112
|
+
const outcomes = await runJob(dir, job, {
|
|
113
|
+
plugin: values.plugin,
|
|
114
|
+
canvas: values.canvas,
|
|
115
|
+
key: values.key,
|
|
116
|
+
force: values.force,
|
|
117
|
+
dataRoot: values['data-root'],
|
|
118
|
+
log: (message, level) => console.error(`[${level}] ${message}`),
|
|
119
|
+
});
|
|
120
|
+
if (outcomes.length === 0) console.log('Nothing to run: no saved document has this job yet.');
|
|
121
|
+
for (const outcome of outcomes) {
|
|
122
|
+
const result = outcome.error ? `failed: ${outcome.error}` : outcome.ran ? 'ran' : outcome.paused ? 'paused' : 'not due';
|
|
123
|
+
console.log(`${outcome.key} ${outcome.id ?? outcome.job}: ${result}`);
|
|
124
|
+
}
|
|
125
|
+
if (outcomes.some(outcome => outcome.error)) process.exitCode = 1;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
case 'release':
|
|
129
|
+
await release(dir, {
|
|
130
|
+
dryRun: values['dry-run'],
|
|
131
|
+
skipChecks: values['skip-checks'],
|
|
132
|
+
footer: values.footer ?? [],
|
|
133
|
+
bundle: values.bundle,
|
|
134
|
+
githubOutput: values['github-output'],
|
|
135
|
+
});
|
|
136
|
+
return;
|
|
137
|
+
default:
|
|
138
|
+
throw new CliError(`unknown command "${command}"\n\n${USAGE}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
main(process.argv.slice(2)).catch(error => {
|
|
143
|
+
if (error instanceof CliError || error?.code === 'ERR_PARSE_ARGS_UNKNOWN_OPTION') {
|
|
144
|
+
console.error(`canvas-kit: ${error.message}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
});
|