@intelligo-dev/cli 1.0.0-beta.13 → 1.0.0-beta.15
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/README.md +65 -2
- package/dist/args.d.ts +10 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +20 -0
- package/dist/args.js.map +1 -0
- package/dist/bin.js +103 -22
- package/dist/bin.js.map +1 -1
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +28 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/create-flow.d.ts +8 -1
- package/dist/commands/create-flow.d.ts.map +1 -1
- package/dist/commands/create-flow.js +101 -34
- package/dist/commands/create-flow.js.map +1 -1
- package/dist/commands/create.d.ts +24 -4
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +57 -14
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +123 -35
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/migrate-check.d.ts +20 -1
- package/dist/commands/migrate-check.d.ts.map +1 -1
- package/dist/commands/migrate-check.js +35 -6
- package/dist/commands/migrate-check.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +2 -8
- package/dist/commands/migrate.js.map +1 -1
- 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 +109 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +392 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/upgrade-check.d.ts.map +1 -1
- package/dist/commands/upgrade-check.js +4 -1
- package/dist/commands/upgrade-check.js.map +1 -1
- package/dist/env-files.d.ts +11 -0
- package/dist/env-files.d.ts.map +1 -1
- package/dist/env-files.js +28 -9
- package/dist/env-files.js.map +1 -1
- package/dist/manifest.d.ts +27 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +30 -3
- package/dist/manifest.js.map +1 -1
- 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 +41 -13
- package/dist/registry-items.d.ts.map +1 -1
- package/dist/registry-items.js +117 -33
- package/dist/registry-items.js.map +1 -1
- package/package.json +1 -1
- package/src/args.ts +25 -0
- package/src/bin.ts +124 -22
- package/src/commands/add.ts +39 -12
- package/src/commands/create-flow.ts +119 -29
- package/src/commands/create.ts +82 -14
- package/src/commands/doctor.ts +156 -47
- package/src/commands/migrate-check.ts +51 -10
- package/src/commands/migrate.ts +2 -8
- package/src/commands/sync-messages.ts +114 -0
- package/src/commands/sync-scaffold.ts +83 -0
- package/src/commands/sync.ts +574 -0
- package/src/commands/upgrade-check.ts +4 -1
- package/src/env-files.ts +28 -7
- package/src/manifest.ts +57 -3
- package/src/module-exports.ts +266 -0
- package/src/registry-bundle.ts +103 -0
- package/src/registry-items.ts +141 -36
- package/templates/admin-page/admin-page.tsx.tpl +96 -24
- package/templates/app-scaffold/gitignore.tpl +25 -0
- package/templates/app-scaffold/intelligo.ts.tpl +6 -47
- package/templates/app-scaffold/next.config.mjs.tpl +31 -2
- package/templates/app-scaffold/package.json.tpl +2 -2
- package/templates/manifest.json +40 -3
- package/templates/pnpm-standalone/npmrc.tpl +6 -0
- package/templates/pnpm-standalone/pnpm-workspace.yaml.tpl +10 -0
- 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 +66 -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 +58 -0
- package/templates/registry/popover-morph.json +22 -0
- package/templates/registry/popover.json +22 -0
- package/templates/registry/pricing.json +117 -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 +2960 -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 +3 -3
- package/templates/registry-requires.json +30 -4
- package/templates/vitest/server-only.ts.tpl +7 -0
- package/templates/vitest/vitest.config.ts.tpl +37 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The conversation around `createApp`: ask what the flags did not say,
|
|
3
3
|
* scaffold, and install the chosen registry items once the developer
|
|
4
|
-
* has approved the commands that do it.
|
|
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.
|
|
5
8
|
*
|
|
6
9
|
* Nothing runs on the developer's machine without their say-so. In a
|
|
7
10
|
* terminal the commands are shown and confirmed; without one (CI, a
|
|
@@ -11,10 +14,21 @@ import { spawnSync } from "node:child_process";
|
|
|
11
14
|
import path from "node:path";
|
|
12
15
|
import * as p from "@clack/prompts";
|
|
13
16
|
import { assertNotOccupied, createApp, deriveNames, formatCreateResult, formatNextSteps, isOccupied, } from "./create.js";
|
|
14
|
-
import {
|
|
17
|
+
import { recordItems, 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
|
+
const CREATE_FLAGS = [
|
|
21
|
+
"--all",
|
|
22
|
+
"--yes",
|
|
23
|
+
"-y",
|
|
24
|
+
"--no-install",
|
|
25
|
+
"--link-workspace",
|
|
26
|
+
];
|
|
15
27
|
export function parseCreateFlags(args) {
|
|
16
28
|
let target;
|
|
17
29
|
let items;
|
|
30
|
+
let name;
|
|
31
|
+
const unknown = [];
|
|
18
32
|
for (let i = 0; i < args.length; i++) {
|
|
19
33
|
const arg = args[i];
|
|
20
34
|
if (arg === "--items" || arg.startsWith("--items=")) {
|
|
@@ -24,13 +38,29 @@ export function parseCreateFlags(args) {
|
|
|
24
38
|
.map((s) => s.trim())
|
|
25
39
|
.filter(Boolean);
|
|
26
40
|
}
|
|
27
|
-
else if (
|
|
41
|
+
else if (arg === "--name" || arg.startsWith("--name=")) {
|
|
42
|
+
const value = arg === "--name" ? args[++i] : arg.slice(7);
|
|
43
|
+
if (!value?.trim() || value.startsWith("-"))
|
|
44
|
+
unknown.push(arg);
|
|
45
|
+
else
|
|
46
|
+
name = value;
|
|
47
|
+
}
|
|
48
|
+
else if (arg.startsWith("-")) {
|
|
49
|
+
if (!CREATE_FLAGS.includes(arg))
|
|
50
|
+
unknown.push(arg);
|
|
51
|
+
}
|
|
52
|
+
else if (target === undefined) {
|
|
28
53
|
target = arg;
|
|
29
54
|
}
|
|
55
|
+
else {
|
|
56
|
+
unknown.push(arg);
|
|
57
|
+
}
|
|
30
58
|
}
|
|
31
59
|
return {
|
|
32
60
|
target,
|
|
33
61
|
items,
|
|
62
|
+
name,
|
|
63
|
+
unknown,
|
|
34
64
|
all: args.includes("--all"),
|
|
35
65
|
yes: args.includes("--yes") || args.includes("-y"),
|
|
36
66
|
install: !args.includes("--no-install"),
|
|
@@ -54,6 +84,32 @@ function run(c, cwd) {
|
|
|
54
84
|
});
|
|
55
85
|
return result.status === 0;
|
|
56
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Run the plan: the dependency install, then the sync. Returns the
|
|
89
|
+
* commands still to run by hand — none when both succeeded.
|
|
90
|
+
*/
|
|
91
|
+
async function installPages(plan, options) {
|
|
92
|
+
const { appRoot, interactive, show } = options;
|
|
93
|
+
const say = (line) => interactive ? p.log.step(line) : console.log(line);
|
|
94
|
+
const fail = (message) => interactive ? p.log.error(message) : console.error(message);
|
|
95
|
+
if (plan.install) {
|
|
96
|
+
say(`› ${show(plan.install)}`);
|
|
97
|
+
if (!run(plan.install, plan.install.cwd ?? appRoot)) {
|
|
98
|
+
fail(`\`${show(plan.install)}\` failed — the scaffold is in place; run the rest by hand.`);
|
|
99
|
+
return [plan.install, plan.sync];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
say(`› ${show(plan.sync)}`);
|
|
103
|
+
const code = await syncApply(plan.items, options.syncContext, {
|
|
104
|
+
force: true,
|
|
105
|
+
log: say,
|
|
106
|
+
});
|
|
107
|
+
if (code !== 0) {
|
|
108
|
+
fail("The pages did not all install — the scaffold is in place; re-run the sync by hand.");
|
|
109
|
+
return [plan.sync];
|
|
110
|
+
}
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
57
113
|
export async function runCreate(flags, context) {
|
|
58
114
|
const { interactive } = context;
|
|
59
115
|
const catalogue = readRegistryCatalogue(context.templatesDir);
|
|
@@ -64,7 +120,7 @@ export async function runCreate(flags, context) {
|
|
|
64
120
|
let target = flags.target;
|
|
65
121
|
if (!target) {
|
|
66
122
|
if (!interactive) {
|
|
67
|
-
console.error("Usage: intelligo create <directory> [--items a,b | --all] [--yes] [--no-install]");
|
|
123
|
+
console.error("Usage: intelligo create <directory> [--items a,b | --all] [--yes] [--no-install] [--name <name>]");
|
|
68
124
|
return 1;
|
|
69
125
|
}
|
|
70
126
|
const answer = await p.text({
|
|
@@ -121,51 +177,62 @@ export async function runCreate(flags, context) {
|
|
|
121
177
|
templatesDir: context.templatesDir,
|
|
122
178
|
frameworkVersion: context.frameworkVersion,
|
|
123
179
|
linkWorkspace: flags.linkWorkspace,
|
|
180
|
+
name: flags.name,
|
|
181
|
+
packageManager,
|
|
124
182
|
});
|
|
125
183
|
const appRoot = path.resolve(target);
|
|
126
184
|
if (interactive) {
|
|
127
185
|
p.log.success(`Scaffolded ${result.written.length} files in ${target}`);
|
|
128
186
|
}
|
|
129
|
-
// 4. The pages — only with approval
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
187
|
+
// 4. The pages — only with approval, but recorded now, so a bare
|
|
188
|
+
// `intelligo sync` installs them if this install does not.
|
|
189
|
+
const workspaceRoot = findWorkspaceRoot(appRoot);
|
|
190
|
+
const plan = installPlan(items, { appRoot, packageManager, workspaceRoot });
|
|
191
|
+
if (plan) {
|
|
192
|
+
recordItems(plan.items, {
|
|
193
|
+
appRoot,
|
|
194
|
+
requires: catalogue.requires,
|
|
195
|
+
frameworkVersion: context.frameworkVersion,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
const commands = plan
|
|
199
|
+
? [...(plan.install ? [plan.install] : []), plan.sync]
|
|
200
|
+
: [];
|
|
201
|
+
const show = (c) => formatCommand(c, appRoot);
|
|
202
|
+
const registryDir = resolveRegistryDir(context.templatesDir);
|
|
203
|
+
if (plan && flags.install && !registryDir) {
|
|
204
|
+
console.error("This CLI has no bundled registry to install pages from — in the framework repository, run `pnpm registry:build` first.");
|
|
205
|
+
}
|
|
206
|
+
let approved = plan !== null && flags.install && flags.yes && !!registryDir;
|
|
207
|
+
if (plan && flags.install && registryDir && !flags.yes && interactive) {
|
|
208
|
+
p.note(commands.map(show).join("\n"), "Commands to run in " + target);
|
|
135
209
|
const answer = await p.confirm({
|
|
136
|
-
message:
|
|
137
|
-
? `shadcn is not installed yet — install the dependencies (shadcn included) with ${
|
|
210
|
+
message: plan.install
|
|
211
|
+
? `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)?`
|
|
138
212
|
: `Add ${items.length} page(s) with shadcn?`,
|
|
139
213
|
});
|
|
140
214
|
if (bail(answer, `The scaffold is in ${target}; nothing was installed.`))
|
|
141
215
|
return 1;
|
|
142
216
|
approved = answer;
|
|
143
217
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
console.error(message);
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
pending = plan;
|
|
164
|
-
}
|
|
218
|
+
const pending = approved && plan && registryDir
|
|
219
|
+
? await installPages(plan, {
|
|
220
|
+
appRoot,
|
|
221
|
+
interactive,
|
|
222
|
+
show,
|
|
223
|
+
syncContext: {
|
|
224
|
+
appRoot,
|
|
225
|
+
registryDir,
|
|
226
|
+
requires: catalogue.requires,
|
|
227
|
+
frameworkVersion: context.frameworkVersion,
|
|
228
|
+
},
|
|
229
|
+
})
|
|
230
|
+
: commands;
|
|
165
231
|
const next = {
|
|
166
|
-
packageManager,
|
|
232
|
+
packageManager: workspaceRoot ? "pnpm" : packageManager,
|
|
167
233
|
installed: approved && pending.length === 0,
|
|
168
234
|
pending,
|
|
235
|
+
workspaceRoot,
|
|
169
236
|
};
|
|
170
237
|
if (interactive) {
|
|
171
238
|
p.note(formatNextSteps(target, next), "Next");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../../src/commands/create-flow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../../src/commands/create-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
*
|
|
10
10
|
* In a terminal it asks for the project name when none is given, then
|
|
11
11
|
* which registry pages to install (`--items a,b` or `--all` answer that
|
|
12
|
-
* without asking). The pages are installed by
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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.
|
|
16
18
|
*/
|
|
17
19
|
import { type AddResult } from "./add.js";
|
|
18
20
|
import { type Command, type PackageManager } from "../registry-items.js";
|
|
@@ -28,6 +30,15 @@ export type CreateOptions = {
|
|
|
28
30
|
* protocol used outside a workspace".
|
|
29
31
|
*/
|
|
30
32
|
linkWorkspace?: boolean;
|
|
33
|
+
/** The project name, when it is not the directory's. */
|
|
34
|
+
name?: string;
|
|
35
|
+
/**
|
|
36
|
+
* The package manager that will install the app. Under pnpm, an app
|
|
37
|
+
* outside any workspace also gets `pnpm-standalone`: its own
|
|
38
|
+
* workspace file declining the dependency build scripts pnpm 10+
|
|
39
|
+
* would otherwise stop the install over.
|
|
40
|
+
*/
|
|
41
|
+
packageManager?: PackageManager;
|
|
31
42
|
};
|
|
32
43
|
/** A package name and product slug derived from the directory name. */
|
|
33
44
|
export declare function deriveNames(target: string): {
|
|
@@ -38,12 +49,21 @@ export declare function isOccupied(target: string): boolean;
|
|
|
38
49
|
/** Scaffolding into an occupied directory is how people lose work. */
|
|
39
50
|
export declare function assertNotOccupied(target: string): void;
|
|
40
51
|
export declare function createApp(options: CreateOptions): AddResult;
|
|
52
|
+
/**
|
|
53
|
+
* `__WORKSPACE_ROOT__` for the scaffold's next.config: a JavaScript
|
|
54
|
+
* literal naming the enclosing pnpm workspace's root relative to the
|
|
55
|
+
* app, or null when the app is not a member of one — the rule `doctor`
|
|
56
|
+
* and `migrate` load env files by.
|
|
57
|
+
*/
|
|
58
|
+
export declare function workspaceRootVariable(target: string): Record<string, string>;
|
|
41
59
|
export type NextSteps = {
|
|
42
60
|
packageManager: PackageManager;
|
|
43
61
|
/** Whether `create` already installed the dependencies. */
|
|
44
62
|
installed: boolean;
|
|
45
63
|
/** Install commands the developer declined, or that did not get to run. */
|
|
46
64
|
pending?: Command[];
|
|
65
|
+
/** The parent pnpm workspace the app is a member of, installed from its root. */
|
|
66
|
+
workspaceRoot?: string | null;
|
|
47
67
|
};
|
|
48
68
|
export declare function formatNextSteps(target: string, next: NextSteps): string;
|
|
49
69
|
export declare function formatCreateResult(target: string, r: AddResult, next?: NextSteps): string;
|
|
@@ -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,EAIL,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAGL,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;IACxB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAUA;AAKD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAsC3D;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS5E;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
|
@@ -9,15 +9,17 @@
|
|
|
9
9
|
*
|
|
10
10
|
* In a terminal it asks for the project name when none is given, then
|
|
11
11
|
* which registry pages to install (`--items a,b` or `--all` answer that
|
|
12
|
-
* without asking). The pages are installed by
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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.
|
|
16
18
|
*/
|
|
17
19
|
import { existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
18
20
|
import path from "node:path";
|
|
19
|
-
import { addFeature, formatAddResult } from "./add.js";
|
|
20
|
-
import { formatCommand, } from "../registry-items.js";
|
|
21
|
+
import { addFeature, formatAddResult, readCatalogue, } from "./add.js";
|
|
22
|
+
import { findWorkspaceRoot, formatCommand, } from "../registry-items.js";
|
|
21
23
|
/** A package name and product slug derived from the directory name. */
|
|
22
24
|
export function deriveNames(target) {
|
|
23
25
|
const base = path.basename(path.resolve(target));
|
|
@@ -30,23 +32,29 @@ export function deriveNames(target) {
|
|
|
30
32
|
}
|
|
31
33
|
return { appName: slug, appSlug: slug };
|
|
32
34
|
}
|
|
35
|
+
/** A fresh repository — `git init`, then `intelligo create .` — is still empty. */
|
|
36
|
+
const IGNORED_ENTRIES = new Set([".git"]);
|
|
33
37
|
export function isOccupied(target) {
|
|
34
38
|
const dir = path.resolve(target);
|
|
35
|
-
return existsSync(dir) &&
|
|
39
|
+
return (existsSync(dir) &&
|
|
40
|
+
readdirSync(dir).some((entry) => !IGNORED_ENTRIES.has(entry)));
|
|
36
41
|
}
|
|
37
42
|
/** Scaffolding into an occupied directory is how people lose work. */
|
|
38
43
|
export function assertNotOccupied(target) {
|
|
39
44
|
if (isOccupied(target)) {
|
|
40
|
-
throw new Error(`${path.resolve(target)} is not empty. Create the app in a new directory,
|
|
41
|
-
|
|
45
|
+
throw new Error(`${path.resolve(target)} is not empty. Create the app in a new directory, ` +
|
|
46
|
+
"or in an empty one (a .git directory may already be there).");
|
|
42
47
|
}
|
|
43
48
|
}
|
|
44
49
|
export function createApp(options) {
|
|
45
50
|
const target = path.resolve(options.target);
|
|
46
51
|
assertNotOccupied(target);
|
|
52
|
+
// Before the directory exists, so a name that slugifies to nothing
|
|
53
|
+
// leaves nothing behind.
|
|
54
|
+
const { appName, appSlug } = deriveNames(options.name || target);
|
|
47
55
|
mkdirSync(target, { recursive: true });
|
|
48
|
-
const
|
|
49
|
-
|
|
56
|
+
const workspaceRoot = findWorkspaceRoot(target);
|
|
57
|
+
const scaffold = addFeature("app-scaffold", {
|
|
50
58
|
appRoot: target,
|
|
51
59
|
templatesDir: options.templatesDir,
|
|
52
60
|
frameworkVersion: options.frameworkVersion,
|
|
@@ -56,8 +64,37 @@ export function createApp(options) {
|
|
|
56
64
|
__INTELLIGO_DEP__: options.linkWorkspace
|
|
57
65
|
? "workspace:*"
|
|
58
66
|
: `^${options.frameworkVersion}`,
|
|
67
|
+
...workspaceRootVariable(target),
|
|
59
68
|
},
|
|
60
69
|
});
|
|
70
|
+
// A member of a parent workspace installs from that root; a workspace
|
|
71
|
+
// file of its own would take it out of it.
|
|
72
|
+
const standalone = options.packageManager === "pnpm" &&
|
|
73
|
+
workspaceRoot === null &&
|
|
74
|
+
STANDALONE in readCatalogue(options.templatesDir);
|
|
75
|
+
if (!standalone)
|
|
76
|
+
return scaffold;
|
|
77
|
+
const pnpm = addFeature(STANDALONE, {
|
|
78
|
+
appRoot: target,
|
|
79
|
+
templatesDir: options.templatesDir,
|
|
80
|
+
frameworkVersion: options.frameworkVersion,
|
|
81
|
+
});
|
|
82
|
+
return { ...scaffold, written: [...scaffold.written, ...pnpm.written] };
|
|
83
|
+
}
|
|
84
|
+
const STANDALONE = "pnpm-standalone";
|
|
85
|
+
/**
|
|
86
|
+
* `__WORKSPACE_ROOT__` for the scaffold's next.config: a JavaScript
|
|
87
|
+
* literal naming the enclosing pnpm workspace's root relative to the
|
|
88
|
+
* app, or null when the app is not a member of one — the rule `doctor`
|
|
89
|
+
* and `migrate` load env files by.
|
|
90
|
+
*/
|
|
91
|
+
export function workspaceRootVariable(target) {
|
|
92
|
+
const root = findWorkspaceRoot(path.resolve(target));
|
|
93
|
+
return {
|
|
94
|
+
__WORKSPACE_ROOT__: root
|
|
95
|
+
? JSON.stringify(path.relative(path.resolve(target), root).split(path.sep).join("/"))
|
|
96
|
+
: "null",
|
|
97
|
+
};
|
|
61
98
|
}
|
|
62
99
|
/** A path the reader can paste into a shell, spaces and quotes included. */
|
|
63
100
|
function shellQuote(value) {
|
|
@@ -67,14 +104,20 @@ function shellQuote(value) {
|
|
|
67
104
|
}
|
|
68
105
|
export function formatNextSteps(target, next) {
|
|
69
106
|
const pm = next.packageManager;
|
|
107
|
+
const appRoot = path.resolve(target);
|
|
108
|
+
const install = {
|
|
109
|
+
command: pm,
|
|
110
|
+
args: ["install"],
|
|
111
|
+
cwd: next.workspaceRoot ?? appRoot,
|
|
112
|
+
};
|
|
70
113
|
return [
|
|
71
|
-
`cd ${shellQuote(path.relative(process.cwd(),
|
|
114
|
+
`cd ${shellQuote(path.relative(process.cwd(), appRoot) || ".")}`,
|
|
72
115
|
"cp .env.example .env.local # then fill it in",
|
|
73
116
|
...(next.pending?.length
|
|
74
|
-
? next.pending.map(formatCommand)
|
|
117
|
+
? next.pending.map((c) => formatCommand(c, appRoot))
|
|
75
118
|
: next.installed
|
|
76
119
|
? []
|
|
77
|
-
: [
|
|
120
|
+
: [formatCommand(install, appRoot)]),
|
|
78
121
|
`${pm === "npm" ? "npm run" : pm} dev`,
|
|
79
122
|
].join("\n");
|
|
80
123
|
}
|
|
@@ -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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"}
|
|
@@ -16,6 +16,8 @@ type ItemRequires = {
|
|
|
16
16
|
};
|
|
17
17
|
export type RegistryRequires = {
|
|
18
18
|
scaffold: string[];
|
|
19
|
+
/** Files an item ships once and the deployment then owns. */
|
|
20
|
+
seams?: Record<string, string>;
|
|
19
21
|
items: Record<string, ItemRequires>;
|
|
20
22
|
};
|
|
21
23
|
export type DoctorOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,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;AA0RF,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,WAAW,EAAE,CAkOpE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAK5D;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE1D"}
|