create-vizion-digital-agency 1.0.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/README.md +10 -0
- package/index.mjs +149 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# create-vizion-digital-agency
|
|
2
|
+
|
|
3
|
+
Nieuwe projecten van Vizion Digital Agency.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm create vizion-digital-agency@latest
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Dit pakket is alleen de opstarter. De componenten staan in een privé repository van Vizion Digital Agency en worden
|
|
10
|
+
met je eigen Git-toegang opgehaald; zonder toegang tot die repository doet dit pakket niets.
|
package/index.mjs
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* create-vizion-digital-agency: nieuwe projecten van Vizion Digital Agency.
|
|
4
|
+
*
|
|
5
|
+
* npm create vizion-digital-agency@latest [map]
|
|
6
|
+
*
|
|
7
|
+
* Dit is alleen de opstarter en bevat zelf geen componenten. Hij zoekt de nieuwste release van de (privé) repository,
|
|
8
|
+
* haalt die op met git (met jouw eigen GitHub-toegang) en start daarna cli/run.mjs uit die kopie. Zo werkt iedereen
|
|
9
|
+
* met een geteste versie, en hoeft dit pakket alleen opnieuw gepubliceerd te worden als dit bestand verandert.
|
|
10
|
+
*/
|
|
11
|
+
import fs from "node:fs";
|
|
12
|
+
import os from "node:os";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
15
|
+
import { parseArgs } from "node:util";
|
|
16
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
17
|
+
import * as ui from "@clack/prompts";
|
|
18
|
+
|
|
19
|
+
/** Gelijk houden met package.json (npm test controleert dat). */
|
|
20
|
+
const VERSION = "1.0.0";
|
|
21
|
+
/** Afspraak met cli/run.mjs; alleen ophogen als de aanroep van run() verandert. */
|
|
22
|
+
const CONTRACT = 1;
|
|
23
|
+
const REPOSITORY = "https://github.com/Vizion-Digital-Agency/create-vizion-digital-agency.git";
|
|
24
|
+
|
|
25
|
+
// ── Kleuren (het logo en de rest van het uiterlijk komen uit de repository: cli/lib/ui.mjs) ──
|
|
26
|
+
const tty = !process.env.NO_COLOR && process.stdout.isTTY;
|
|
27
|
+
const paint = (code) => (text) => (tty ? `\x1b[${code}m${text}\x1b[0m` : text);
|
|
28
|
+
const bold = paint(1);
|
|
29
|
+
const dim = paint(2);
|
|
30
|
+
const red = paint(31);
|
|
31
|
+
|
|
32
|
+
const HELP = `
|
|
33
|
+
${bold("Vizion Digital Agency")}: nieuw project
|
|
34
|
+
|
|
35
|
+
npm create vizion-digital-agency@latest [map]
|
|
36
|
+
|
|
37
|
+
[map] Waar het project komt (standaard: deze map als hij leeg is, anders een nieuwe map)
|
|
38
|
+
--ref <ref> Een andere versie gebruiken: een tag (v1.2.0) of branch (main). Standaard: de nieuwste release
|
|
39
|
+
--answers <bestand> Zonder vragen: alle antwoorden uit een JSON-bestand (voor scripts en tests)
|
|
40
|
+
--local Ontwikkelen: de componenten uit de repository waarin deze launcher staat
|
|
41
|
+
-v, --version Versie van deze launcher
|
|
42
|
+
-h, --help Deze uitleg
|
|
43
|
+
|
|
44
|
+
Nodig: Node.js 22 of nieuwer en Git met toegang tot github.com/Vizion-Digital-Agency.
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
const { values: options, positionals } = parseArgs({
|
|
48
|
+
allowPositionals: true,
|
|
49
|
+
options: {
|
|
50
|
+
ref: { type: "string" },
|
|
51
|
+
local: { type: "boolean" },
|
|
52
|
+
answers: { type: "string" },
|
|
53
|
+
version: { type: "boolean", short: "v" },
|
|
54
|
+
help: { type: "boolean", short: "h" },
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
if (options.help) {
|
|
59
|
+
console.log(HELP);
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
62
|
+
if (options.version) {
|
|
63
|
+
console.log(VERSION);
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const [major] = process.versions.node.split(".").map(Number);
|
|
68
|
+
if (major < 22) {
|
|
69
|
+
console.error(red(`Node.js 22 of nieuwer is nodig (je hebt ${process.versions.node}). Installeer Node.js 24 LTS.`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** git zonder shell: argumenten (zoals de map) gaan nooit door een shell. */
|
|
74
|
+
const git = (args) =>
|
|
75
|
+
new Promise((resolve) => {
|
|
76
|
+
const child = spawn("git", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
77
|
+
let output = "";
|
|
78
|
+
child.stdout.on("data", (chunk) => (output += chunk));
|
|
79
|
+
child.stderr.on("data", (chunk) => (output += chunk));
|
|
80
|
+
child.on("error", (error) => resolve({ ok: false, output: error.message }));
|
|
81
|
+
child.on("close", (code) => resolve({ ok: code === 0, output }));
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
/** De nieuwste release (tag vX.Y.Z), of null als er nog geen is. */
|
|
85
|
+
async function latestRelease(repository) {
|
|
86
|
+
const result = await git(["ls-remote", "--tags", "--refs", repository, "v*"]);
|
|
87
|
+
if (!result.ok) return { error: result.output.trim() };
|
|
88
|
+
const versions = [...result.output.matchAll(/refs\/tags\/(v(\d+)\.(\d+)\.(\d+))$/gm)]
|
|
89
|
+
.map((m) => ({ tag: m[1], parts: [Number(m[2]), Number(m[3]), Number(m[4])] }))
|
|
90
|
+
.sort((a, b) => b.parts[0] - a.parts[0] || b.parts[1] - a.parts[1] || b.parts[2] - a.parts[2]);
|
|
91
|
+
return { tag: versions[0]?.tag ?? null };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const accessHint =
|
|
95
|
+
"Heb je toegang tot github.com/Vizion-Digital-Agency/create-vizion-digital-agency, en is Git bij GitHub ingelogd " +
|
|
96
|
+
"(bijv. via GitHub Desktop of Git Credential Manager)?";
|
|
97
|
+
|
|
98
|
+
let sourceRoot;
|
|
99
|
+
let ref = "lokaal";
|
|
100
|
+
let clone = null;
|
|
101
|
+
try {
|
|
102
|
+
if (options.local) {
|
|
103
|
+
sourceRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
104
|
+
if (!fs.existsSync(path.join(sourceRoot, "cli", "run.mjs"))) {
|
|
105
|
+
ui.cancel("--local werkt alleen vanuit de repository met de componenten.");
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
if (spawnSync("git", ["--version"], { stdio: "ignore" }).status !== 0) {
|
|
110
|
+
ui.cancel("Git is nodig om de componenten op te halen. Installeer Git en probeer het opnieuw.");
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const repository = process.env.VIZION_REPO ?? REPOSITORY;
|
|
114
|
+
const spinner = ui.spinner();
|
|
115
|
+
spinner.start("Vizion: nieuwste versie zoeken");
|
|
116
|
+
if (options.ref) {
|
|
117
|
+
ref = options.ref;
|
|
118
|
+
} else {
|
|
119
|
+
const release = await latestRelease(repository);
|
|
120
|
+
if (release.error) {
|
|
121
|
+
spinner.stop("GitHub niet bereikbaar", 1);
|
|
122
|
+
ui.log.error(release.error);
|
|
123
|
+
ui.cancel(accessHint);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
ref = release.tag ?? "main";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
spinner.message(`Componenten ophalen (${ref})`);
|
|
130
|
+
clone = fs.mkdtempSync(path.join(os.tmpdir(), "vizion-"));
|
|
131
|
+
const result = await git(["clone", "--depth", "1", "--quiet", "--branch", ref, repository, clone]);
|
|
132
|
+
if (!result.ok) {
|
|
133
|
+
spinner.stop("Ophalen mislukt", 1);
|
|
134
|
+
ui.log.error(result.output.trim());
|
|
135
|
+
ui.cancel(accessHint);
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
} else {
|
|
138
|
+
spinner.stop(`Vizion-componenten opgehaald ${dim(`(${ref})`)}`);
|
|
139
|
+
sourceRoot = clone;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (sourceRoot) {
|
|
144
|
+
const { run } = await import(pathToFileURL(path.join(sourceRoot, "cli", "run.mjs")).href);
|
|
145
|
+
await run({ sourceRoot, options, positionals, ui, cwd: process.cwd(), launcher: { version: VERSION, contract: CONTRACT, ref } });
|
|
146
|
+
}
|
|
147
|
+
} finally {
|
|
148
|
+
if (clone) fs.rmSync(clone, { recursive: true, force: true });
|
|
149
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-vizion-digital-agency",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Nieuwe projecten van Vizion Digital Agency: npm create vizion-digital-agency",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-vizion-digital-agency": "index.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.mjs"
|
|
11
|
+
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=22"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/Vizion-Digital-Agency/create-vizion-digital-agency.git",
|
|
18
|
+
"directory": "packages/create-vizion-digital-agency"
|
|
19
|
+
},
|
|
20
|
+
"author": "Vizion Digital Agency",
|
|
21
|
+
"license": "UNLICENSED",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@clack/prompts": "^1.8.1"
|
|
24
|
+
}
|
|
25
|
+
}
|