@intelligo-dev/cli 1.0.0-beta.1 → 1.0.0-beta.14
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 +6 -0
- package/README.md +102 -0
- package/dist/bin.js +122 -37
- package/dist/bin.js.map +1 -1
- package/dist/commands/add.d.ts +26 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +70 -4
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/create-flow.d.ts +37 -0
- package/dist/commands/create-flow.d.ts.map +1 -0
- package/dist/commands/create-flow.js +212 -0
- package/dist/commands/create-flow.js.map +1 -0
- package/dist/commands/create.d.ts +27 -6
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +53 -13
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +295 -37
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/migrate-check.d.ts +73 -1
- package/dist/commands/migrate-check.d.ts.map +1 -1
- package/dist/commands/migrate-check.js +130 -5
- package/dist/commands/migrate-check.js.map +1 -1
- package/dist/commands/migrate.d.ts +97 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +141 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/sync-messages.d.ts +37 -0
- package/dist/commands/sync-messages.d.ts.map +1 -0
- package/dist/commands/sync-messages.js +88 -0
- package/dist/commands/sync-messages.js.map +1 -0
- package/dist/commands/sync-scaffold.d.ts +36 -0
- package/dist/commands/sync-scaffold.d.ts.map +1 -0
- package/dist/commands/sync-scaffold.js +53 -0
- package/dist/commands/sync-scaffold.js.map +1 -0
- package/dist/commands/sync.d.ts +103 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +361 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/upgrade-check.d.ts +5 -5
- package/dist/commands/upgrade-check.d.ts.map +1 -1
- package/dist/commands/upgrade-check.js +22 -6
- package/dist/commands/upgrade-check.js.map +1 -1
- package/dist/env-files.d.ts +12 -0
- package/dist/env-files.d.ts.map +1 -0
- package/dist/env-files.js +29 -0
- package/dist/env-files.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +36 -15
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +32 -16
- package/dist/manifest.js.map +1 -1
- package/dist/migrations.d.ts +3 -6
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +3 -6
- package/dist/migrations.js.map +1 -1
- package/dist/model-catalogue.d.ts +14 -0
- package/dist/model-catalogue.d.ts.map +1 -0
- package/dist/model-catalogue.js +34 -0
- package/dist/model-catalogue.js.map +1 -0
- package/dist/module-exports.d.ts +63 -0
- package/dist/module-exports.d.ts.map +1 -0
- package/dist/module-exports.js +231 -0
- package/dist/module-exports.js.map +1 -0
- package/dist/registry-bundle.d.ts +43 -0
- package/dist/registry-bundle.d.ts.map +1 -0
- package/dist/registry-bundle.js +74 -0
- package/dist/registry-bundle.js.map +1 -0
- package/dist/registry-items.d.ts +84 -0
- package/dist/registry-items.d.ts.map +1 -0
- package/dist/registry-items.js +187 -0
- package/dist/registry-items.js.map +1 -0
- package/package.json +36 -10
- package/src/bin.ts +316 -0
- package/src/commands/add.ts +255 -0
- package/src/commands/create-flow.ts +284 -0
- package/src/commands/create.ts +149 -0
- package/src/commands/doctor.ts +487 -0
- package/src/commands/migrate-check.ts +298 -0
- package/src/commands/migrate.ts +228 -0
- package/src/commands/sync-messages.ts +114 -0
- package/src/commands/sync-scaffold.ts +83 -0
- package/src/commands/sync.ts +534 -0
- package/src/commands/upgrade-check.ts +160 -0
- package/src/env-files.ts +31 -0
- package/src/index.ts +39 -0
- package/src/manifest.ts +147 -0
- package/src/migrations-dir.ts +25 -0
- package/src/migrations.ts +133 -0
- package/src/model-catalogue.ts +35 -0
- package/src/module-exports.ts +266 -0
- package/src/registry-bundle.ts +103 -0
- package/src/registry-items.ts +237 -0
- package/templates/admin-page/admin-page.tsx.tpl +2 -3
- package/templates/app-scaffold/assistant-route.ts.tpl +2 -2
- package/templates/app-scaffold/auth-route.ts.tpl +10 -0
- package/templates/app-scaffold/components.json.tpl +6 -2
- package/templates/app-scaffold/db-schema.ts.tpl +29 -0
- package/templates/app-scaffold/drizzle-journal.json.tpl +5 -0
- package/templates/app-scaffold/drizzle.config.ts.tpl +45 -0
- package/templates/app-scaffold/env.example.tpl +65 -1
- package/templates/app-scaffold/globals.css.tpl +172 -281
- package/templates/app-scaffold/i18n-request.ts.tpl +25 -0
- package/templates/app-scaffold/instrumentation.ts.tpl +21 -0
- package/templates/app-scaffold/intelligo.ts.tpl +95 -41
- package/templates/app-scaffold/layout.tsx.tpl +18 -1
- package/templates/app-scaffold/lib-utils.ts.tpl +1 -6
- package/templates/app-scaffold/next.config.mjs.tpl +2 -0
- package/templates/app-scaffold/package.json.tpl +31 -17
- package/templates/app-scaffold/page.tsx.tpl +16 -0
- package/templates/app-scaffold/plans.ts.tpl +32 -13
- package/templates/app-scaffold/{middleware.ts.tpl → proxy.ts.tpl} +6 -0
- package/templates/app-scaffold/sonner.tsx.tpl +42 -20
- package/templates/app-scaffold/stripe-webhook-route.ts.tpl +24 -0
- package/templates/app-scaffold/theme-provider.tsx.tpl +6 -4
- package/templates/app-scaffold/tsconfig.json.tpl +20 -4
- package/templates/app-scaffold/use-mobile.ts.tpl +19 -0
- package/templates/app-scaffold/workspace-bootstrap.ts.tpl +30 -0
- package/templates/maintenance/maintenance-route.ts.tpl +119 -0
- package/templates/manifest.json +75 -17
- package/templates/registry/ai-agent-activity.json +23 -0
- package/templates/registry/ai-agent-progress.json +21 -0
- package/templates/registry/ai-approval-card.json +27 -0
- package/templates/registry/ai-artifact.json +22 -0
- package/templates/registry/ai-branch.json +21 -0
- package/templates/registry/ai-citations.json +24 -0
- package/templates/registry/ai-code-block.json +23 -0
- package/templates/registry/ai-composer-menu.json +19 -0
- package/templates/registry/ai-file-diff.json +25 -0
- package/templates/registry/ai-image-generation.json +23 -0
- package/templates/registry/ai-markdown.json +23 -0
- package/templates/registry/ai-message-bubble.json +23 -0
- package/templates/registry/ai-message-scroller.json +22 -0
- package/templates/registry/ai-message.json +21 -0
- package/templates/registry/ai-motion.json +19 -0
- package/templates/registry/ai-prompt-input.json +28 -0
- package/templates/registry/ai-reasoning-text.json +22 -0
- package/templates/registry/ai-reasoning.json +22 -0
- package/templates/registry/ai-shimmer-text.json +19 -0
- package/templates/registry/ai-sidebar.json +25 -0
- package/templates/registry/ai-speech-input.json +21 -0
- package/templates/registry/ai-streaming-response.json +24 -0
- package/templates/registry/ai-suggestion.json +19 -0
- package/templates/registry/ai-todo-list.json +22 -0
- package/templates/registry/ai-tool-approval.json +26 -0
- package/templates/registry/ai-tool-result.json +25 -0
- package/templates/registry/alert-dialog.json +23 -0
- package/templates/registry/animated-list.json +21 -0
- package/templates/registry/app-shell.json +93 -0
- package/templates/registry/artifacts.json +82 -0
- package/templates/registry/attachment.json +22 -0
- package/templates/registry/auth-email-verification.json +39 -0
- package/templates/registry/auth-login.json +72 -0
- package/templates/registry/auth-password-reset.json +53 -0
- package/templates/registry/auth-signup.json +41 -0
- package/templates/registry/billing-settings.json +60 -0
- package/templates/registry/button.json +22 -0
- package/templates/registry/chat-eve.json +19 -0
- package/templates/registry/chat-panel.json +30 -0
- package/templates/registry/chat-share.json +42 -0
- package/templates/registry/chat-widget.json +34 -0
- package/templates/registry/chat.json +326 -0
- package/templates/registry/checkbox.json +22 -0
- package/templates/registry/checkout.json +40 -0
- package/templates/registry/collapsible.json +19 -0
- package/templates/registry/command.json +23 -0
- package/templates/registry/copy-button.json +21 -0
- package/templates/registry/dashboard.json +69 -0
- package/templates/registry/dialog.json +24 -0
- package/templates/registry/document-viewer.json +22 -0
- package/templates/registry/dropdown-menu.json +23 -0
- package/templates/registry/expandable-tabs.json +22 -0
- package/templates/registry/feature-gating.json +73 -0
- package/templates/registry/file-upload.json +24 -0
- package/templates/registry/hold-action-button.json +22 -0
- package/templates/registry/input-group.json +23 -0
- package/templates/registry/input.json +19 -0
- package/templates/registry/intelligo.json +187 -0
- package/templates/registry/invitation-accept.json +64 -0
- package/templates/registry/language-switcher.json +29 -0
- package/templates/registry/morphing-modal.json +24 -0
- package/templates/registry/notification-stack.json +24 -0
- package/templates/registry/notifications.json +87 -0
- package/templates/registry/onboarding.json +83 -0
- package/templates/registry/otp-input.json +22 -0
- package/templates/registry/page-header.json +15 -0
- package/templates/registry/payment-poll.json +52 -0
- package/templates/registry/popover-morph.json +22 -0
- package/templates/registry/popover.json +22 -0
- package/templates/registry/pricing.json +111 -0
- package/templates/registry/privacy-settings.json +65 -0
- package/templates/registry/profile-settings.json +68 -0
- package/templates/registry/progress.json +19 -0
- package/templates/registry/radio-group.json +22 -0
- package/templates/registry/registry.json +2945 -0
- package/templates/registry/route-error.json +65 -0
- package/templates/registry/select-morph.json +23 -0
- package/templates/registry/select.json +23 -0
- package/templates/registry/settings-shell.json +47 -0
- package/templates/registry/sheet.json +24 -0
- package/templates/registry/sidebar.json +28 -0
- package/templates/registry/smoke.json +34 -0
- package/templates/registry/spinner.json +16 -0
- package/templates/registry/stat-card.json +18 -0
- package/templates/registry/status-badge.json +18 -0
- package/templates/registry/switch.json +20 -0
- package/templates/registry/tabs.json +23 -0
- package/templates/registry/team-settings.json +97 -0
- package/templates/registry/textarea.json +16 -0
- package/templates/registry/tooltip.json +22 -0
- package/templates/registry/trial-banner.json +43 -0
- package/templates/registry/usage.json +84 -0
- package/templates/registry/workspace-settings.json +71 -0
- package/templates/registry-items.json +116 -0
- package/templates/registry-requires.json +180 -0
- package/templates/usage-page/usage-page.tsx.tpl +23 -8
- package/templates/vitest/server-only.ts.tpl +7 -0
- package/templates/vitest/vitest.config.ts.tpl +37 -0
- package/templates/billing-page/billing-page.tsx.tpl +0 -72
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The conversation around `createApp`: ask what the flags did not say,
|
|
3
|
+
* scaffold, and install the chosen registry items once the developer
|
|
4
|
+
* has approved the commands that do it. The items go in through
|
|
5
|
+
* `intelligo sync` — one `shadcn add` per item from the registry this
|
|
6
|
+
* CLI carries, recorded in the manifest — exactly as a later sync
|
|
7
|
+
* would put them back.
|
|
8
|
+
*
|
|
9
|
+
* Nothing runs on the developer's machine without their say-so. In a
|
|
10
|
+
* terminal the commands are shown and confirmed; without one (CI, a
|
|
11
|
+
* pipe) they run only under `--yes`, and are otherwise printed.
|
|
12
|
+
*/
|
|
13
|
+
import { spawnSync } from "node:child_process";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import * as p from "@clack/prompts";
|
|
16
|
+
import { assertNotOccupied, createApp, deriveNames, formatCreateResult, formatNextSteps, isOccupied, } from "./create.js";
|
|
17
|
+
import { syncApply } from "./sync.js";
|
|
18
|
+
import { resolveRegistryDir } from "../registry-bundle.js";
|
|
19
|
+
import { detectPackageManager, findWorkspaceRoot, formatCommand, installPlan, readRegistryCatalogue, shortDescription, withDependencies, } from "../registry-items.js";
|
|
20
|
+
export function parseCreateFlags(args) {
|
|
21
|
+
let target;
|
|
22
|
+
let items;
|
|
23
|
+
for (let i = 0; i < args.length; i++) {
|
|
24
|
+
const arg = args[i];
|
|
25
|
+
if (arg === "--items" || arg.startsWith("--items=")) {
|
|
26
|
+
const list = arg === "--items" ? (args[++i] ?? "") : arg.slice(8);
|
|
27
|
+
items = list
|
|
28
|
+
.split(",")
|
|
29
|
+
.map((s) => s.trim())
|
|
30
|
+
.filter(Boolean);
|
|
31
|
+
}
|
|
32
|
+
else if (!arg.startsWith("-") && target === undefined) {
|
|
33
|
+
target = arg;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
target,
|
|
38
|
+
items,
|
|
39
|
+
all: args.includes("--all"),
|
|
40
|
+
yes: args.includes("--yes") || args.includes("-y"),
|
|
41
|
+
install: !args.includes("--no-install"),
|
|
42
|
+
linkWorkspace: args.includes("--link-workspace"),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** The pages a first app most likely wants; the picker starts with them ticked. */
|
|
46
|
+
const SUGGESTED = ["app-shell", "auth-login", "auth-signup", "dashboard"];
|
|
47
|
+
function bail(value, message = "Nothing was created.") {
|
|
48
|
+
if (!p.isCancel(value))
|
|
49
|
+
return false;
|
|
50
|
+
p.cancel(message);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
function run(c, cwd) {
|
|
54
|
+
const result = spawnSync(c.command, c.args, {
|
|
55
|
+
cwd,
|
|
56
|
+
stdio: "inherit",
|
|
57
|
+
// pnpm, npx and friends are .cmd shims on Windows.
|
|
58
|
+
shell: process.platform === "win32",
|
|
59
|
+
});
|
|
60
|
+
return result.status === 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Run the plan: the dependency install, then the sync. Returns the
|
|
64
|
+
* commands still to run by hand — none when both succeeded.
|
|
65
|
+
*/
|
|
66
|
+
async function installPages(plan, options) {
|
|
67
|
+
const { appRoot, interactive, show } = options;
|
|
68
|
+
const say = (line) => interactive ? p.log.step(line) : console.log(line);
|
|
69
|
+
const fail = (message) => interactive ? p.log.error(message) : console.error(message);
|
|
70
|
+
if (plan.install) {
|
|
71
|
+
say(`› ${show(plan.install)}`);
|
|
72
|
+
if (!run(plan.install, plan.install.cwd ?? appRoot)) {
|
|
73
|
+
fail(`\`${show(plan.install)}\` failed — the scaffold is in place; run the rest by hand.`);
|
|
74
|
+
return [plan.install, plan.sync];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
say(`› ${show(plan.sync)}`);
|
|
78
|
+
const code = await syncApply(plan.items, options.syncContext, {
|
|
79
|
+
force: true,
|
|
80
|
+
log: say,
|
|
81
|
+
});
|
|
82
|
+
if (code !== 0) {
|
|
83
|
+
fail("The pages did not all install — the scaffold is in place; re-run the sync by hand.");
|
|
84
|
+
return [plan.sync];
|
|
85
|
+
}
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
export async function runCreate(flags, context) {
|
|
89
|
+
const { interactive } = context;
|
|
90
|
+
const catalogue = readRegistryCatalogue(context.templatesDir);
|
|
91
|
+
const packageManager = detectPackageManager();
|
|
92
|
+
if (interactive)
|
|
93
|
+
p.intro("intelligo create");
|
|
94
|
+
// 1. Where.
|
|
95
|
+
let target = flags.target;
|
|
96
|
+
if (!target) {
|
|
97
|
+
if (!interactive) {
|
|
98
|
+
console.error("Usage: intelligo create <directory> [--items a,b | --all] [--yes] [--no-install]");
|
|
99
|
+
return 1;
|
|
100
|
+
}
|
|
101
|
+
const answer = await p.text({
|
|
102
|
+
message: "Project name",
|
|
103
|
+
placeholder: "my-app",
|
|
104
|
+
validate: (v) => {
|
|
105
|
+
if (!v)
|
|
106
|
+
return "A name is required.";
|
|
107
|
+
try {
|
|
108
|
+
deriveNames(v);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return error.message;
|
|
112
|
+
}
|
|
113
|
+
return isOccupied(v) ? `${v} is not empty.` : undefined;
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
if (bail(answer))
|
|
117
|
+
return 1;
|
|
118
|
+
target = answer;
|
|
119
|
+
}
|
|
120
|
+
// Before any question about items, so nobody chooses pages for an
|
|
121
|
+
// app that is then refused.
|
|
122
|
+
assertNotOccupied(target);
|
|
123
|
+
// 2. What.
|
|
124
|
+
let selected = [];
|
|
125
|
+
if (flags.all)
|
|
126
|
+
selected = Object.keys(catalogue.items);
|
|
127
|
+
else if (flags.items)
|
|
128
|
+
selected = flags.items;
|
|
129
|
+
else if (interactive) {
|
|
130
|
+
const answer = await p.multiselect({
|
|
131
|
+
message: "Which pages should be installed? (space to toggle)",
|
|
132
|
+
options: Object.entries(catalogue.items).map(([name, item]) => ({
|
|
133
|
+
value: name,
|
|
134
|
+
label: item.title,
|
|
135
|
+
hint: shortDescription(item.description),
|
|
136
|
+
})),
|
|
137
|
+
initialValues: SUGGESTED.filter((n) => n in catalogue.items),
|
|
138
|
+
required: false,
|
|
139
|
+
});
|
|
140
|
+
if (bail(answer))
|
|
141
|
+
return 1;
|
|
142
|
+
selected = answer;
|
|
143
|
+
}
|
|
144
|
+
const items = withDependencies(selected, catalogue.requires);
|
|
145
|
+
const added = items.filter((n) => !selected.includes(n));
|
|
146
|
+
if (interactive && added.length > 0) {
|
|
147
|
+
p.log.info(`Also installing what they build on: ${added.join(", ")}`);
|
|
148
|
+
}
|
|
149
|
+
// 3. The scaffold.
|
|
150
|
+
const result = createApp({
|
|
151
|
+
target,
|
|
152
|
+
templatesDir: context.templatesDir,
|
|
153
|
+
frameworkVersion: context.frameworkVersion,
|
|
154
|
+
linkWorkspace: flags.linkWorkspace,
|
|
155
|
+
});
|
|
156
|
+
const appRoot = path.resolve(target);
|
|
157
|
+
if (interactive) {
|
|
158
|
+
p.log.success(`Scaffolded ${result.written.length} files in ${target}`);
|
|
159
|
+
}
|
|
160
|
+
// 4. The pages — only with approval.
|
|
161
|
+
const workspaceRoot = findWorkspaceRoot(appRoot);
|
|
162
|
+
const plan = installPlan(items, { appRoot, packageManager, workspaceRoot });
|
|
163
|
+
const commands = plan
|
|
164
|
+
? [...(plan.install ? [plan.install] : []), plan.sync]
|
|
165
|
+
: [];
|
|
166
|
+
const show = (c) => formatCommand(c, appRoot);
|
|
167
|
+
const registryDir = resolveRegistryDir(context.templatesDir);
|
|
168
|
+
if (plan && flags.install && !registryDir) {
|
|
169
|
+
console.error("This CLI has no bundled registry to install pages from — in the framework repository, run `pnpm registry:build` first.");
|
|
170
|
+
}
|
|
171
|
+
let approved = plan !== null && flags.install && flags.yes && !!registryDir;
|
|
172
|
+
if (plan && flags.install && registryDir && !flags.yes && interactive) {
|
|
173
|
+
p.note(commands.map(show).join("\n"), "Commands to run in " + target);
|
|
174
|
+
const answer = await p.confirm({
|
|
175
|
+
message: plan.install
|
|
176
|
+
? `shadcn is not installed yet — install the dependencies (shadcn included) with ${plan.install.command}${workspaceRoot ? " from the workspace root" : ""} and add ${items.length} page(s)?`
|
|
177
|
+
: `Add ${items.length} page(s) with shadcn?`,
|
|
178
|
+
});
|
|
179
|
+
if (bail(answer, `The scaffold is in ${target}; nothing was installed.`))
|
|
180
|
+
return 1;
|
|
181
|
+
approved = answer;
|
|
182
|
+
}
|
|
183
|
+
const pending = approved && plan && registryDir
|
|
184
|
+
? await installPages(plan, {
|
|
185
|
+
appRoot,
|
|
186
|
+
interactive,
|
|
187
|
+
show,
|
|
188
|
+
syncContext: {
|
|
189
|
+
appRoot,
|
|
190
|
+
registryDir,
|
|
191
|
+
requires: catalogue.requires,
|
|
192
|
+
frameworkVersion: context.frameworkVersion,
|
|
193
|
+
},
|
|
194
|
+
})
|
|
195
|
+
: commands;
|
|
196
|
+
const next = {
|
|
197
|
+
packageManager: workspaceRoot ? "pnpm" : packageManager,
|
|
198
|
+
installed: approved && pending.length === 0,
|
|
199
|
+
pending,
|
|
200
|
+
workspaceRoot,
|
|
201
|
+
};
|
|
202
|
+
if (interactive) {
|
|
203
|
+
p.note(formatNextSteps(target, next), "Next");
|
|
204
|
+
p.outro(next.installed ? `${items.length} page(s) installed.` : "Scaffold ready.");
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
console.log(formatCreateResult(target, result, next));
|
|
208
|
+
}
|
|
209
|
+
// A failed install is a failure; a declined one is a choice.
|
|
210
|
+
return approved && pending.length > 0 ? 1 : 0;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=create-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../../src/commands/create-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `intelligo create <name>` — a new application on the framework.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* and the enduring relationship is the versioned packages, not this
|
|
4
|
+
* This is onboarding, not the product boundary: what it writes is the
|
|
5
|
+
* consumer's from the moment it lands, and the enduring relationship is the versioned packages, not this
|
|
7
6
|
* scaffold. So it generates through the same manifest machinery as
|
|
8
7
|
* `add`, which means the very first upgrade already knows which files
|
|
9
8
|
* you have since edited.
|
|
9
|
+
*
|
|
10
|
+
* In a terminal it asks for the project name when none is given, then
|
|
11
|
+
* which registry pages to install (`--items a,b` or `--all` answer that
|
|
12
|
+
* without asking). The pages are installed by `intelligo sync` — one
|
|
13
|
+
* `shadcn add` per item, from the registry this CLI carries — after the
|
|
14
|
+
* dependencies (from the root of a parent pnpm workspace when the app is
|
|
15
|
+
* a member of one), and only once you approve the exact commands, or
|
|
16
|
+
* pass `--yes`. `--no-install` stops after the scaffold and prints them
|
|
17
|
+
* instead.
|
|
10
18
|
*/
|
|
11
19
|
import { type AddResult } from "./add.js";
|
|
20
|
+
import { type Command, type PackageManager } from "../registry-items.js";
|
|
12
21
|
export type CreateOptions = {
|
|
13
22
|
/** Directory to create the app in; created if absent. */
|
|
14
23
|
target: string;
|
|
@@ -18,8 +27,7 @@ export type CreateOptions = {
|
|
|
18
27
|
* Emit `workspace:*` for the @intelligo-dev/* dependencies instead of a
|
|
19
28
|
* version range. Only meaningful when scaffolding inside this
|
|
20
29
|
* monorepo — outside it, pnpm fails the install with "workspace
|
|
21
|
-
* protocol used outside a workspace"
|
|
22
|
-
* user would have seen.
|
|
30
|
+
* protocol used outside a workspace".
|
|
23
31
|
*/
|
|
24
32
|
linkWorkspace?: boolean;
|
|
25
33
|
};
|
|
@@ -28,6 +36,19 @@ export declare function deriveNames(target: string): {
|
|
|
28
36
|
appName: string;
|
|
29
37
|
appSlug: string;
|
|
30
38
|
};
|
|
39
|
+
export declare function isOccupied(target: string): boolean;
|
|
40
|
+
/** Scaffolding into an occupied directory is how people lose work. */
|
|
41
|
+
export declare function assertNotOccupied(target: string): void;
|
|
31
42
|
export declare function createApp(options: CreateOptions): AddResult;
|
|
32
|
-
export
|
|
43
|
+
export type NextSteps = {
|
|
44
|
+
packageManager: PackageManager;
|
|
45
|
+
/** Whether `create` already installed the dependencies. */
|
|
46
|
+
installed: boolean;
|
|
47
|
+
/** Install commands the developer declined, or that did not get to run. */
|
|
48
|
+
pending?: Command[];
|
|
49
|
+
/** The parent pnpm workspace the app is a member of, installed from its root. */
|
|
50
|
+
workspaceRoot?: string | null;
|
|
51
|
+
};
|
|
52
|
+
export declare function formatNextSteps(target: string, next: NextSteps): string;
|
|
53
|
+
export declare function formatCreateResult(target: string, r: AddResult, next?: NextSteps): string;
|
|
33
54
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAUA;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAoB3D;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AASF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAkBvE;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,SAAS,EACZ,IAAI,GAAE,SAAwD,GAC7D,MAAM,CAWR"}
|
package/dist/commands/create.js
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `intelligo create <name>` — a new application on the framework.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* and the enduring relationship is the versioned packages, not this
|
|
4
|
+
* This is onboarding, not the product boundary: what it writes is the
|
|
5
|
+
* consumer's from the moment it lands, and the enduring relationship is the versioned packages, not this
|
|
7
6
|
* scaffold. So it generates through the same manifest machinery as
|
|
8
7
|
* `add`, which means the very first upgrade already knows which files
|
|
9
8
|
* you have since edited.
|
|
9
|
+
*
|
|
10
|
+
* In a terminal it asks for the project name when none is given, then
|
|
11
|
+
* which registry pages to install (`--items a,b` or `--all` answer that
|
|
12
|
+
* without asking). The pages are installed by `intelligo sync` — one
|
|
13
|
+
* `shadcn add` per item, from the registry this CLI carries — after the
|
|
14
|
+
* dependencies (from the root of a parent pnpm workspace when the app is
|
|
15
|
+
* a member of one), and only once you approve the exact commands, or
|
|
16
|
+
* pass `--yes`. `--no-install` stops after the scaffold and prints them
|
|
17
|
+
* instead.
|
|
10
18
|
*/
|
|
11
19
|
import { existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
12
20
|
import path from "node:path";
|
|
13
21
|
import { addFeature, formatAddResult } from "./add.js";
|
|
22
|
+
import { formatCommand, } from "../registry-items.js";
|
|
14
23
|
/** A package name and product slug derived from the directory name. */
|
|
15
24
|
export function deriveNames(target) {
|
|
16
25
|
const base = path.basename(path.resolve(target));
|
|
@@ -23,13 +32,20 @@ export function deriveNames(target) {
|
|
|
23
32
|
}
|
|
24
33
|
return { appName: slug, appSlug: slug };
|
|
25
34
|
}
|
|
26
|
-
export function
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
export function isOccupied(target) {
|
|
36
|
+
const dir = path.resolve(target);
|
|
37
|
+
return existsSync(dir) && readdirSync(dir).length > 0;
|
|
38
|
+
}
|
|
39
|
+
/** Scaffolding into an occupied directory is how people lose work. */
|
|
40
|
+
export function assertNotOccupied(target) {
|
|
41
|
+
if (isOccupied(target)) {
|
|
42
|
+
throw new Error(`${path.resolve(target)} is not empty. Create the app in a new directory, or use ` +
|
|
31
43
|
`\`intelligo add app-scaffold\` inside an existing one.`);
|
|
32
44
|
}
|
|
45
|
+
}
|
|
46
|
+
export function createApp(options) {
|
|
47
|
+
const target = path.resolve(options.target);
|
|
48
|
+
assertNotOccupied(target);
|
|
33
49
|
mkdirSync(target, { recursive: true });
|
|
34
50
|
const { appName, appSlug } = deriveNames(target);
|
|
35
51
|
return addFeature("app-scaffold", {
|
|
@@ -45,15 +61,39 @@ export function createApp(options) {
|
|
|
45
61
|
},
|
|
46
62
|
});
|
|
47
63
|
}
|
|
48
|
-
|
|
64
|
+
/** A path the reader can paste into a shell, spaces and quotes included. */
|
|
65
|
+
function shellQuote(value) {
|
|
66
|
+
return /^[\w@%+=:,./-]+$/.test(value)
|
|
67
|
+
? value
|
|
68
|
+
: `'${value.replace(/'/g, "'\\''")}'`;
|
|
69
|
+
}
|
|
70
|
+
export function formatNextSteps(target, next) {
|
|
71
|
+
const pm = next.packageManager;
|
|
72
|
+
const appRoot = path.resolve(target);
|
|
73
|
+
const install = {
|
|
74
|
+
command: pm,
|
|
75
|
+
args: ["install"],
|
|
76
|
+
cwd: next.workspaceRoot ?? appRoot,
|
|
77
|
+
};
|
|
78
|
+
return [
|
|
79
|
+
`cd ${shellQuote(path.relative(process.cwd(), appRoot) || ".")}`,
|
|
80
|
+
"cp .env.example .env.local # then fill it in",
|
|
81
|
+
...(next.pending?.length
|
|
82
|
+
? next.pending.map((c) => formatCommand(c, appRoot))
|
|
83
|
+
: next.installed
|
|
84
|
+
? []
|
|
85
|
+
: [formatCommand(install, appRoot)]),
|
|
86
|
+
`${pm === "npm" ? "npm run" : pm} dev`,
|
|
87
|
+
].join("\n");
|
|
88
|
+
}
|
|
89
|
+
export function formatCreateResult(target, r, next = { packageManager: "pnpm", installed: false }) {
|
|
49
90
|
return [
|
|
50
91
|
formatAddResult(r),
|
|
51
92
|
"",
|
|
52
93
|
"Next:",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
" pnpm dev",
|
|
94
|
+
...formatNextSteps(target, next)
|
|
95
|
+
.split("\n")
|
|
96
|
+
.map((line) => ` ${line}`),
|
|
57
97
|
"",
|
|
58
98
|
"`intelligo doctor` will tell you what is still missing.",
|
|
59
99
|
].join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `intelligo doctor` — report the problems that are invisible until
|
|
3
3
|
* they are an incident.
|
|
4
|
-
*
|
|
5
|
-
* The checks here were each chosen because something in this codebase
|
|
6
|
-
* actually went wrong that way, not because they sounded thorough.
|
|
7
4
|
*/
|
|
8
5
|
export type CheckResult = {
|
|
9
6
|
name: string;
|
|
10
7
|
status: "ok" | "warn" | "error";
|
|
11
8
|
detail: string;
|
|
12
9
|
};
|
|
10
|
+
type ItemRequires = {
|
|
11
|
+
marker: string;
|
|
12
|
+
items?: string[];
|
|
13
|
+
files?: string[];
|
|
14
|
+
exports?: Record<string, string[]>;
|
|
15
|
+
features?: string[];
|
|
16
|
+
};
|
|
17
|
+
export type RegistryRequires = {
|
|
18
|
+
scaffold: string[];
|
|
19
|
+
items: Record<string, ItemRequires>;
|
|
20
|
+
};
|
|
13
21
|
export type DoctorOptions = {
|
|
14
22
|
/** Workspace root; defaults to the current working directory. */
|
|
15
23
|
root?: string;
|
|
24
|
+
/** Registry requirements; defaults to the copy bundled with the CLI. */
|
|
25
|
+
requires?: RegistryRequires | null;
|
|
16
26
|
/** Environment to validate; defaults to process.env. */
|
|
17
27
|
env?: NodeJS.ProcessEnv;
|
|
18
28
|
};
|
|
@@ -20,4 +30,5 @@ export declare function runChecks(options?: DoctorOptions): CheckResult[];
|
|
|
20
30
|
export declare function formatResults(results: CheckResult[]): string;
|
|
21
31
|
/** Process exit code: non-zero when any check errored. */
|
|
22
32
|
export declare function exitCodeFor(results: CheckResult[]): number;
|
|
33
|
+
export {};
|
|
23
34
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACrC,CAAC;AAsBF,MAAM,MAAM,aAAa,GAAG;IAC1B,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAyLF,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,WAAW,EAAE,CAwNpE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAK5D;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE1D"}
|