handoff-app 2.0.0-8 → 2.0.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/{Changelog.md → CHANGELOG.md} +85 -1
- package/{License.md → LICENSE.md} +1 -1
- package/README.md +816 -393
- package/RECIPES.md +975 -0
- package/UPGRADE.md +57 -9
- package/components.json +20 -20
- package/config/docs/foundations/colors/guidelines.md +0 -1
- package/config/docs/foundations/colors.md +0 -1
- package/config/docs/foundations/effects/guidelines.md +0 -1
- package/config/docs/foundations/effects/resources.md +0 -1
- package/config/docs/foundations/effects.md +0 -1
- package/config/docs/foundations/fonts.md +0 -1
- package/config/docs/foundations/grid.md +0 -1
- package/config/docs/foundations/icon.md +0 -1
- package/config/docs/foundations/icons/guidelines.md +0 -1
- package/config/docs/foundations/icons.md +0 -1
- package/config/docs/foundations/images/guidelines.md +0 -1
- package/config/docs/foundations/images/resources.md +0 -1
- package/config/docs/foundations/images.md +0 -1
- package/config/docs/foundations/logo/resources.md +0 -1
- package/config/docs/foundations/logo.md +0 -1
- package/config/docs/foundations/typography/guidelines.md +0 -1
- package/config/docs/foundations/typography/resources.md +0 -1
- package/config/docs/foundations/typography.md +0 -1
- package/config/docs/foundations.md +0 -1
- package/config/docs/guidelines.md +0 -1
- package/config/docs/index.md +0 -1
- package/config/docs/system/tokens/foundations/colors.md +0 -4
- package/config/docs/system/tokens/foundations/effects.md +0 -4
- package/config/docs/system/tokens/foundations/typography.md +0 -2
- package/config/docs/system.md +0 -2
- package/config/templates/page.md +2 -1
- package/config/templates/page.mdx +2 -1
- package/dist/ai/connections.d.ts +66 -0
- package/dist/ai/connections.js +149 -0
- package/dist/ai/define.d.ts +10 -0
- package/dist/ai/define.js +13 -0
- package/dist/ai/types.d.ts +26 -0
- package/dist/ai/types.js +10 -0
- package/dist/app-builder/build.d.ts +14 -7
- package/dist/app-builder/build.js +195 -66
- package/dist/app-builder/client-config.js +3 -2
- package/dist/app-builder/paths.d.ts +0 -12
- package/dist/app-builder/paths.js +3 -20
- package/dist/app-builder/static-export.js +1 -1
- package/dist/app-builder/vercel-output.d.ts +1 -1
- package/dist/app-builder/vercel-output.js +5 -4
- package/dist/cache/build-cache.d.ts +27 -4
- package/dist/cache/build-cache.js +114 -47
- package/dist/cache/build-inputs.d.ts +13 -0
- package/dist/cache/build-inputs.js +19 -0
- package/dist/cache/index.d.ts +2 -1
- package/dist/cache/index.js +5 -1
- package/dist/catalog/normalize.js +3 -0
- package/dist/catalog/previews.js +5 -4
- package/dist/catalog/types.d.ts +8 -0
- package/dist/cli/create.js +1 -2
- package/dist/commands/build/index.d.ts +1 -1
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/utils.d.ts +3 -3
- package/dist/config/defaults.js +7 -4
- package/dist/config/from-env.d.ts +4 -0
- package/dist/config/from-env.js +38 -1
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +1 -4
- package/dist/config/loader.js +28 -2
- package/dist/config/resolve-env.d.ts +2 -1
- package/dist/config/resolve-env.js +28 -12
- package/dist/config/runtime.js +9 -11
- package/dist/handlebars.d.ts +10 -2
- package/dist/index.d.ts +12 -7
- package/dist/index.js +18 -22
- package/dist/nav/index.d.ts +2 -2
- package/dist/nav/registry.d.ts +3 -3
- package/dist/nav/registry.js +1 -1
- package/dist/nav/workspace.d.ts +3 -3
- package/dist/nav/workspace.js +1 -1
- package/dist/pipeline/figma.d.ts +13 -2
- package/dist/pipeline/figma.js +86 -46
- package/dist/pipeline/styles.js +1 -1
- package/dist/pipeline/validation.d.ts +1 -1
- package/dist/pipeline/validation.js +3 -3
- package/dist/providers.d.ts +10 -0
- package/dist/providers.js +13 -0
- package/dist/registry/asset-storage/define.d.ts +5 -5
- package/dist/registry/asset-storage/define.js +4 -4
- package/dist/registry/asset-storage/resolve.d.ts +9 -19
- package/dist/registry/asset-storage/resolve.js +33 -21
- package/dist/registry/asset-storage/types.d.ts +37 -17
- package/dist/registry/asset-storage/types.js +5 -5
- package/dist/registry/auth/ai-keys.d.ts +32 -0
- package/dist/registry/auth/ai-keys.js +69 -0
- package/dist/registry/auth/crypto.d.ts +17 -0
- package/dist/registry/auth/crypto.js +61 -1
- package/dist/registry/auth/index.d.ts +2 -1
- package/dist/registry/auth/index.js +11 -2
- package/dist/registry/checkout/index.d.ts +2 -1
- package/dist/registry/checkout/index.js +57 -127
- package/dist/registry/client.js +53 -17
- package/dist/registry/db/driver.js +3 -3
- package/dist/registry/db/schema.d.ts +261 -3
- package/dist/registry/db/schema.js +29 -4
- package/dist/registry/email/define.d.ts +10 -0
- package/dist/registry/email/define.js +13 -0
- package/dist/registry/email/providers/smtp.d.ts +10 -0
- package/dist/registry/email/providers/smtp.js +73 -0
- package/dist/registry/email/resolve.d.ts +28 -0
- package/dist/registry/email/resolve.js +74 -0
- package/dist/registry/email/types.d.ts +24 -0
- package/dist/registry/email/types.js +6 -0
- package/dist/registry/path.d.ts +2 -0
- package/dist/registry/path.js +11 -1
- package/dist/registry/publish/package.js +8 -0
- package/dist/registry/transfer.d.ts +4 -0
- package/dist/store/registry.d.ts +3 -3
- package/dist/store/registry.js +4 -4
- package/dist/transformers/plugins/ssr-render.js +40 -15
- package/dist/transformers/preview/component/builder.d.ts +1 -9
- package/dist/transformers/preview/component/builder.js +17 -17
- package/dist/transformers/preview/component/css.d.ts +3 -1
- package/dist/transformers/preview/component/css.js +92 -51
- package/dist/transformers/preview/component/html.d.ts +3 -1
- package/dist/transformers/preview/component/html.js +6 -2
- package/dist/transformers/preview/component/javascript.d.ts +2 -1
- package/dist/transformers/preview/component/javascript.js +10 -4
- package/dist/transformers/preview/pattern/html.js +3 -1
- package/dist/transformers/preview/types.d.ts +13 -0
- package/dist/transformers/utils/build.d.ts +24 -0
- package/dist/transformers/utils/build.js +100 -1
- package/dist/transformers/utils/module.js +2 -1
- package/dist/types/config.d.ts +135 -18
- package/dist/utils/path.d.ts +1 -5
- package/dist/utils/path.js +6 -23
- package/docs/api.md +6 -4
- package/docs/cli.md +275 -54
- package/drizzle/0007_add_ai_keys.sql +11 -0
- package/drizzle/0008_add_source_dir.sql +2 -0
- package/drizzle/meta/0007_snapshot.json +2013 -0
- package/drizzle/meta/0008_snapshot.json +2025 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +19 -8
- package/src/ai/README.md +42 -0
- package/src/ai/connections.ts +189 -0
- package/src/ai/define.ts +15 -0
- package/src/ai/types.ts +30 -0
- package/src/app/components/AiAssistant/AiAssistantPanel.tsx +144 -0
- package/src/app/components/AiAssistant/AiAssistantProvider.tsx +215 -0
- package/src/app/components/AiAssistant/AiConversation.tsx +737 -0
- package/src/app/components/AiAssistant/AiToolResult.tsx +99 -0
- package/src/app/components/AiAssistant/dockState.ts +86 -0
- package/src/app/components/AiAssistant/toolLabel.ts +24 -0
- package/src/app/components/AiAssistant/useAiChat.ts +147 -0
- package/src/app/components/AiAssistant/useAiConnections.ts +86 -0
- package/src/app/components/AiAssistant/usePageContext.ts +63 -0
- package/src/app/components/Auth/AccountLayout.tsx +58 -19
- package/src/app/components/Auth/AuthShell.tsx +27 -33
- package/src/app/components/Auth/RegistryInstallGate.tsx +4 -8
- package/src/app/components/Auth/installStatus.ts +29 -0
- package/src/app/components/Component/PageSliceResolver.tsx +1 -0
- package/src/app/components/Component/Preview.tsx +383 -189
- package/src/app/components/Component/slices/ComponentDisplaySlice.tsx +4 -0
- package/src/app/components/Foundations/ColorGrid.tsx +13 -14
- package/src/app/components/Layout/Header.tsx +21 -15
- package/src/app/components/Layout/Main.tsx +2 -2
- package/src/app/components/Markdown/MarkdownComponents.tsx +30 -32
- package/src/app/components/McpIntegration/McpConfigDialog.tsx +12 -51
- package/src/app/components/Navigation/MobileNav.tsx +2 -2
- package/src/app/components/Navigation/SideNav.tsx +1 -15
- package/src/app/components/context/NavProvider.tsx +7 -3
- package/src/app/components/ui/attachment.tsx +50 -0
- package/src/app/components/ui/bubble.tsx +57 -0
- package/src/app/components/ui/button.tsx +3 -1
- package/src/app/components/ui/confirm-dialog.tsx +87 -0
- package/src/app/components/ui/dialog.tsx +7 -2
- package/src/app/components/ui/marker.tsx +56 -0
- package/src/app/components/ui/sidebar.tsx +3 -1
- package/src/app/components/util/index.ts +3 -12
- package/src/app/css/index.css +64 -0
- package/src/app/lib/ai/auth.ts +33 -0
- package/src/app/lib/ai/context.ts +99 -0
- package/src/app/lib/ai/model.ts +79 -0
- package/src/app/lib/ai/prompt.ts +36 -0
- package/src/app/lib/ai/resolve.ts +97 -0
- package/src/app/lib/ai/tools.ts +120 -0
- package/src/app/lib/api/methods.ts +13 -0
- package/src/app/lib/asset-storage.ts +35 -36
- package/src/app/lib/auth/api.ts +4 -12
- package/src/app/lib/auth/email.ts +96 -23
- package/src/app/lib/docs-api/page-rendering.ts +1 -1
- package/src/app/lib/docs-api/registry.ts +2 -3
- package/src/app/lib/docs-api/runtime-config.ts +47 -21
- package/src/app/lib/mcp/components.ts +523 -0
- package/src/app/lib/mcp/page-url.ts +24 -0
- package/src/app/lib/mcp/pages.ts +84 -0
- package/src/app/lib/mcp/result.ts +33 -0
- package/src/app/lib/mcp/server.ts +39 -318
- package/src/app/lib/mcp/tokens.ts +334 -0
- package/src/app/lib/mcp/tool.ts +19 -0
- package/src/app/lib/registry-api/asset-transfer.ts +119 -11
- package/src/app/lib/registry-api/errors.ts +2 -0
- package/src/app/lib/registry-api/handler.ts +7 -1
- package/src/app/lib/registry-api/transfer.ts +28 -6
- package/src/app/lib/server-module.ts +34 -0
- package/src/app/lib/utils.ts +20 -0
- package/src/app/next.config.mjs +26 -24
- package/src/app/pages/[...slug]/index.tsx +2 -1
- package/src/app/pages/_app.tsx +6 -2
- package/src/app/pages/_document.tsx +6 -0
- package/src/app/pages/account/ai.tsx +183 -0
- package/src/app/pages/account/index.tsx +68 -68
- package/src/app/pages/account/tokens.tsx +37 -7
- package/src/app/pages/account/users.tsx +75 -15
- package/src/app/pages/api/account/ai/keys/[connectionId].ts +60 -0
- package/src/app/pages/api/account/ai/keys/index.ts +20 -0
- package/src/app/pages/api/admin/users/[id]/[action].ts +80 -11
- package/src/app/pages/api/admin/users/index.ts +2 -2
- package/src/app/pages/api/ai/chat.ts +115 -0
- package/src/app/pages/api/ai/connections.ts +23 -0
- package/src/app/pages/api/auth/request-reset.ts +14 -16
- package/src/app/pages/api/docs/nav.json.ts +1 -1
- package/src/app/pages/api/install.ts +3 -3
- package/src/app/pages/api/mcp.ts +6 -0
- package/src/app/pages/api/registry/transfer/assets/blobs/[hash]/complete.ts +11 -0
- package/src/app/pages/api/registry/transfer/assets/blobs/[hash]/upload.ts +12 -0
- package/src/app/pages/api/registry/transfer/assets/blobs/[hash].ts +1 -1
- package/src/app/pages/cli/device.tsx +10 -5
- package/src/app/pages/foundations/colors.tsx +9 -8
- package/src/app/pages/foundations/index.tsx +3 -3
- package/src/app/pages/index.tsx +2 -2
- package/src/app/pages/install.tsx +7 -2
- package/src/app/pages/login.tsx +32 -27
- package/src/app/pages/reset-password.tsx +21 -20
- package/src/app/pages/system/component/[component]/index.tsx +2 -5
- package/src/app/pages/system/index.tsx +11 -11
- package/src/app/pages/system/pattern/[pattern]/index.tsx +2 -2
- package/src/app/pages/system/tokens/components/[component]/index.tsx +0 -4
- package/src/app-builder/README.md +2 -1
- package/src/app-builder/build.ts +218 -73
- package/src/app-builder/client-config.ts +3 -2
- package/src/app-builder/paths.ts +3 -22
- package/src/app-builder/static-export.ts +1 -1
- package/src/app-builder/vercel-output.ts +5 -4
- package/src/cache/README.md +4 -1
- package/src/cache/build-cache.ts +128 -43
- package/src/cache/build-inputs.ts +28 -0
- package/src/cache/index.ts +4 -0
- package/src/catalog/README.md +3 -0
- package/src/catalog/normalize.ts +2 -0
- package/src/catalog/previews.ts +6 -3
- package/src/catalog/types.ts +8 -0
- package/src/cli/create.ts +1 -2
- package/src/commands/build/index.ts +1 -1
- package/src/config/README.md +10 -9
- package/src/config/defaults.ts +7 -4
- package/src/config/from-env.ts +33 -0
- package/src/config/helpers.ts +1 -3
- package/src/config/index.ts +0 -3
- package/src/config/loader.ts +27 -3
- package/src/config/resolve-env.ts +28 -15
- package/src/config/runtime.ts +10 -5
- package/src/handlebars.ts +8 -2
- package/src/index.ts +33 -29
- package/src/nav/index.ts +2 -2
- package/src/nav/registry.ts +3 -3
- package/src/nav/workspace.ts +3 -3
- package/src/pipeline/README.md +1 -1
- package/src/pipeline/figma.ts +98 -49
- package/src/pipeline/styles.ts +1 -1
- package/src/pipeline/validation.ts +3 -3
- package/src/providers.ts +18 -0
- package/src/registry/asset-storage/define.ts +6 -6
- package/src/registry/asset-storage/resolve.ts +38 -37
- package/src/registry/asset-storage/types.ts +39 -17
- package/src/registry/auth/ai-keys.ts +62 -0
- package/src/registry/auth/crypto.ts +63 -1
- package/src/registry/auth/index.ts +11 -1
- package/src/registry/checkout/index.ts +60 -138
- package/src/registry/client.ts +60 -20
- package/src/registry/db/driver.ts +2 -2
- package/src/registry/db/schema.ts +49 -22
- package/src/registry/email/define.ts +15 -0
- package/src/registry/email/providers/smtp.ts +39 -0
- package/src/registry/email/resolve.ts +94 -0
- package/src/registry/email/types.ts +28 -0
- package/src/registry/path.ts +11 -0
- package/src/registry/publish/package.ts +9 -0
- package/src/registry/transfer.ts +4 -0
- package/src/store/registry.ts +7 -7
- package/src/transformers/plugins/ssr-render.ts +53 -16
- package/src/transformers/preview/component/builder.ts +19 -25
- package/src/transformers/preview/component/css.ts +101 -53
- package/src/transformers/preview/component/html.ts +6 -2
- package/src/transformers/preview/component/javascript.ts +14 -4
- package/src/transformers/preview/pattern/html.ts +3 -1
- package/src/transformers/preview/types.ts +14 -0
- package/src/transformers/utils/build.ts +93 -0
- package/src/transformers/utils/module.ts +4 -2
- package/src/types/config.ts +148 -20
- package/src/utils/README.md +1 -1
- package/src/utils/path.ts +6 -29
- package/templates/default/handoff.config.js.tpl +10 -2
- package/templates/default/handoff.config.ts.tpl +10 -2
- package/templates/default/handoff.config.with-examples.js.tpl +10 -2
- package/templates/default/handoff.config.with-examples.ts.tpl +10 -2
- package/templates/default/package.json.tpl +2 -2
- package/.editorconfig +0 -19
- package/.eslintrc.json +0 -4
- package/.prettierignore +0 -0
- package/.prettierrc.json +0 -8
- package/.vscode/settings.json +0 -17
- package/dist/config/validator.d.ts +0 -9
- package/dist/config/validator.js +0 -24
- package/dist/registry/asset-storage/adapters/vercel-blob.d.ts +0 -17
- package/dist/registry/asset-storage/adapters/vercel-blob.js +0 -87
- package/src/app/components/old/Header.tsx +0 -89
- package/src/app/lib/mcp/shape.ts +0 -596
- package/src/app/pages/assets/fonts.tsx +0 -129
- package/src/app/pages/assets/index.tsx +0 -91
- package/src/app/pages/assets/logos.tsx +0 -75
- package/src/config/validator.ts +0 -22
- package/src/registry/asset-storage/adapters/vercel-blob.ts +0 -51
package/docs/cli.md
CHANGED
|
@@ -1,78 +1,299 @@
|
|
|
1
1
|
# Handoff CLI
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
The `handoff-app` CLI fetches Figma foundations, builds and serves the
|
|
4
|
+
documentation, and transfers content between a workspace and a registry. The
|
|
5
|
+
[README](../README.md) explains the concepts and the configuration. This page
|
|
6
|
+
lists every command and option.
|
|
6
7
|
|
|
7
|
-
##
|
|
8
|
-
The CLI will allow you to fetch all data from Figma, build the documentation
|
|
9
|
-
app and run a local dev site. For these use the build, fetch, and serve commands
|
|
10
|
-
documented below.
|
|
8
|
+
## Run the CLI
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
but the various kinds of configurations can be tailored or extended.
|
|
10
|
+
`init` installs `handoff-app` in the project and adds npm scripts for the
|
|
11
|
+
common commands. Use the npm scripts, so that local development and CI use the
|
|
12
|
+
project version:
|
|
16
13
|
|
|
17
|
-
|
|
14
|
+
```bash
|
|
15
|
+
npm run build -- --target registry
|
|
16
|
+
```
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
app
|
|
22
|
-
`exportables` - JSON schemas for each component in your figma file that you
|
|
23
|
-
want to pull into handoff.
|
|
24
|
-
`integration` - scss mappings and html templates for making it easy to map
|
|
25
|
-
handoff tokens to your frontend framework.
|
|
18
|
+
npm forwards the arguments after `--` to the CLI. For a command without an npm
|
|
19
|
+
script, use `npx`:
|
|
26
20
|
|
|
27
|
-
|
|
21
|
+
```bash
|
|
22
|
+
npx handoff-app validate:components
|
|
23
|
+
```
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
the current working directory. If you customize these configurations, then run
|
|
31
|
-
handoff commands in that directory, these configs will be executed. `eject:config` now prompts for TypeScript or JavaScript config format.
|
|
32
|
-
__Make__ commands will generate a boilerplate configuration in the current
|
|
33
|
-
working directory. This is useful for extending handoff for different components
|
|
34
|
-
or integrations.
|
|
25
|
+
Show the help of the CLI or of one command:
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
```bash
|
|
28
|
+
npx handoff-app --help
|
|
29
|
+
npx handoff-app publish --help
|
|
30
|
+
```
|
|
38
31
|
|
|
39
|
-
|
|
32
|
+
Each command runs against the working directory. The working directory is the
|
|
33
|
+
directory that holds `handoff.config.ts`. It is the current directory, or the
|
|
34
|
+
directory that `HANDOFF_WORKING_PATH` sets.
|
|
40
35
|
|
|
41
|
-
|
|
36
|
+
## Shared options
|
|
42
37
|
|
|
43
|
-
|
|
38
|
+
Every command except `init` accepts these options:
|
|
39
|
+
|
|
40
|
+
| Option | Description |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `-c, --config <file>` | Load this config file, relative to the working directory, instead of `handoff.config.*` |
|
|
43
|
+
| `--profile <name>` | Merge `handoff.config.<name>.*` onto the base config, and use the registry login of this profile. Has priority over `HANDOFF_PROFILE`. |
|
|
44
|
+
| `-d, --debug` | Show debug logs |
|
|
45
|
+
| `-f, --force` | Force the action. The effect depends on the command. |
|
|
46
|
+
| `--help` | Show the help of the command |
|
|
47
|
+
|
|
48
|
+
`handoff-app --version` shows the CLI version.
|
|
49
|
+
|
|
50
|
+
`HANDOFF_LOG_LEVEL` (`debug`, `info`, `warn`, `error`, or `silent`) and
|
|
51
|
+
`HANDOFF_LOG_SCOPES` (`handoff`, `vite`, `next`) control the log output of
|
|
52
|
+
every command. The README lists all
|
|
53
|
+
[environment variables](../README.md#environment-variables).
|
|
54
|
+
|
|
55
|
+
## Project
|
|
56
|
+
|
|
57
|
+
### init
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx handoff-app init
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Creates a project with an interactive wizard. The wizard asks for the project
|
|
64
|
+
name, sample content, JavaScript or TypeScript, an optional Vercel setup, and
|
|
65
|
+
optional Figma credentials. It installs `handoff-app` and adds these npm
|
|
66
|
+
scripts: `start`, `dev`, `fetch`, `build`, `login`, `logout`, `publish`,
|
|
67
|
+
`checkout`, and `db:migrate`.
|
|
68
|
+
|
|
69
|
+
### fetch
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
handoff-app fetch
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Fetches tokens and assets from the Figma file and writes them to `exported/`.
|
|
76
|
+
It reads `HANDOFF_FIGMA_PROJECT_ID` and `HANDOFF_DEV_ACCESS_TOKEN`. If a value
|
|
77
|
+
is empty, `fetch` asks for it in the terminal. Without a terminal, `fetch`
|
|
78
|
+
stops with an error that names the missing variable.
|
|
79
|
+
|
|
80
|
+
### start
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
handoff-app start
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Starts the workspace documentation server and the Handoff file watchers. While
|
|
87
|
+
the command runs, Handoff rebuilds changed files and updates the
|
|
88
|
+
documentation.
|
|
89
|
+
|
|
90
|
+
### dev
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
handoff-app dev
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Starts the workspace documentation server without the Handoff file watchers.
|
|
97
|
+
|
|
98
|
+
### build
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
handoff-app build [--target static|registry] [--package standalone|vercel] [--skip-components]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Builds the documentation.
|
|
105
|
+
|
|
106
|
+
| Option | Description |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| `--target static` | Default. Builds a static site in `out/static`. |
|
|
109
|
+
| `--target registry` | Builds a standalone registry server in `out/registry`. The application is always in registry mode. |
|
|
110
|
+
| `--package vercel` | Writes a Vercel Build Output bundle to `.vercel/output` for the selected target |
|
|
111
|
+
| `--package standalone` | Writes the default output of the target |
|
|
112
|
+
| `--skip-components` | Builds the application without a component build first |
|
|
113
|
+
| `-f, --force` | Builds every component again, and ignores the build cache |
|
|
114
|
+
|
|
115
|
+
`--package` never changes the target.
|
|
116
|
+
|
|
117
|
+
### build:app
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
handoff-app build:app [--skip-components]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Builds the static site. It is the same as `build --target static`.
|
|
124
|
+
|
|
125
|
+
### build:components
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
handoff-app build:components [component]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Builds the catalog items without the documentation application. A name builds
|
|
132
|
+
only that item.
|
|
133
|
+
|
|
134
|
+
### validate:components
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
handoff-app validate:components [--skip-build]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Validates the catalog items. `--skip-build` validates the existing build
|
|
141
|
+
output without a build first.
|
|
142
|
+
|
|
143
|
+
## Content
|
|
144
|
+
|
|
145
|
+
### make:component
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
handoff-app make:component <name>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Creates a Handlebars catalog item: a template, a CommonJS declaration, and,
|
|
152
|
+
if you select them, a JavaScript file and a Sass file. The item goes into the
|
|
153
|
+
first directory in `catalog.include`, or into `components/`. If that directory
|
|
154
|
+
is not registered, Handoff adds it to `catalog.include`. The name can contain
|
|
155
|
+
letters, numbers, hyphens, and underscores. `--force` overwrites an existing
|
|
156
|
+
template.
|
|
157
|
+
|
|
158
|
+
### make:page
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
handoff-app make:page <name> [parent]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Creates a Markdown page in `pages/`, or in `pages/<parent>/`. If a default page
|
|
165
|
+
has the same name, the new page starts with its content. `--force` overwrites
|
|
166
|
+
an existing page.
|
|
167
|
+
|
|
168
|
+
### scaffold
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
handoff-app scaffold
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Creates catalog item stubs for the components in the fetched Figma data. The
|
|
175
|
+
command asks which components to create and how.
|
|
176
|
+
|
|
177
|
+
### eject:config
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
handoff-app eject:config
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Writes the default config to the working directory. The command asks for
|
|
184
|
+
TypeScript or JavaScript. `--force` overwrites an existing config file.
|
|
185
|
+
|
|
186
|
+
### eject:pages
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
handoff-app eject:pages
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Copies the default documentation pages to `pages/`, so that you can change
|
|
193
|
+
them. `--force` adds the default pages that you did not change.
|
|
194
|
+
|
|
195
|
+
### eject:theme
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
handoff-app eject:theme
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Copies the Sass file of the selected theme to `theme/default.scss`, so that
|
|
202
|
+
you can change it.
|
|
203
|
+
|
|
204
|
+
## Registry
|
|
205
|
+
|
|
206
|
+
### db:migrate
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
DATABASE_URL="postgresql://…" handoff-app db:migrate
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Applies the registry database migrations. The command reads the project config
|
|
213
|
+
and the database variables, and uses the same database driver as the registry
|
|
214
|
+
build. Run it before the first deployment and before each upgrade. The build,
|
|
215
|
+
the server start, and the installer never run migrations.
|
|
216
|
+
|
|
217
|
+
### login
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
handoff-app login [--url <registry-url>] [--profile <name>] [--no-browser]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Authorizes the CLI through the device flow of the registry. The CLI saves the
|
|
224
|
+
token in `.handoff/cli-auth.json`, under the selected profile.
|
|
225
|
+
|
|
226
|
+
| Option | Description |
|
|
227
|
+
| --- | --- |
|
|
228
|
+
| `--url <registry-url>` | Registry URL, with its base path when the registry has one. Without it, the CLI uses the configured registry URL. |
|
|
229
|
+
| `--profile <name>` | Saves the login under this profile. The profile needs no config file. |
|
|
230
|
+
| `--no-browser` | Shows the approval URL, but does not open the browser. `HANDOFF_LOGIN_NO_BROWSER=true` does the same. |
|
|
231
|
+
|
|
232
|
+
### logout
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
handoff-app logout [--profile <name>] [--url <registry-url>] [--all]
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Revokes the saved token when possible. Then it removes the saved login of the
|
|
239
|
+
selected profile.
|
|
240
|
+
|
|
241
|
+
| Option | Description |
|
|
242
|
+
| --- | --- |
|
|
243
|
+
| `--url <registry-url>` | Revokes the login only if it belongs to this exact registry URL |
|
|
244
|
+
| `--all` | Revokes and removes the logins of every profile |
|
|
245
|
+
|
|
246
|
+
### publish
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
handoff-app publish <catalog|pages|tokens|assets|all> [id...] [--dry-run] [--no-build]
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Builds the content and publishes it to the connected registry. `all` publishes
|
|
253
|
+
every kind in dependency order. One or more ids limit the publish to those
|
|
254
|
+
entities: catalog item ids, page ids, token set ids, or asset collections.
|
|
255
|
+
`tokens` and `assets` run the Figma pipeline first.
|
|
44
256
|
|
|
45
|
-
|
|
257
|
+
| Option | Description |
|
|
258
|
+
| --- | --- |
|
|
259
|
+
| `--dry-run` | Lists the content that a real publish uploads. Does not connect to a registry. The build still runs. |
|
|
260
|
+
| `--no-build` | Publishes the existing build output without a build first |
|
|
46
261
|
|
|
47
|
-
|
|
262
|
+
### checkout
|
|
48
263
|
|
|
49
|
-
|
|
264
|
+
```bash
|
|
265
|
+
handoff-app checkout <catalog|pages|tokens|assets|all> [id...] [--dry-run]
|
|
266
|
+
```
|
|
50
267
|
|
|
51
|
-
|
|
52
|
-
|
|
268
|
+
Writes content from the connected registry into the workspace. Checkout writes
|
|
269
|
+
declarations in the format that `runtime.workspace.declarationFormat` sets.
|
|
53
270
|
|
|
54
|
-
|
|
55
|
-
|
|
271
|
+
| Option | Description |
|
|
272
|
+
| --- | --- |
|
|
273
|
+
| `--dry-run` | Lists the files that a real checkout creates or overwrites. Writes nothing. |
|
|
56
274
|
|
|
57
|
-
|
|
275
|
+
### Registry connection
|
|
58
276
|
|
|
59
|
-
|
|
277
|
+
`publish` and `checkout` find the registry URL and the token in this order:
|
|
60
278
|
|
|
61
|
-
|
|
279
|
+
1. `HANDOFF_REGISTRY_URL` and `HANDOFF_REGISTRY_ACCESS_TOKEN`, or
|
|
280
|
+
`runtime.registryConnection` in the config.
|
|
281
|
+
2. The saved login of the selected profile, if it belongs to the same registry
|
|
282
|
+
URL. A profile without a login uses the default login.
|
|
283
|
+
3. `HANDOFF_SYNC_SECRET`, when no token and no login is available.
|
|
62
284
|
|
|
63
|
-
|
|
285
|
+
## Deprecated commands
|
|
64
286
|
|
|
65
|
-
|
|
66
|
-
make:component <name> [opts] - Creates a new catalog item with a declaration
|
|
67
|
-
make:page <component> <state> [opts] - Creates a new page
|
|
287
|
+
These commands still work. Each shows a deprecation warning.
|
|
68
288
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
289
|
+
| Command | Replacement |
|
|
290
|
+
| --- | --- |
|
|
291
|
+
| `push [type] [id...]` | `publish` |
|
|
292
|
+
| `push:all` | `publish all` |
|
|
293
|
+
| `push:tokens [setId...]` | `publish tokens` |
|
|
294
|
+
| `push:assets [collection]` | `publish assets` |
|
|
295
|
+
| `pull [type] [id...]` | `checkout` |
|
|
73
296
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-h, --help Show this help message
|
|
78
|
-
-v, --version Show the handoff version number
|
|
297
|
+
The `push` and `pull` commands also accept `components` and `patterns` as the
|
|
298
|
+
type. They accept the options for features that Handoff 2 does not have, and
|
|
299
|
+
show a warning for each one.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE "registry_ai_keys" (
|
|
2
|
+
"user_id" text NOT NULL,
|
|
3
|
+
"connection_id" text NOT NULL,
|
|
4
|
+
"encrypted_key" text NOT NULL,
|
|
5
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
6
|
+
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
7
|
+
CONSTRAINT "registry_ai_keys_user_id_connection_id_pk" PRIMARY KEY("user_id","connection_id"),
|
|
8
|
+
CONSTRAINT "registry_ai_keys_connection_not_blank" CHECK (length(btrim("registry_ai_keys"."connection_id")) > 0)
|
|
9
|
+
);
|
|
10
|
+
--> statement-breakpoint
|
|
11
|
+
ALTER TABLE "registry_ai_keys" ADD CONSTRAINT "registry_ai_keys_user_id_registry_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."registry_users"("id") ON DELETE cascade ON UPDATE no action;
|