create-daloy 0.35.2 → 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.
- package/bin/create-daloy.mjs +50 -25
- package/package.json +1 -1
- package/sbom.cdx.json +9 -9
- package/sbom.spdx.json +5 -5
- package/templates/bun-basic/_agents/skills/daloyjs-best-practices/SKILL.md +11 -0
- package/templates/bun-basic/package.json +1 -1
- package/templates/cloudflare-worker/_agents/skills/daloyjs-best-practices/SKILL.md +11 -0
- package/templates/cloudflare-worker/package.json +1 -1
- package/templates/deno-basic/_agents/skills/daloyjs-best-practices/SKILL.md +11 -0
- package/templates/deno-basic/deno.json +2 -2
- package/templates/node-basic/_agents/skills/daloyjs-best-practices/SKILL.md +10 -0
- package/templates/node-basic/package.json +1 -1
- package/templates/vercel-edge/_agents/skills/daloyjs-best-practices/SKILL.md +12 -0
- package/templates/vercel-edge/package.json +1 -1
package/bin/create-daloy.mjs
CHANGED
|
@@ -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
|
-
"\
|
|
263
|
-
"\
|
|
264
|
-
"\
|
|
263
|
+
"\u2248\u2248\u2248\u2248\u2248\u2248", // ≈≈≈≈≈≈
|
|
264
|
+
"\u2248\u2248\u2248\u2248\u2248\u2248",
|
|
265
|
+
"\u2248\u2248\u2248\u2248\u2248\u2248",
|
|
265
266
|
]
|
|
266
|
-
: ["
|
|
267
|
+
: ["~~~~~~", "~~~~~~", "~~~~~~"];
|
|
267
268
|
|
|
268
|
-
// Sky-blue palette
|
|
269
|
-
//
|
|
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: [
|
|
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, "
|
|
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
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
|
|
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(
|
|
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,
|
|
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
package/sbom.cdx.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.5",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:a4416ef1-59e7-5669-9295-8eb452a49fdf",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "2026-05-
|
|
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.
|
|
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.
|
|
18
|
+
"bom-ref": "pkg:npm/create-daloy@0.37.0",
|
|
19
19
|
"name": "create-daloy",
|
|
20
|
-
"version": "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.
|
|
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.
|
|
45
|
+
"tagId": "swidtag-create-daloy-0.37.0",
|
|
46
46
|
"name": "create-daloy",
|
|
47
|
-
"version": "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.
|
|
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.
|
|
6
|
-
"documentNamespace": "https://github.com/daloyjs/daloy/sbom/create-daloy-0.
|
|
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-
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
|
@@ -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.
|
|
12
|
-
"@daloyjs/core/": "npm:@daloyjs/core@^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
|
|
@@ -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
|