create-daloy 0.36.0 → 0.37.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.
@@ -216,7 +216,8 @@ const SYMBOLS = SUPPORTS_UNICODE
216
216
  const BAR = color(COLORS.gray, SYMBOLS.bar);
217
217
 
218
218
  function printIntro(title) {
219
- console.log(`${color(COLORS.cyan, SYMBOLS.cornerTL + SYMBOLS.lineH)} ${color(COLORS.bold, title)}`);
219
+ console.log(`${color(COLORS.cyan, SYMBOLS.cornerTL + SYMBOLS.lineH)} ${color(COLORS.bold + COLORS.white, title)}`);
220
+ console.log(`${BAR} ${color(COLORS.dim, "Answer a few prompts \u2014 arrow keys to move, Enter to confirm.")}`);
220
221
  console.log(BAR);
221
222
  }
222
223
 
@@ -259,17 +260,18 @@ function renderBox(lines, options = {}) {
259
260
  // requests, and responses moving cleanly between client and server.
260
261
  const LOGO_WAVE_LINES = SUPPORTS_UNICODE
261
262
  ? [
262
- "\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F",
263
- "\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F",
264
- "\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F\u223F",
263
+ "\u2248\u2248\u2248\u2248\u2248\u2248", // ≈≈≈≈≈≈
264
+ "\u2248\u2248\u2248\u2248\u2248\u2248",
265
+ "\u2248\u2248\u2248\u2248\u2248\u2248",
265
266
  ]
266
- : ["~".repeat(25), "~".repeat(25), "~".repeat(25)];
267
+ : ["~~~~~~", "~~~~~~", "~~~~~~"];
267
268
 
268
- // Sky-blue palette tuned to match `tailwindcss` sky-200/400/700 — the same
269
- // colors used in the wordmark on https://daloyjs.dev.
269
+ // Sky-blue palette anchored to the brand mark (website/public/assets/source/
270
+ // mark.svg): the three stacked waves are sky-200, sky-400, and sky-600. Each
271
+ // row fades slightly along its length so the cascade reads as flowing water.
270
272
  const LOGO_WAVE_GRADIENTS = [
271
273
  { start: [186, 230, 253], end: [125, 211, 252] }, // sky-200 -> sky-300
272
- { start: [56, 189, 248], end: [14, 165, 233] }, // sky-400 -> sky-500
274
+ { start: [56, 189, 248], end: [2, 132, 199] }, // sky-400 -> sky-600
273
275
  { start: [2, 132, 199], end: [3, 105, 161] }, // sky-600 -> sky-700
274
276
  ];
275
277
 
@@ -291,25 +293,45 @@ function gradientLine(line, startRgb, endRgb) {
291
293
  function printBanner(version) {
292
294
  if (!SUPPORTS_UNICODE) {
293
295
  console.log(`\n${color(COLORS.bold + COLORS.cyan, "create-daloy")} ${color(COLORS.dim, `v${version}`)}`);
294
- console.log(color(COLORS.dim, "Contract-first REST APIs for Node, Bun, Deno, Vercel Edge, and Workers"));
296
+ console.log(color(COLORS.dim, "The runtime-portable framework with supply-chain-aware defaults"));
297
+ console.log(color(COLORS.dim, "Secure-by-default runtime | Blocked install scripts | Source-verified lockfiles | Typed end-to-end"));
295
298
  console.log(color(COLORS.dim, "https://daloyjs.dev\n"));
296
299
  return;
297
300
  }
298
- for (let i = 0; i < LOGO_WAVE_LINES.length; i += 1) {
299
- const { start, end } = LOGO_WAVE_GRADIENTS[i];
300
- console.log(` ${gradientLine(LOGO_WAVE_LINES[i], start, end)}`);
301
- }
302
- // Centered wordmark beneath the waves: "Daloy" in neutral text, "JS" in
303
- // brand sky-blue. Mirrors the SVG lockup used on the website.
301
+
302
+ // Brand lockup: the three-wave mark on the left sits beside the wordmark and
303
+ // tagline on the right — mirroring the social banner on https://daloyjs.dev.
304
304
  const wordmark = `${color(COLORS.bold + COLORS.white, "Daloy")}${color(COLORS.bold + COLORS.cyan, "JS")}`;
305
- const wordmarkPadding = " ".repeat(Math.max(0, Math.floor((stringWidth(LOGO_WAVE_LINES[0]) - 7) / 2)));
306
- console.log(` ${wordmarkPadding}${wordmark}`);
307
- // Build the welcome content lines (each contains its own ANSI color codes).
308
- const headline = `${color(COLORS.bold + COLORS.cyan, "Welcome to DaloyJS")} ${color(COLORS.gray, `\u2014 v${version}`)}`;
309
- const subline = color(COLORS.dim, "Contract-first REST APIs for Node, Bun, Deno, Vercel Edge, and Workers.");
310
- const docs = `${color(COLORS.gray, "docs:")} ${color(COLORS.cyan, "https://daloyjs.dev/docs")}`;
305
+ const versionTag = color(COLORS.gray, `v${version}`);
306
+ const tagline = color(COLORS.gray, "The runtime-portable framework with supply-chain-aware defaults");
307
+
308
+ const waves = LOGO_WAVE_LINES.map((line, i) =>
309
+ gradientLine(line, LOGO_WAVE_GRADIENTS[i].start, LOGO_WAVE_GRADIENTS[i].end),
310
+ );
311
+ const gap = " ";
312
+
313
+ console.log("");
314
+ console.log(` ${waves[0]}`);
315
+ console.log(` ${waves[1]}${gap}${wordmark} ${versionTag}`);
316
+ console.log(` ${waves[2]}${gap}${tagline}`);
311
317
  console.log("");
312
- console.log(renderBox([headline, subline, "", docs], { accent: COLORS.cyan }));
318
+
319
+ // Feature chips, brand-styled with cyan middots between dim labels.
320
+ const dot = color(COLORS.cyan, " \u00B7 ");
321
+ const chips = [
322
+ "Secure-by-default",
323
+ "Blocked install scripts",
324
+ "Source-verified lockfiles",
325
+ "Typed end-to-end",
326
+ ]
327
+ .map((chip) => color(COLORS.dim, chip))
328
+ .join(dot);
329
+ console.log(` ${chips}`);
330
+
331
+ // Inverse-video "daloyjs.dev" badge, echoing the rounded pill in the brand
332
+ // banner. Inverse degrades to plain text when color is unavailable.
333
+ const pill = color(COLORS.cyan + COLORS.inverse, " daloyjs.dev ");
334
+ console.log(` ${pill} ${color(COLORS.gray, "docs:")} ${color(COLORS.cyan + COLORS.underline, "https://daloyjs.dev/docs")}`);
313
335
  console.log("");
314
336
  }
315
337
 
@@ -1312,7 +1334,9 @@ async function askChoice(rl, question, choices, defaultChoice) {
1312
1334
  const rawInput = rawInputHandle.stream;
1313
1335
 
1314
1336
  printPromptHeader(question);
1315
- printRailLine(color(COLORS.dim, `Use \u2191 \u2193 to navigate, Enter to confirm, type a number to jump.`));
1337
+ printRailLine(
1338
+ `${color(COLORS.dim, "\u2191/\u2193")} ${color(COLORS.gray, "navigate")} ${color(COLORS.dim, "1\u20139")} ${color(COLORS.gray, "jump")} ${color(COLORS.dim, "enter")} ${color(COLORS.gray, "confirm")}`,
1339
+ );
1316
1340
 
1317
1341
  let index = Math.max(
1318
1342
  0,
@@ -1326,15 +1350,16 @@ async function askChoice(rl, question, choices, defaultChoice) {
1326
1350
  .map((choice, i) => {
1327
1351
  const isActive = i === active;
1328
1352
  const isDefault = optionValue(choice) === defaultChoice;
1353
+ const pointer = isActive ? color(COLORS.cyan, SYMBOLS.pointer) : " ";
1329
1354
  const marker = isActive ? color(COLORS.cyan, SYMBOLS.radioOn) : color(COLORS.gray, SYMBOLS.radioOff);
1330
1355
  const titleRaw = optionTitle(choice).padEnd(titleWidth);
1331
1356
  const valueRaw = optionValue(choice).padEnd(valueWidth);
1332
1357
  const title = isActive ? color(COLORS.bold + COLORS.cyan, titleRaw) : color(COLORS.white, titleRaw);
1333
- const value = color(COLORS.dim, `(${valueRaw})`);
1358
+ const value = color(COLORS.dim, `${valueRaw}`);
1334
1359
  const description = optionDescription(choice);
1335
1360
  const descColored = isActive ? color(COLORS.cyan, description) : color(COLORS.dim, description);
1336
1361
  const recommended = isDefault ? color(COLORS.green, ` ${SYMBOLS.star} recommended`) : "";
1337
- return `${BAR} ${marker} ${title} ${value} ${descColored}${recommended}`;
1362
+ return `${BAR} ${pointer} ${marker} ${title} ${value} ${descColored}${recommended}`;
1338
1363
  })
1339
1364
  .join("\n");
1340
1365
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-daloy",
3
- "version": "0.36.0",
3
+ "version": "0.37.0",
4
4
  "description": "Scaffold a new DaloyJS project. Run with `pnpm create daloy`, `npm create daloy@latest`, `yarn create daloy`, or `bun create daloy`.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/sbom.cdx.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:f93cd589-45c8-513e-a365-e0e8bd5ad309",
4
+ "serialNumber": "urn:uuid:a4416ef1-59e7-5669-9295-8eb452a49fdf",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-05-28T20:50:57.300Z",
7
+ "timestamp": "2026-05-31T20:28:16.974Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "DaloyJS",
11
11
  "name": "daloy-generate-sbom",
12
- "version": "0.36.0"
12
+ "version": "0.37.0"
13
13
  }
14
14
  ],
15
15
  "authors": [],
16
16
  "component": {
17
17
  "type": "library",
18
- "bom-ref": "pkg:npm/create-daloy@0.36.0",
18
+ "bom-ref": "pkg:npm/create-daloy@0.37.0",
19
19
  "name": "create-daloy",
20
- "version": "0.36.0",
20
+ "version": "0.37.0",
21
21
  "description": "Scaffold a new DaloyJS project. Run with `pnpm create daloy`, `npm create daloy@latest`, `yarn create daloy`, or `bun create daloy`.",
22
- "purl": "pkg:npm/create-daloy@0.36.0",
22
+ "purl": "pkg:npm/create-daloy@0.37.0",
23
23
  "licenses": [
24
24
  {
25
25
  "license": {
@@ -42,9 +42,9 @@
42
42
  }
43
43
  ],
44
44
  "swid": {
45
- "tagId": "swidtag-create-daloy-0.36.0",
45
+ "tagId": "swidtag-create-daloy-0.37.0",
46
46
  "name": "create-daloy",
47
- "version": "0.36.0",
47
+ "version": "0.37.0",
48
48
  "tagVersion": 0,
49
49
  "patch": false
50
50
  }
@@ -53,7 +53,7 @@
53
53
  "components": [],
54
54
  "dependencies": [
55
55
  {
56
- "ref": "pkg:npm/create-daloy@0.36.0",
56
+ "ref": "pkg:npm/create-daloy@0.37.0",
57
57
  "dependsOn": []
58
58
  }
59
59
  ]
package/sbom.spdx.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "create-daloy-0.36.0",
6
- "documentNamespace": "https://github.com/daloyjs/daloy/sbom/create-daloy-0.36.0-f93cd589-45c8-513e-a365-e0e8bd5ad309",
5
+ "name": "create-daloy-0.37.0",
6
+ "documentNamespace": "https://github.com/daloyjs/daloy/sbom/create-daloy-0.37.0-a4416ef1-59e7-5669-9295-8eb452a49fdf",
7
7
  "creationInfo": {
8
- "created": "2026-05-28T20:50:57.300Z",
8
+ "created": "2026-05-31T20:28:16.974Z",
9
9
  "creators": [
10
10
  "Tool: daloy-generate-sbom",
11
11
  "Organization: DaloyJS"
@@ -16,7 +16,7 @@
16
16
  {
17
17
  "SPDXID": "SPDXRef-Package-create-daloy",
18
18
  "name": "create-daloy",
19
- "versionInfo": "0.36.0",
19
+ "versionInfo": "0.37.0",
20
20
  "downloadLocation": "https://github.com/daloyjs/daloy",
21
21
  "filesAnalyzed": false,
22
22
  "licenseConcluded": "MIT",
@@ -27,7 +27,7 @@
27
27
  {
28
28
  "referenceCategory": "PACKAGE-MANAGER",
29
29
  "referenceType": "purl",
30
- "referenceLocator": "pkg:npm/create-daloy@0.36.0"
30
+ "referenceLocator": "pkg:npm/create-daloy@0.37.0"
31
31
  }
32
32
  ]
33
33
  }
@@ -1,3 +1,14 @@
1
+ ---
2
+ name: daloyjs-best-practices
3
+ description: >-
4
+ Best practices for building, testing, and hardening this DaloyJS REST API on
5
+ the Bun runtime. Use when adding or changing HTTP routes, Zod schemas,
6
+ middleware, or error handling; regenerating the OpenAPI spec or the typed
7
+ Hey API client; or working on auth, rate limits, secrets, and the project's
8
+ quality gates.
9
+ license: MIT
10
+ ---
11
+
1
12
  # SKILL.md — DaloyJS best practices (Bun)
2
13
 
3
14
  Operational guidance and best practices for AI coding agents working in this
@@ -17,7 +17,7 @@
17
17
  "audit": "pnpm audit --prod"
18
18
  },
19
19
  "dependencies": {
20
- "@daloyjs/core": "^0.36.0",
20
+ "@daloyjs/core": "^0.37.0",
21
21
  "zod": "^4.4.3"
22
22
  },
23
23
  "devDependencies": {
@@ -1,3 +1,14 @@
1
+ ---
2
+ name: daloyjs-best-practices
3
+ description: >-
4
+ Best practices for building, testing, and hardening this DaloyJS REST API on
5
+ Cloudflare Workers. Use when adding or changing HTTP routes, Zod schemas,
6
+ middleware, or error handling; wiring Worker bindings (KV, D1, R2, Queues,
7
+ env, secrets); or working on auth, rate limits, and the project's quality
8
+ gates.
9
+ license: MIT
10
+ ---
11
+
1
12
  # SKILL.md — DaloyJS best practices (Cloudflare Workers)
2
13
 
3
14
  Operational guidance and best practices for AI coding agents working in this
@@ -11,7 +11,7 @@
11
11
  "audit": "pnpm audit --prod"
12
12
  },
13
13
  "dependencies": {
14
- "@daloyjs/core": "^0.36.0",
14
+ "@daloyjs/core": "^0.37.0",
15
15
  "zod": "^4.4.3"
16
16
  },
17
17
  "devDependencies": {
@@ -1,3 +1,14 @@
1
+ ---
2
+ name: daloyjs-best-practices
3
+ description: >-
4
+ Best practices for building, testing, and hardening this DaloyJS REST API on
5
+ the Deno runtime. Use when adding or changing HTTP routes, Zod schemas,
6
+ middleware, or error handling; regenerating the OpenAPI spec; managing Deno
7
+ permissions and tasks; or working on auth, rate limits, secrets, and the
8
+ project's quality gates.
9
+ license: MIT
10
+ ---
11
+
1
12
  # SKILL.md — DaloyJS best practices (Deno)
2
13
 
3
14
  Operational guidance and best practices for AI coding agents working in this
@@ -8,8 +8,8 @@
8
8
  "gen:openapi": "deno run --allow-net --allow-env --allow-read --allow-write scripts/dump-openapi.ts"
9
9
  },
10
10
  "imports": {
11
- "@daloyjs/core": "npm:@daloyjs/core@^0.36.0",
12
- "@daloyjs/core/": "npm:@daloyjs/core@^0.36.0/",
11
+ "@daloyjs/core": "npm:@daloyjs/core@^0.37.0",
12
+ "@daloyjs/core/": "npm:@daloyjs/core@^0.37.0/",
13
13
  "zod": "npm:zod@^4.4.3"
14
14
  },
15
15
  "compilerOptions": {
@@ -1,3 +1,13 @@
1
+ ---
2
+ name: daloyjs-best-practices
3
+ description: >-
4
+ Best practices for building, testing, and hardening this DaloyJS REST API on
5
+ Node.js. Use when adding or changing HTTP routes, Zod schemas, middleware, or
6
+ error handling; regenerating the OpenAPI spec or the typed Hey API client; or
7
+ working on auth, rate limits, secrets, and the project's quality gates.
8
+ license: MIT
9
+ ---
10
+
1
11
  # SKILL.md — DaloyJS best practices (Node)
2
12
 
3
13
  Operational guidance and best practices for AI coding agents working in this
@@ -18,7 +18,7 @@
18
18
  "audit": "pnpm audit --prod"
19
19
  },
20
20
  "dependencies": {
21
- "@daloyjs/core": "^0.36.0",
21
+ "@daloyjs/core": "^0.37.0",
22
22
  "zod": "^4.4.3"
23
23
  },
24
24
  "devDependencies": {
@@ -1,3 +1,15 @@
1
+ ---
2
+ name: daloyjs-best-practices
3
+ description: >-
4
+ Best practices for building, testing, and hardening this DaloyJS REST API on
5
+ Vercel Edge. Use when adding or changing HTTP routes, Zod schemas,
6
+ middleware, or error handling; regenerating the OpenAPI spec or the typed
7
+ Hey API client; keeping the catch-all Edge entrypoint and Web-Standard
8
+ runtime constraints; or working on auth, rate limits, secrets, and the
9
+ project's quality gates.
10
+ license: MIT
11
+ ---
12
+
1
13
  # SKILL.md — DaloyJS best practices (Vercel Edge)
2
14
 
3
15
  Operational guidance and best practices for AI coding agents working in this
@@ -11,7 +11,7 @@
11
11
  "audit": "pnpm audit --prod"
12
12
  },
13
13
  "dependencies": {
14
- "@daloyjs/core": "^0.36.0",
14
+ "@daloyjs/core": "^0.37.0",
15
15
  "zod": "^4.4.3"
16
16
  },
17
17
  "devDependencies": {