@lunora/cli 1.0.0-alpha.75 → 1.0.0-alpha.76
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/dist/bin.mjs
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -736,7 +736,7 @@ interface AddCommandResult {
|
|
|
736
736
|
* sub-prompt or alias; every other value IS the registry item name applied
|
|
737
737
|
* directly (`storage` → the `storage` registry item, etc.).
|
|
738
738
|
*/
|
|
739
|
-
type StackFeature = "auth" | "backup" | "crons" | "email" | "presence" | "
|
|
739
|
+
type StackFeature = "ai" | "auth" | "backup" | "browser" | "cloudflare-access" | "crons" | "email" | "flags" | "hyperdrive" | "payment" | "presence" | "queue" | "storage" | "workflow";
|
|
740
740
|
/** Customize a resolved manifest before it is written (e.g. inject the chosen R2 bucket name). */
|
|
741
741
|
type OfferTransformManifest = (manifest: RegistryManifest) => RegistryManifest;
|
|
742
742
|
/**
|
|
@@ -792,7 +792,9 @@ interface OfferDeps {
|
|
|
792
792
|
}) => Promise<string>;
|
|
793
793
|
}
|
|
794
794
|
/**
|
|
795
|
-
* Offer the stack features (
|
|
795
|
+
* Offer the stack features (ai, auth, backup, browser, cloudflare-access,
|
|
796
|
+
* crons, email, flags, hyperdrive, payment, presence, queue, storage,
|
|
797
|
+
* workflow) in ONE multi-select after a successful scaffold. Auth,
|
|
796
798
|
* presence, backups) in ONE multi-select after a successful scaffold. Auth,
|
|
797
799
|
* email, and storage run a follow-up prompt (provider / destination / bucket
|
|
798
800
|
* name); every other feature value is applied as its registry item directly.
|
|
@@ -806,8 +808,8 @@ type Template = "analog" | "astro" | "next" | "nuxt" | "react-router" | "standal
|
|
|
806
808
|
interface InitCommandOptions {
|
|
807
809
|
/**
|
|
808
810
|
* Add features non-interactively after scaffolding (the `--add` flag): a
|
|
809
|
-
* comma-separated list of `auth |
|
|
810
|
-
*
|
|
811
|
+
* comma-separated list of `ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow`.
|
|
812
|
+
* Bypasses the interactive multi-select and sub-prompts —
|
|
811
813
|
* each named feature is applied with its shipped defaults.
|
|
812
814
|
*/
|
|
813
815
|
add?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -736,7 +736,7 @@ interface AddCommandResult {
|
|
|
736
736
|
* sub-prompt or alias; every other value IS the registry item name applied
|
|
737
737
|
* directly (`storage` → the `storage` registry item, etc.).
|
|
738
738
|
*/
|
|
739
|
-
type StackFeature = "auth" | "backup" | "crons" | "email" | "presence" | "
|
|
739
|
+
type StackFeature = "ai" | "auth" | "backup" | "browser" | "cloudflare-access" | "crons" | "email" | "flags" | "hyperdrive" | "payment" | "presence" | "queue" | "storage" | "workflow";
|
|
740
740
|
/** Customize a resolved manifest before it is written (e.g. inject the chosen R2 bucket name). */
|
|
741
741
|
type OfferTransformManifest = (manifest: RegistryManifest) => RegistryManifest;
|
|
742
742
|
/**
|
|
@@ -792,7 +792,9 @@ interface OfferDeps {
|
|
|
792
792
|
}) => Promise<string>;
|
|
793
793
|
}
|
|
794
794
|
/**
|
|
795
|
-
* Offer the stack features (
|
|
795
|
+
* Offer the stack features (ai, auth, backup, browser, cloudflare-access,
|
|
796
|
+
* crons, email, flags, hyperdrive, payment, presence, queue, storage,
|
|
797
|
+
* workflow) in ONE multi-select after a successful scaffold. Auth,
|
|
796
798
|
* presence, backups) in ONE multi-select after a successful scaffold. Auth,
|
|
797
799
|
* email, and storage run a follow-up prompt (provider / destination / bucket
|
|
798
800
|
* name); every other feature value is applied as its registry item directly.
|
|
@@ -806,8 +808,8 @@ type Template = "analog" | "astro" | "next" | "nuxt" | "react-router" | "standal
|
|
|
806
808
|
interface InitCommandOptions {
|
|
807
809
|
/**
|
|
808
810
|
* Add features non-interactively after scaffolding (the `--add` flag): a
|
|
809
|
-
* comma-separated list of `auth |
|
|
810
|
-
*
|
|
811
|
+
* comma-separated list of `ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow`.
|
|
812
|
+
* Bypasses the interactive multi-select and sub-prompts —
|
|
811
813
|
* each named feature is applied with its shipped defaults.
|
|
812
814
|
*/
|
|
813
815
|
add?: string;
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { COMMANDS, VERSION, runCli } from './packem_shared/COMMANDS-
|
|
1
|
+
export { COMMANDS, VERSION, runCli } from './packem_shared/COMMANDS-DW8lQmuW.mjs';
|
|
2
2
|
export { runCodegenCommand } from './packem_chunks/runCodegenCommand.mjs';
|
|
3
3
|
export { DEFAULT_IMPORT_BATCH_SIZE, runExportCommand, runImportCommand } from './packem_shared/DEFAULT_IMPORT_BATCH_SIZE-CRQmmBZM.mjs';
|
|
4
4
|
export { runDeployCommand } from './packem_chunks/runDeployCommand.mjs';
|
|
@@ -343,13 +343,20 @@ ${LUNA_NAME}: ${LUNA_SIGNOFF}`);
|
|
|
343
343
|
};
|
|
344
344
|
|
|
345
345
|
const STACK_FEATURE_OPTIONS = [
|
|
346
|
+
{ description: "LLMs via Workers AI (summarize, generate, stream)", label: "AI", value: "ai" },
|
|
346
347
|
{ description: "Sign-up / sign-in (asks which provider)", label: "Authentication", value: "auth" },
|
|
347
|
-
{ description: "
|
|
348
|
-
{ description: "
|
|
349
|
-
{ description: "
|
|
348
|
+
{ description: "Snapshot + restore your Durable Object data", label: "Backups", value: "backup" },
|
|
349
|
+
{ description: "Headless browser screenshots + PDFs", label: "Browser rendering", value: "browser" },
|
|
350
|
+
{ description: "Zero Trust identity via Cloudflare Access", label: "Cloudflare Access", value: "cloudflare-access" },
|
|
350
351
|
{ description: "Scheduled jobs via Cron Triggers (@lunora/scheduler)", label: "Cron jobs", value: "crons" },
|
|
352
|
+
{ description: "Cloudflare Email Workers + a dev mail catcher", label: "Transactional email", value: "email" },
|
|
353
|
+
{ description: "OpenFeature feature flags (ctx.flags)", label: "Feature flags", value: "flags" },
|
|
354
|
+
{ description: "External Postgres/MySQL via Hyperdrive", label: "Hyperdrive", value: "hyperdrive" },
|
|
355
|
+
{ description: "Stripe-first payments (checkout, subscription, webhooks)", label: "Payments", value: "payment" },
|
|
351
356
|
{ description: "Live presence / who's-online over hibernated WebSockets", label: "Presence", value: "presence" },
|
|
352
|
-
{ description: "
|
|
357
|
+
{ description: "Async message queues (push/pull consumers)", label: "Queues", value: "queue" },
|
|
358
|
+
{ description: "Typed R2 buckets + signed URLs (@lunora/storage)", label: "File storage", value: "storage" },
|
|
359
|
+
{ description: "Durable long-running workflows (step.do, sleep, branch)", label: "Workflows", value: "workflow" }
|
|
353
360
|
];
|
|
354
361
|
const STACK_FEATURE_VALUES = STACK_FEATURE_OPTIONS.map((option) => option.value);
|
|
355
362
|
const featureItem = (feature) => feature === "email" ? EMAIL_ITEM : feature;
|
|
@@ -401,7 +408,10 @@ const offerRegistryExtras = async (deps) => {
|
|
|
401
408
|
return;
|
|
402
409
|
}
|
|
403
410
|
if (!deps.interactive) {
|
|
404
|
-
deps.logger.info(
|
|
411
|
+
deps.logger.info(
|
|
412
|
+
// eslint-disable-next-line no-secrets/no-secrets -- the pipe-separated feature list in this tip is a UI prompt, not a credential
|
|
413
|
+
"tip: add features later with `lunora add <ai|auth|backup|browser|cloudflare-access|crons|email|flags|hyperdrive|payment|presence|queue|storage|workflow>`."
|
|
414
|
+
);
|
|
405
415
|
return;
|
|
406
416
|
}
|
|
407
417
|
const picked = await deps.multiSelect("Which features do you want to add?", STACK_FEATURE_OPTIONS, { defaults: [] });
|
|
@@ -10,8 +10,12 @@ import { tmpdir } from 'node:os';
|
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
|
|
12
12
|
const addCommand = {
|
|
13
|
-
argument: {
|
|
14
|
-
|
|
13
|
+
argument: {
|
|
14
|
+
description: "Feature or registry item: ai | auth | email | storage | crons | presence | queue | workflow | flags | backup | …",
|
|
15
|
+
name: "feature",
|
|
16
|
+
type: String
|
|
17
|
+
},
|
|
18
|
+
description: "Add a feature or registry item (ai, auth, email, storage, crons, …) to the current Lunora project",
|
|
15
19
|
examples: [
|
|
16
20
|
["lunora add auth", "Add authentication (asks which provider)"],
|
|
17
21
|
["lunora add auth --provider clerk", "Add Clerk auth without prompting"],
|
|
@@ -446,7 +450,7 @@ const initCommand = {
|
|
|
446
450
|
type: String
|
|
447
451
|
},
|
|
448
452
|
{
|
|
449
|
-
description: "Add features non-interactively after scaffolding (comma-separated): auth |
|
|
453
|
+
description: "Add features non-interactively after scaffolding (comma-separated): ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow",
|
|
450
454
|
name: "add",
|
|
451
455
|
type: String
|
|
452
456
|
},
|