@decohere/create 0.0.1-dev.49 → 0.0.1-dev.5

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.
@@ -3,7 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- const _runner = require("./runner.js");
7
- (0, _runner.runInBuilder)(process.argv.slice(2));
6
+ const _nodepath = require("node:path");
7
+ const _commander = require("commander");
8
+ const _scaffold = require("./scaffold.js");
9
+ const program = new _commander.Command();
10
+ program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").action(async (directory, opts)=>{
11
+ await (0, _scaffold.scaffold)((0, _nodepath.resolve)(directory), opts);
12
+ });
13
+ program.parse();
8
14
 
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJ1bkluQnVpbGRlciB9IGZyb20gXCIuL3J1bm5lci5qc1wiO1xuXG5ydW5JbkJ1aWxkZXIocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcbiJdLCJuYW1lcyI6WyJydW5JbkJ1aWxkZXIiLCJwcm9jZXNzIiwiYXJndiIsInNsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozt3QkFDNkI7QUFFN0JBLElBQUFBLG9CQUFZLEVBQUNDLFFBQVFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBzY2FmZm9sZCB9IGZyb20gXCIuL3NjYWZmb2xkLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIilcblx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIilcblx0LmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcsIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0fSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJwcm9ncmFtIiwiQ29tbWFuZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiYWN0aW9uIiwiZGlyZWN0b3J5Iiwib3B0cyIsInNjYWZmb2xkIiwicmVzb2x2ZSIsInBhcnNlIl0sIm1hcHBpbmdzIjoiOzs7OzswQkFDd0I7MkJBQ0E7MEJBQ0M7QUFFekIsTUFBTUEsVUFBVSxJQUFJQyxrQkFBTztBQUUzQkQsUUFDRUUsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxtQ0FDWkMsUUFBUSxDQUFDLGVBQWUsaURBQWlELEtBQ3pFQyxNQUFNLENBQUMsYUFBYSw2QkFDcEJDLE1BQU0sQ0FBQyxPQUFPQyxXQUFtQkM7SUFDakMsTUFBTUMsSUFBQUEsa0JBQVEsRUFBQ0MsSUFBQUEsaUJBQU8sRUFBQ0gsWUFBWUM7QUFDcEM7QUFFRFIsUUFBUVcsS0FBSyJ9
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "scaffold", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return scaffold;
9
+ }
10
+ });
11
+ const _nodefs = require("node:fs");
12
+ const _promises = require("node:fs/promises");
13
+ const _nodepath = require("node:path");
14
+ const _promises1 = require("node:readline/promises");
15
+ const _templates = require("./templates.js");
16
+ async function scaffold(targetDir, opts) {
17
+ const name = (0, _nodepath.basename)(targetDir);
18
+ if ((0, _nodefs.existsSync)(targetDir) && (0, _nodefs.readdirSync)(targetDir).length > 0 && !opts.yes) {
19
+ const rl = (0, _promises1.createInterface)({
20
+ input: process.stdin,
21
+ output: process.stdout
22
+ });
23
+ const answer = await rl.question(`Directory "${name}" is not empty. Continue? [y/N] `);
24
+ rl.close();
25
+ if (!answer.trim().toLowerCase().startsWith("y")) {
26
+ console.log("Aborted.");
27
+ process.exit(0);
28
+ }
29
+ }
30
+ await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "app", "src"), {
31
+ recursive: true
32
+ });
33
+ await Promise.all([
34
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "package.json"), (0, _templates.ROOT_PACKAGE_JSON)(name)),
35
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "tsconfig.json"), _templates.TSCONFIG),
36
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "package.json"), (0, _templates.APP_PACKAGE_JSON)(name)),
37
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "src", "main.ts"), _templates.MAIN_TS)
38
+ ]);
39
+ console.log(`\nScaffolded ${name}. Next steps:\n`);
40
+ if ((0, _nodepath.basename)(targetDir) !== targetDir) {
41
+ console.log(` cd ${name}`);
42
+ }
43
+ console.log(" pnpm install");
44
+ console.log(" pnpm build # forge build");
45
+ console.log(" pnpm dev # flux serve\n");
46
+ }
47
+
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9zY2FmZm9sZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmUvcHJvbWlzZXNcIjtcbmltcG9ydCB7IEFQUF9QQUNLQUdFX0pTT04sIE1BSU5fVFMsIFJPT1RfUEFDS0FHRV9KU09OLCBUU0NPTkZJRyB9IGZyb20gXCIuL3RlbXBsYXRlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG5cdHllcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh0YXJnZXREaXI6IHN0cmluZywgb3B0czogU2NhZmZvbGRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG5hbWUgPSBiYXNlbmFtZSh0YXJnZXREaXIpO1xuXG5cdGlmIChleGlzdHNTeW5jKHRhcmdldERpcikgJiYgcmVhZGRpclN5bmModGFyZ2V0RGlyKS5sZW5ndGggPiAwICYmICFvcHRzLnllcykge1xuXHRcdGNvbnN0IHJsID0gY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBybC5xdWVzdGlvbihgRGlyZWN0b3J5IFwiJHtuYW1lfVwiIGlzIG5vdCBlbXB0eS4gQ29udGludWU/IFt5L05dIGApO1xuXHRcdHJsLmNsb3NlKCk7XG5cdFx0aWYgKCFhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInlcIikpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiQWJvcnRlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdFx0fVxuXHR9XG5cblx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpLCBST09UX1BBQ0tBR0VfSlNPTihuYW1lKSksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInRzY29uZmlnLmpzb25cIiksIFRTQ09ORklHKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwcFwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksIE1BSU5fVFMpLFxuXHRdKTtcblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBOZXh0IHN0ZXBzOlxcbmApO1xuXHRpZiAoYmFzZW5hbWUodGFyZ2V0RGlyKSAhPT0gdGFyZ2V0RGlyKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgY2QgJHtuYW1lfWApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGluc3RhbGxcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGJ1aWxkICAgICAjIGZvcmdlIGJ1aWxkXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBkZXYgICAgICAgIyBmbHV4IHNlcnZlXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbInNjYWZmb2xkIiwidGFyZ2V0RGlyIiwib3B0cyIsIm5hbWUiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsImxlbmd0aCIsInllcyIsInJsIiwiY3JlYXRlSW50ZXJmYWNlIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJvdXRwdXQiLCJzdGRvdXQiLCJhbnN3ZXIiLCJxdWVzdGlvbiIsImNsb3NlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImNvbnNvbGUiLCJsb2ciLCJleGl0IiwibWtkaXIiLCJqb2luIiwicmVjdXJzaXZlIiwiUHJvbWlzZSIsImFsbCIsIndyaXRlRmlsZSIsIlJPT1RfUEFDS0FHRV9KU09OIiwiVFNDT05GSUciLCJBUFBfUEFDS0FHRV9KU09OIiwiTUFJTl9UUyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFVc0JBOzs7ZUFBQUE7Ozt3QkFWa0I7MEJBQ1A7MEJBQ0Y7MkJBQ0M7MkJBQ3VDO0FBTWhFLGVBQWVBLFNBQVNDLFNBQWlCLEVBQUVDLElBQXFCO0lBQ3RFLE1BQU1DLE9BQU9DLElBQUFBLGtCQUFRLEVBQUNIO0lBRXRCLElBQUlJLElBQUFBLGtCQUFVLEVBQUNKLGNBQWNLLElBQUFBLG1CQUFXLEVBQUNMLFdBQVdNLE1BQU0sR0FBRyxLQUFLLENBQUNMLEtBQUtNLEdBQUcsRUFBRTtRQUM1RSxNQUFNQyxLQUFLQyxJQUFBQSwwQkFBZSxFQUFDO1lBQzFCQyxPQUFPQyxRQUFRQyxLQUFLO1lBQ3BCQyxRQUFRRixRQUFRRyxNQUFNO1FBQ3ZCO1FBQ0EsTUFBTUMsU0FBUyxNQUFNUCxHQUFHUSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUVkLEtBQUssZ0NBQWdDLENBQUM7UUFDckZNLEdBQUdTLEtBQUs7UUFDUixJQUFJLENBQUNGLE9BQU9HLElBQUksR0FBR0MsV0FBVyxHQUFHQyxVQUFVLENBQUMsTUFBTTtZQUNqREMsUUFBUUMsR0FBRyxDQUFDO1lBQ1pYLFFBQVFZLElBQUksQ0FBQztRQUNkO0lBQ0Q7SUFFQSxNQUFNQyxJQUFBQSxlQUFLLEVBQUNDLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsWUFBWSxPQUFPLFFBQVE7UUFBRTBCLFdBQVc7SUFBSztJQUV6RSxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDakJDLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsaUJBQWlCOEIsSUFBQUEsNEJBQWlCLEVBQUM1QjtRQUM3RDJCLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsa0JBQWtCK0IsbUJBQVE7UUFDcERGLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsWUFBWSxPQUFPLGlCQUFpQmdDLElBQUFBLDJCQUFnQixFQUFDOUI7UUFDL0UyQixJQUFBQSxtQkFBUyxFQUFDSixJQUFBQSxjQUFJLEVBQUN6QixXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVlpQyxrQkFBTztLQUN2RTtJQUVEWixRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVwQixLQUFLLGVBQWUsQ0FBQztJQUNqRCxJQUFJQyxJQUFBQSxrQkFBUSxFQUFDSCxlQUFlQSxXQUFXO1FBQ3RDcUIsUUFBUUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFcEIsTUFBTTtJQUMzQjtJQUNBbUIsUUFBUUMsR0FBRyxDQUFDO0lBQ1pELFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7QUFDYiJ9
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get APP_PACKAGE_JSON () {
13
+ return APP_PACKAGE_JSON;
14
+ },
15
+ get MAIN_TS () {
16
+ return MAIN_TS;
17
+ },
18
+ get ROOT_PACKAGE_JSON () {
19
+ return ROOT_PACKAGE_JSON;
20
+ },
21
+ get TSCONFIG () {
22
+ return TSCONFIG;
23
+ }
24
+ });
25
+ function ROOT_PACKAGE_JSON(name) {
26
+ return JSON.stringify({
27
+ name,
28
+ version: "0.0.1",
29
+ type: "module",
30
+ scripts: {
31
+ build: "forge build",
32
+ "build:watch": "forge build --watch",
33
+ dev: "flux serve"
34
+ },
35
+ devDependencies: {
36
+ "@decohere/terminal": "0.0.1-dev.14",
37
+ typescript: "^6.0.3"
38
+ }
39
+ }, null, 2);
40
+ }
41
+ function APP_PACKAGE_JSON(name) {
42
+ return JSON.stringify({
43
+ name: `@${name}/app`,
44
+ version: "0.0.1",
45
+ type: "module",
46
+ main: "src/main.ts"
47
+ }, null, 2);
48
+ }
49
+ const TSCONFIG = JSON.stringify({
50
+ compilerOptions: {
51
+ target: "ES2022",
52
+ module: "NodeNext",
53
+ moduleResolution: "NodeNext",
54
+ strict: true,
55
+ skipLibCheck: true
56
+ },
57
+ include: [
58
+ "projects"
59
+ ]
60
+ }, null, 2);
61
+ const MAIN_TS = `console.log("Hello from Decohere!");
62
+ `;
63
+
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy90ZW1wbGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIFJPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdHNjcmlwdHM6IHtcblx0XHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGRcIixcblx0XHRcdFx0XCJidWlsZDp3YXRjaFwiOiBcImZvcmdlIGJ1aWxkIC0td2F0Y2hcIixcblx0XHRcdFx0ZGV2OiBcImZsdXggc2VydmVcIixcblx0XHRcdH0sXG5cdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcdFx0XCJAZGVjb2hlcmUvdGVybWluYWxcIjogXCIwLjAuMS1kZXYuMTRcIixcblx0XHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBUFBfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lOiBgQCR7bmFtZX0vYXBwYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRtYWluOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHR9LFxuXHRcdGluY2x1ZGU6IFtcInByb2plY3RzXCJdLFxuXHR9LFxuXHRudWxsLFxuXHQyLFxuKTtcblxuZXhwb3J0IGNvbnN0IE1BSU5fVFMgPSBgY29uc29sZS5sb2coXCJIZWxsbyBmcm9tIERlY29oZXJlIVwiKTtcbmA7XG4iXSwibmFtZXMiOlsiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2ZXJzaW9uIiwidHlwZSIsInNjcmlwdHMiLCJidWlsZCIsImRldiIsImRldkRlcGVuZGVuY2llcyIsInR5cGVzY3JpcHQiLCJtYWluIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBcUJnQkE7ZUFBQUE7O1FBNEJIQztlQUFBQTs7UUFqREdDO2VBQUFBOztRQWtDSEM7ZUFBQUE7OztBQWxDTixTQUFTRCxrQkFBa0JFLElBQVk7SUFDN0MsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRjtRQUNBRyxTQUFTO1FBQ1RDLE1BQU07UUFDTkMsU0FBUztZQUNSQyxPQUFPO1lBQ1AsZUFBZTtZQUNmQyxLQUFLO1FBQ047UUFDQUMsaUJBQWlCO1lBQ2hCLHNCQUFzQjtZQUN0QkMsWUFBWTtRQUNiO0lBQ0QsR0FDQSxNQUNBO0FBRUY7QUFFTyxTQUFTYixpQkFBaUJJLElBQVk7SUFDNUMsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRixNQUFNLENBQUMsQ0FBQyxFQUFFQSxLQUFLLElBQUksQ0FBQztRQUNwQkcsU0FBUztRQUNUQyxNQUFNO1FBQ05NLE1BQU07SUFDUCxHQUNBLE1BQ0E7QUFFRjtBQUVPLE1BQU1YLFdBQVdFLEtBQUtDLFNBQVMsQ0FDckM7SUFDQ1MsaUJBQWlCO1FBQ2hCQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsa0JBQWtCO1FBQ2xCQyxRQUFRO1FBQ1JDLGNBQWM7SUFDZjtJQUNBQyxTQUFTO1FBQUM7S0FBVztBQUN0QixHQUNBLE1BQ0E7QUFHTSxNQUFNcEIsVUFBVSxDQUFDO0FBQ3hCLENBQUMifQ==
package/es6/src/cli.js CHANGED
@@ -1,5 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { runInBuilder } from "./runner.js";
3
- runInBuilder(process.argv.slice(2));
2
+ import { resolve } from "node:path";
3
+ import { Command } from "commander";
4
+ import { scaffold } from "./scaffold.js";
5
+ const program = new Command();
6
+ program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").action(async (directory, opts)=>{
7
+ await scaffold(resolve(directory), opts);
8
+ });
9
+ program.parse();
4
10
 
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJ1bkluQnVpbGRlciB9IGZyb20gXCIuL3J1bm5lci5qc1wiO1xuXG5ydW5JbkJ1aWxkZXIocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcbiJdLCJuYW1lcyI6WyJydW5JbkJ1aWxkZXIiLCJwcm9jZXNzIiwiYXJndiIsInNsaWNlIl0sIm1hcHBpbmdzIjoiO0FBQ0EsU0FBU0EsWUFBWSxRQUFRLGNBQWM7QUFFM0NBLGFBQWFDLFFBQVFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDIn0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBzY2FmZm9sZCB9IGZyb20gXCIuL3NjYWZmb2xkLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIilcblx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIilcblx0LmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcsIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0fSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiQ29tbWFuZCIsInNjYWZmb2xkIiwicHJvZ3JhbSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiYWN0aW9uIiwiZGlyZWN0b3J5Iiwib3B0cyIsInBhcnNlIl0sIm1hcHBpbmdzIjoiO0FBQ0EsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsUUFBUSxRQUFRLGdCQUFnQjtBQUV6QyxNQUFNQyxVQUFVLElBQUlGO0FBRXBCRSxRQUNFQyxJQUFJLENBQUMsWUFDTEMsV0FBVyxDQUFDLG1DQUNaQyxRQUFRLENBQUMsZUFBZSxpREFBaUQsS0FDekVDLE1BQU0sQ0FBQyxhQUFhLDZCQUNwQkMsTUFBTSxDQUFDLE9BQU9DLFdBQW1CQztJQUNqQyxNQUFNUixTQUFTRixRQUFRUyxZQUFZQztBQUNwQztBQUVEUCxRQUFRUSxLQUFLIn0=
@@ -0,0 +1,38 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { basename, join } from "node:path";
4
+ import { createInterface } from "node:readline/promises";
5
+ import { APP_PACKAGE_JSON, MAIN_TS, ROOT_PACKAGE_JSON, TSCONFIG } from "./templates.js";
6
+ export async function scaffold(targetDir, opts) {
7
+ const name = basename(targetDir);
8
+ if (existsSync(targetDir) && readdirSync(targetDir).length > 0 && !opts.yes) {
9
+ const rl = createInterface({
10
+ input: process.stdin,
11
+ output: process.stdout
12
+ });
13
+ const answer = await rl.question(`Directory "${name}" is not empty. Continue? [y/N] `);
14
+ rl.close();
15
+ if (!answer.trim().toLowerCase().startsWith("y")) {
16
+ console.log("Aborted.");
17
+ process.exit(0);
18
+ }
19
+ }
20
+ await mkdir(join(targetDir, "projects", "app", "src"), {
21
+ recursive: true
22
+ });
23
+ await Promise.all([
24
+ writeFile(join(targetDir, "package.json"), ROOT_PACKAGE_JSON(name)),
25
+ writeFile(join(targetDir, "tsconfig.json"), TSCONFIG),
26
+ writeFile(join(targetDir, "projects", "app", "package.json"), APP_PACKAGE_JSON(name)),
27
+ writeFile(join(targetDir, "projects", "app", "src", "main.ts"), MAIN_TS)
28
+ ]);
29
+ console.log(`\nScaffolded ${name}. Next steps:\n`);
30
+ if (basename(targetDir) !== targetDir) {
31
+ console.log(` cd ${name}`);
32
+ }
33
+ console.log(" pnpm install");
34
+ console.log(" pnpm build # forge build");
35
+ console.log(" pnpm dev # flux serve\n");
36
+ }
37
+
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9zY2FmZm9sZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmUvcHJvbWlzZXNcIjtcbmltcG9ydCB7IEFQUF9QQUNLQUdFX0pTT04sIE1BSU5fVFMsIFJPT1RfUEFDS0FHRV9KU09OLCBUU0NPTkZJRyB9IGZyb20gXCIuL3RlbXBsYXRlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG5cdHllcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh0YXJnZXREaXI6IHN0cmluZywgb3B0czogU2NhZmZvbGRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG5hbWUgPSBiYXNlbmFtZSh0YXJnZXREaXIpO1xuXG5cdGlmIChleGlzdHNTeW5jKHRhcmdldERpcikgJiYgcmVhZGRpclN5bmModGFyZ2V0RGlyKS5sZW5ndGggPiAwICYmICFvcHRzLnllcykge1xuXHRcdGNvbnN0IHJsID0gY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBybC5xdWVzdGlvbihgRGlyZWN0b3J5IFwiJHtuYW1lfVwiIGlzIG5vdCBlbXB0eS4gQ29udGludWU/IFt5L05dIGApO1xuXHRcdHJsLmNsb3NlKCk7XG5cdFx0aWYgKCFhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInlcIikpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiQWJvcnRlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdFx0fVxuXHR9XG5cblx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpLCBST09UX1BBQ0tBR0VfSlNPTihuYW1lKSksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInRzY29uZmlnLmpzb25cIiksIFRTQ09ORklHKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwcFwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksIE1BSU5fVFMpLFxuXHRdKTtcblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBOZXh0IHN0ZXBzOlxcbmApO1xuXHRpZiAoYmFzZW5hbWUodGFyZ2V0RGlyKSAhPT0gdGFyZ2V0RGlyKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgY2QgJHtuYW1lfWApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGluc3RhbGxcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGJ1aWxkICAgICAjIGZvcmdlIGJ1aWxkXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBkZXYgICAgICAgIyBmbHV4IHNlcnZlXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsIm1rZGlyIiwid3JpdGVGaWxlIiwiYmFzZW5hbWUiLCJqb2luIiwiY3JlYXRlSW50ZXJmYWNlIiwiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwic2NhZmZvbGQiLCJ0YXJnZXREaXIiLCJvcHRzIiwibmFtZSIsImxlbmd0aCIsInllcyIsInJsIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJvdXRwdXQiLCJzdGRvdXQiLCJhbnN3ZXIiLCJxdWVzdGlvbiIsImNsb3NlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImNvbnNvbGUiLCJsb2ciLCJleGl0IiwicmVjdXJzaXZlIiwiUHJvbWlzZSIsImFsbCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxXQUFXLFFBQVEsVUFBVTtBQUNsRCxTQUFTQyxLQUFLLEVBQUVDLFNBQVMsUUFBUSxtQkFBbUI7QUFDcEQsU0FBU0MsUUFBUSxFQUFFQyxJQUFJLFFBQVEsWUFBWTtBQUMzQyxTQUFTQyxlQUFlLFFBQVEseUJBQXlCO0FBQ3pELFNBQVNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUVDLGlCQUFpQixFQUFFQyxRQUFRLFFBQVEsaUJBQWlCO0FBTXhGLE9BQU8sZUFBZUMsU0FBU0MsU0FBaUIsRUFBRUMsSUFBcUI7SUFDdEUsTUFBTUMsT0FBT1YsU0FBU1E7SUFFdEIsSUFBSVosV0FBV1ksY0FBY1gsWUFBWVcsV0FBV0csTUFBTSxHQUFHLEtBQUssQ0FBQ0YsS0FBS0csR0FBRyxFQUFFO1FBQzVFLE1BQU1DLEtBQUtYLGdCQUFnQjtZQUMxQlksT0FBT0MsUUFBUUMsS0FBSztZQUNwQkMsUUFBUUYsUUFBUUcsTUFBTTtRQUN2QjtRQUNBLE1BQU1DLFNBQVMsTUFBTU4sR0FBR08sUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFVixLQUFLLGdDQUFnQyxDQUFDO1FBQ3JGRyxHQUFHUSxLQUFLO1FBQ1IsSUFBSSxDQUFDRixPQUFPRyxJQUFJLEdBQUdDLFdBQVcsR0FBR0MsVUFBVSxDQUFDLE1BQU07WUFDakRDLFFBQVFDLEdBQUcsQ0FBQztZQUNaWCxRQUFRWSxJQUFJLENBQUM7UUFDZDtJQUNEO0lBRUEsTUFBTTdCLE1BQU1HLEtBQUtPLFdBQVcsWUFBWSxPQUFPLFFBQVE7UUFBRW9CLFdBQVc7SUFBSztJQUV6RSxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDakIvQixVQUFVRSxLQUFLTyxXQUFXLGlCQUFpQkgsa0JBQWtCSztRQUM3RFgsVUFBVUUsS0FBS08sV0FBVyxrQkFBa0JGO1FBQzVDUCxVQUFVRSxLQUFLTyxXQUFXLFlBQVksT0FBTyxpQkFBaUJMLGlCQUFpQk87UUFDL0VYLFVBQVVFLEtBQUtPLFdBQVcsWUFBWSxPQUFPLE9BQU8sWUFBWUo7S0FDaEU7SUFFRHFCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRWhCLEtBQUssZUFBZSxDQUFDO0lBQ2pELElBQUlWLFNBQVNRLGVBQWVBLFdBQVc7UUFDdENpQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUVoQixNQUFNO0lBQzNCO0lBQ0FlLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0FBQ2IifQ==
@@ -0,0 +1,40 @@
1
+ export function ROOT_PACKAGE_JSON(name) {
2
+ return JSON.stringify({
3
+ name,
4
+ version: "0.0.1",
5
+ type: "module",
6
+ scripts: {
7
+ build: "forge build",
8
+ "build:watch": "forge build --watch",
9
+ dev: "flux serve"
10
+ },
11
+ devDependencies: {
12
+ "@decohere/terminal": "0.0.1-dev.14",
13
+ typescript: "^6.0.3"
14
+ }
15
+ }, null, 2);
16
+ }
17
+ export function APP_PACKAGE_JSON(name) {
18
+ return JSON.stringify({
19
+ name: `@${name}/app`,
20
+ version: "0.0.1",
21
+ type: "module",
22
+ main: "src/main.ts"
23
+ }, null, 2);
24
+ }
25
+ export const TSCONFIG = JSON.stringify({
26
+ compilerOptions: {
27
+ target: "ES2022",
28
+ module: "NodeNext",
29
+ moduleResolution: "NodeNext",
30
+ strict: true,
31
+ skipLibCheck: true
32
+ },
33
+ include: [
34
+ "projects"
35
+ ]
36
+ }, null, 2);
37
+ export const MAIN_TS = `console.log("Hello from Decohere!");
38
+ `;
39
+
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy90ZW1wbGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIFJPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdHNjcmlwdHM6IHtcblx0XHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGRcIixcblx0XHRcdFx0XCJidWlsZDp3YXRjaFwiOiBcImZvcmdlIGJ1aWxkIC0td2F0Y2hcIixcblx0XHRcdFx0ZGV2OiBcImZsdXggc2VydmVcIixcblx0XHRcdH0sXG5cdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcdFx0XCJAZGVjb2hlcmUvdGVybWluYWxcIjogXCIwLjAuMS1kZXYuMTRcIixcblx0XHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBUFBfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lOiBgQCR7bmFtZX0vYXBwYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRtYWluOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHR9LFxuXHRcdGluY2x1ZGU6IFtcInByb2plY3RzXCJdLFxuXHR9LFxuXHRudWxsLFxuXHQyLFxuKTtcblxuZXhwb3J0IGNvbnN0IE1BSU5fVFMgPSBgY29uc29sZS5sb2coXCJIZWxsbyBmcm9tIERlY29oZXJlIVwiKTtcbmA7XG4iXSwibmFtZXMiOlsiUk9PVF9QQUNLQUdFX0pTT04iLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInZlcnNpb24iLCJ0eXBlIiwic2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwiZGV2RGVwZW5kZW5jaWVzIiwidHlwZXNjcmlwdCIsIkFQUF9QQUNLQUdFX0pTT04iLCJtYWluIiwiVFNDT05GSUciLCJjb21waWxlck9wdGlvbnMiLCJ0YXJnZXQiLCJtb2R1bGUiLCJtb2R1bGVSZXNvbHV0aW9uIiwic3RyaWN0Iiwic2tpcExpYkNoZWNrIiwiaW5jbHVkZSIsIk1BSU5fVFMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0Esa0JBQWtCQyxJQUFZO0lBQzdDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0Y7UUFDQUcsU0FBUztRQUNUQyxNQUFNO1FBQ05DLFNBQVM7WUFDUkMsT0FBTztZQUNQLGVBQWU7WUFDZkMsS0FBSztRQUNOO1FBQ0FDLGlCQUFpQjtZQUNoQixzQkFBc0I7WUFDdEJDLFlBQVk7UUFDYjtJQUNELEdBQ0EsTUFDQTtBQUVGO0FBRUEsT0FBTyxTQUFTQyxpQkFBaUJWLElBQVk7SUFDNUMsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRixNQUFNLENBQUMsQ0FBQyxFQUFFQSxLQUFLLElBQUksQ0FBQztRQUNwQkcsU0FBUztRQUNUQyxNQUFNO1FBQ05PLE1BQU07SUFDUCxHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sTUFBTUMsV0FBV1gsS0FBS0MsU0FBUyxDQUNyQztJQUNDVyxpQkFBaUI7UUFDaEJDLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxrQkFBa0I7UUFDbEJDLFFBQVE7UUFDUkMsY0FBYztJQUNmO0lBQ0FDLFNBQVM7UUFBQztLQUFXO0FBQ3RCLEdBQ0EsTUFDQSxHQUNDO0FBRUYsT0FBTyxNQUFNQyxVQUFVLENBQUM7QUFDeEIsQ0FBQyxDQUFDIn0=
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@decohere/create",
3
- "version": "0.0.1-dev.49",
4
- "description": "Download the Decohere scaffolder image and run it (npm create @decohere)",
3
+ "version": "0.0.1-dev.5",
4
+ "description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
5
5
  "keywords": [
6
6
  "decohere",
7
7
  "create",
8
8
  "scaffold",
9
- "cli"
9
+ "cli",
10
+ "forge",
11
+ "flux",
12
+ "typescript"
10
13
  ],
11
14
  "license": "ISC",
12
15
  "author": "Typesmiths",
@@ -17,9 +20,8 @@
17
20
  "scripts": {
18
21
  "test": "echo \"Error: no test specified\" && exit 1"
19
22
  },
20
- "dependencies": {},
21
- "devDependencies": {},
22
- "decohere": {
23
- "dockerImageRepository": "ghcr.io/typesmiths/decohere/create"
24
- }
23
+ "dependencies": {
24
+ "commander": "^13.1.0"
25
+ },
26
+ "devDependencies": {}
25
27
  }
@@ -0,0 +1,4 @@
1
+ export interface ScaffoldOptions {
2
+ yes?: boolean;
3
+ }
4
+ export declare function scaffold(targetDir: string, opts: ScaffoldOptions): Promise<void>;
@@ -0,0 +1,4 @@
1
+ export declare function ROOT_PACKAGE_JSON(name: string): string;
2
+ export declare function APP_PACKAGE_JSON(name: string): string;
3
+ export declare const TSCONFIG: string;
4
+ export declare const MAIN_TS = "console.log(\"Hello from Decohere!\");\n";
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "resolveLaunch", {
6
- enumerable: true,
7
- get: function() {
8
- return resolveLaunch;
9
- }
10
- });
11
- const _nodepath = require("node:path");
12
- function resolveLaunch(argv, cwd = process.cwd()) {
13
- if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h" || argv[0] === "--version")) {
14
- return {
15
- targetDir: cwd,
16
- containerArgv: argv,
17
- projectName: (0, _nodepath.basename)(cwd)
18
- };
19
- }
20
- let directoryFlag;
21
- const withoutD = [];
22
- for(let i = 0; i < argv.length; i++){
23
- const arg = argv[i];
24
- if (arg === "-d") {
25
- directoryFlag = argv[i + 1];
26
- i++;
27
- continue;
28
- }
29
- if (arg != null) withoutD.push(arg);
30
- }
31
- const isAdd = withoutD[0] === "webapi" && withoutD[1] === "add";
32
- let positional;
33
- let withoutPositional = withoutD;
34
- if (!isAdd && withoutD[0] === "webapi" && withoutD[1] != null && !withoutD[1].startsWith("-")) {
35
- positional = withoutD[1];
36
- withoutPositional = [
37
- withoutD[0],
38
- ...withoutD.slice(2)
39
- ];
40
- }
41
- const targetDir = (0, _nodepath.resolve)(cwd, positional?.trim() || directoryFlag?.trim() || ".");
42
- return {
43
- targetDir,
44
- containerArgv: [
45
- ...withoutPositional,
46
- "-d",
47
- "."
48
- ],
49
- projectName: (0, _nodepath.basename)(targetDir)
50
- };
51
- }
52
-
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcmVzb2x2ZS1sYXVuY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmV4cG9ydCB0eXBlIExhdW5jaFBsYW4gPSB7XG5cdHRhcmdldERpcjogc3RyaW5nO1xuXHRjb250YWluZXJBcmd2OiBzdHJpbmdbXTtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogSG9zdCBgbnBtIGNyZWF0ZWAgYXJndiDihpIgZGlyZWN0b3J5IHRvIG1vdW50IGFuZCBhcmd2IGZvciB0aGUgaW4taW1hZ2UgQ0xJLlxuICogUG9zaXRpb25hbCBgd2ViYXBpIG15LWFwcGAgd2lucyBvdmVyIGAtZGAgKG5wbSB0cmVhdHMgYC1kYCBhcyBpdHMgb3duIGxvZ2xldmVsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMYXVuY2goYXJndjogc3RyaW5nW10sIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBMYXVuY2hQbGFuIHtcblx0aWYgKFxuXHRcdGFyZ3YubGVuZ3RoID09PSAxICYmXG5cdFx0KGFyZ3ZbMF0gPT09IFwiLS1oZWxwXCIgfHwgYXJndlswXSA9PT0gXCItaFwiIHx8IGFyZ3ZbMF0gPT09IFwiLS12ZXJzaW9uXCIpXG5cdCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXREaXI6IGN3ZCxcblx0XHRcdGNvbnRhaW5lckFyZ3Y6IGFyZ3YsXG5cdFx0XHRwcm9qZWN0TmFtZTogYmFzZW5hbWUoY3dkKSxcblx0XHR9O1xuXHR9XG5cdGxldCBkaXJlY3RvcnlGbGFnOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IHdpdGhvdXREOiBzdHJpbmdbXSA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhcmcgPSBhcmd2W2ldO1xuXHRcdGlmIChhcmcgPT09IFwiLWRcIikge1xuXHRcdFx0ZGlyZWN0b3J5RmxhZyA9IGFyZ3ZbaSArIDFdO1xuXHRcdFx0aSsrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChhcmcgIT0gbnVsbCkgd2l0aG91dEQucHVzaChhcmcpO1xuXHR9XG5cblx0Y29uc3QgaXNBZGQgPSB3aXRob3V0RFswXSA9PT0gXCJ3ZWJhcGlcIiAmJiB3aXRob3V0RFsxXSA9PT0gXCJhZGRcIjtcblx0bGV0IHBvc2l0aW9uYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IHdpdGhvdXRQb3NpdGlvbmFsID0gd2l0aG91dEQ7XG5cdGlmIChcblx0XHQhaXNBZGQgJiZcblx0XHR3aXRob3V0RFswXSA9PT0gXCJ3ZWJhcGlcIiAmJlxuXHRcdHdpdGhvdXREWzFdICE9IG51bGwgJiZcblx0XHQhd2l0aG91dERbMV0uc3RhcnRzV2l0aChcIi1cIilcblx0KSB7XG5cdFx0cG9zaXRpb25hbCA9IHdpdGhvdXREWzFdO1xuXHRcdHdpdGhvdXRQb3NpdGlvbmFsID0gW3dpdGhvdXREWzBdLCAuLi53aXRob3V0RC5zbGljZSgyKV07XG5cdH1cblxuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGN3ZCwgcG9zaXRpb25hbD8udHJpbSgpIHx8IGRpcmVjdG9yeUZsYWc/LnRyaW0oKSB8fCBcIi5cIik7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0RGlyLFxuXHRcdGNvbnRhaW5lckFyZ3Y6IFsuLi53aXRob3V0UG9zaXRpb25hbCwgXCItZFwiLCBcIi5cIl0sXG5cdFx0cHJvamVjdE5hbWU6IGJhc2VuYW1lKHRhcmdldERpciksXG5cdH07XG59XG4iXSwibmFtZXMiOlsicmVzb2x2ZUxhdW5jaCIsImFyZ3YiLCJjd2QiLCJwcm9jZXNzIiwibGVuZ3RoIiwidGFyZ2V0RGlyIiwiY29udGFpbmVyQXJndiIsInByb2plY3ROYW1lIiwiYmFzZW5hbWUiLCJkaXJlY3RvcnlGbGFnIiwid2l0aG91dEQiLCJpIiwiYXJnIiwicHVzaCIsImlzQWRkIiwicG9zaXRpb25hbCIsIndpdGhvdXRQb3NpdGlvbmFsIiwic3RhcnRzV2l0aCIsInNsaWNlIiwicmVzb2x2ZSIsInRyaW0iXSwibWFwcGluZ3MiOiI7Ozs7K0JBWWdCQTs7O2VBQUFBOzs7MEJBWmtCO0FBWTNCLFNBQVNBLGNBQWNDLElBQWMsRUFBRUMsTUFBTUMsUUFBUUQsR0FBRyxFQUFFO0lBQ2hFLElBQ0NELEtBQUtHLE1BQU0sS0FBSyxLQUNmSCxDQUFBQSxJQUFJLENBQUMsRUFBRSxLQUFLLFlBQVlBLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxXQUFVLEdBQ2xFO1FBQ0QsT0FBTztZQUNOSSxXQUFXSDtZQUNYSSxlQUFlTDtZQUNmTSxhQUFhQyxJQUFBQSxrQkFBUSxFQUFDTjtRQUN2QjtJQUNEO0lBQ0EsSUFBSU87SUFDSixNQUFNQyxXQUFxQixFQUFFO0lBQzdCLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJVixLQUFLRyxNQUFNLEVBQUVPLElBQUs7UUFDckMsTUFBTUMsTUFBTVgsSUFBSSxDQUFDVSxFQUFFO1FBQ25CLElBQUlDLFFBQVEsTUFBTTtZQUNqQkgsZ0JBQWdCUixJQUFJLENBQUNVLElBQUksRUFBRTtZQUMzQkE7WUFDQTtRQUNEO1FBQ0EsSUFBSUMsT0FBTyxNQUFNRixTQUFTRyxJQUFJLENBQUNEO0lBQ2hDO0lBRUEsTUFBTUUsUUFBUUosUUFBUSxDQUFDLEVBQUUsS0FBSyxZQUFZQSxRQUFRLENBQUMsRUFBRSxLQUFLO0lBQzFELElBQUlLO0lBQ0osSUFBSUMsb0JBQW9CTjtJQUN4QixJQUNDLENBQUNJLFNBQ0RKLFFBQVEsQ0FBQyxFQUFFLEtBQUssWUFDaEJBLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFDZixDQUFDQSxRQUFRLENBQUMsRUFBRSxDQUFDTyxVQUFVLENBQUMsTUFDdkI7UUFDREYsYUFBYUwsUUFBUSxDQUFDLEVBQUU7UUFDeEJNLG9CQUFvQjtZQUFDTixRQUFRLENBQUMsRUFBRTtlQUFLQSxTQUFTUSxLQUFLLENBQUM7U0FBRztJQUN4RDtJQUVBLE1BQU1iLFlBQVljLElBQUFBLGlCQUFPLEVBQUNqQixLQUFLYSxZQUFZSyxVQUFVWCxlQUFlVyxVQUFVO0lBQzlFLE9BQU87UUFDTmY7UUFDQUMsZUFBZTtlQUFJVTtZQUFtQjtZQUFNO1NBQUk7UUFDaERULGFBQWFDLElBQUFBLGtCQUFRLEVBQUNIO0lBQ3ZCO0FBQ0QifQ==
@@ -1,104 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "runInBuilder", {
6
- enumerable: true,
7
- get: function() {
8
- return runInBuilder;
9
- }
10
- });
11
- const _nodechild_process = require("node:child_process");
12
- const _nodefs = require("node:fs");
13
- const _nodeos = require("node:os");
14
- const _nodepath = require("node:path");
15
- const _resolvelaunch = require("./resolve-launch.js");
16
- const _version = require("./version.js");
17
- const BUILDER_IMAGE = `${_version.CREATE_IMAGE_REPOSITORY}:${_version.CREATE_VERSION}`;
18
- function runInBuilder(argv) {
19
- const { targetDir, containerArgv, projectName } = (0, _resolvelaunch.resolveLaunch)(argv);
20
- (0, _nodefs.mkdirSync)(targetDir, {
21
- recursive: true
22
- });
23
- (0, _nodefs.mkdirSync)((0, _nodepath.resolve)(targetDir, ".devcontainer", "npm-auth"), {
24
- recursive: true
25
- });
26
- try {
27
- (0, _nodechild_process.execFileSync)("docker", [
28
- "info"
29
- ], {
30
- stdio: "pipe"
31
- });
32
- } catch {
33
- console.error("\n Docker is required to scaffold a Decohere project.\n" + " Install Docker Desktop: https://www.docker.com/products/docker-desktop\n");
34
- process.exit(1);
35
- }
36
- const hostUid = process.getuid?.();
37
- const hostGid = process.getgid?.() ?? hostUid;
38
- const runAsHostUser = hostUid != null && hostGid != null;
39
- const npmCacheDir = (0, _nodepath.resolve)((0, _nodeos.homedir)(), ".cache/decohere-create/npm");
40
- (0, _nodefs.mkdirSync)(npmCacheDir, {
41
- recursive: true
42
- });
43
- const builderHome = "/tmp/decohere-create-home";
44
- const volumes = [
45
- "-v",
46
- `${targetDir}:/workspace`,
47
- "-v",
48
- `${npmCacheDir}:/npm-cache`
49
- ];
50
- const envArgs = [
51
- "-e",
52
- "DECOHERE_BUILDER=1",
53
- "-e",
54
- `DECOHERE_PROJECT_NAME=${projectName}`,
55
- "-e",
56
- "NPM_CONFIG_CACHE=/npm-cache",
57
- "-e",
58
- "NPM_CONFIG_PREFER_OFFLINE=true",
59
- "-e",
60
- `HOME=${builderHome}`
61
- ];
62
- const npmrcPath = (0, _nodepath.resolve)((0, _nodeos.homedir)(), ".npmrc");
63
- if ((0, _nodefs.existsSync)(npmrcPath)) {
64
- volumes.push("-v", `${npmrcPath}:/tmp/host-npmrc:ro`);
65
- envArgs.push("-e", "NPM_CONFIG_USERCONFIG=/tmp/host-npmrc");
66
- }
67
- const auth0ConfigDir = (0, _nodepath.resolve)((0, _nodeos.homedir)(), ".config/auth0");
68
- if ((0, _nodefs.existsSync)(auth0ConfigDir)) {
69
- volumes.push("-v", `${auth0ConfigDir}:${builderHome}/.config/auth0`);
70
- }
71
- const userArgs = [];
72
- if (runAsHostUser) {
73
- userArgs.push("--user", `${hostUid}:${hostGid}`);
74
- } else if (hostUid != null) {
75
- envArgs.push("-e", `HOST_UID=${hostUid}`);
76
- if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
77
- }
78
- console.log(" Running scaffolding in a sandboxed container...\n");
79
- const ttyFlags = process.stdin.isTTY ? [
80
- "-it"
81
- ] : [
82
- "-i"
83
- ];
84
- const result = (0, _nodechild_process.spawnSync)("docker", [
85
- "run",
86
- "--rm",
87
- ...ttyFlags,
88
- ...userArgs,
89
- ...volumes,
90
- ...envArgs,
91
- "-w",
92
- "/workspace",
93
- BUILDER_IMAGE,
94
- ...containerArgv
95
- ], {
96
- stdio: "inherit"
97
- });
98
- if (result.status === 0) {
99
- console.log(`\n Scaffold complete!\n\n Open your project:\n\n code ${targetDir}\n`);
100
- }
101
- process.exit(result.status ?? 0);
102
- }
103
-
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHJlc29sdmVMYXVuY2ggfSBmcm9tIFwiLi9yZXNvbHZlLWxhdW5jaC5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX0lNQUdFX1JFUE9TSVRPUlksIENSRUFURV9WRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBQdWxsL3J1biB0aGUgRGVjb2hlcmUgQ0xJIGltYWdlLiBIb3N0IGBAZGVjb2hlcmUvY3JlYXRlYCBkb2VzIG5vdCBsb2FkIHRoZVxuICogYEBkZWNvaGVyZS9jbGlgIGRlcGVuZGVuY3kgdHJlZSDigJQgdGhhdCBsaXZlcyBpbiB0aGUgaW1hZ2Ugb25seS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQnVpbGRlcihhcmd2OiBzdHJpbmdbXSk6IG5ldmVyIHtcblx0Y29uc3QgeyB0YXJnZXREaXIsIGNvbnRhaW5lckFyZ3YsIHByb2plY3ROYW1lIH0gPSByZXNvbHZlTGF1bmNoKGFyZ3YpO1xuXHRta2RpclN5bmModGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBob3N0VWlkID0gcHJvY2Vzcy5nZXR1aWQ/LigpO1xuXHRjb25zdCBob3N0R2lkID0gcHJvY2Vzcy5nZXRnaWQ/LigpID8/IGhvc3RVaWQ7XG5cdGNvbnN0IHJ1bkFzSG9zdFVzZXIgPSBob3N0VWlkICE9IG51bGwgJiYgaG9zdEdpZCAhPSBudWxsO1xuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdFwiLWVcIixcblx0XHRgREVDT0hFUkVfUFJPSkVDVF9OQU1FPSR7cHJvamVjdE5hbWV9YCxcblx0XHRcIi1lXCIsXG5cdFx0XCJOUE1fQ09ORklHX0NBQ0hFPS9ucG0tY2FjaGVcIixcblx0XHRcIi1lXCIsXG5cdFx0XCJOUE1fQ09ORklHX1BSRUZFUl9PRkZMSU5FPXRydWVcIixcblx0XHRcIi1lXCIsXG5cdFx0YEhPTUU9JHtidWlsZGVySG9tZX1gLFxuXHRdO1xuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Y29uc3QgYXV0aDBDb25maWdEaXIgPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIuY29uZmlnL2F1dGgwXCIpO1xuXHRpZiAoZXhpc3RzU3luYyhhdXRoMENvbmZpZ0RpcikpIHtcblx0XHR2b2x1bWVzLnB1c2goXCItdlwiLCBgJHthdXRoMENvbmZpZ0Rpcn06JHtidWlsZGVySG9tZX0vLmNvbmZpZy9hdXRoMGApO1xuXHR9XG5cblx0Y29uc3QgdXNlckFyZ3M6IHN0cmluZ1tdID0gW107XG5cdGlmIChydW5Bc0hvc3RVc2VyKSB7XG5cdFx0dXNlckFyZ3MucHVzaChcIi0tdXNlclwiLCBgJHtob3N0VWlkfToke2hvc3RHaWR9YCk7XG5cdH0gZWxzZSBpZiAoaG9zdFVpZCAhPSBudWxsKSB7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfVUlEPSR7aG9zdFVpZH1gKTtcblx0XHRpZiAoaG9zdEdpZCAhPSBudWxsKSBlbnZBcmdzLnB1c2goXCItZVwiLCBgSE9TVF9HSUQ9JHtob3N0R2lkfWApO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdGNvbnN0IHR0eUZsYWdzID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSA/IFtcIi1pdFwiXSA6IFtcIi1pXCJdO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdC4uLnR0eUZsYWdzLFxuXHRcdFx0Li4udXNlckFyZ3MsXG5cdFx0XHQuLi52b2x1bWVzLFxuXHRcdFx0Li4uZW52QXJncyxcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdC4uLmNvbnRhaW5lckFyZ3YsXG5cdFx0XSxcblx0XHR7IHN0ZGlvOiBcImluaGVyaXRcIiB9LFxuXHQpO1xuXG5cdGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG5cdFx0Y29uc29sZS5sb2coYFxcbiAgU2NhZmZvbGQgY29tcGxldGUhXFxuXFxuICBPcGVuIHlvdXIgcHJvamVjdDpcXG5cXG4gICAgY29kZSAke3RhcmdldERpcn1cXG5gKTtcblx0fVxuXG5cdHByb2Nlc3MuZXhpdChyZXN1bHQuc3RhdHVzID8/IDApO1xufVxuIl0sIm5hbWVzIjpbInJ1bkluQnVpbGRlciIsIkJVSUxERVJfSU1BR0UiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiYXJndiIsInRhcmdldERpciIsImNvbnRhaW5lckFyZ3YiLCJwcm9qZWN0TmFtZSIsInJlc29sdmVMYXVuY2giLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJyZXNvbHZlIiwiZXhlY0ZpbGVTeW5jIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImhvc3RVaWQiLCJnZXR1aWQiLCJob3N0R2lkIiwiZ2V0Z2lkIiwicnVuQXNIb3N0VXNlciIsIm5wbUNhY2hlRGlyIiwiaG9tZWRpciIsImJ1aWxkZXJIb21lIiwidm9sdW1lcyIsImVudkFyZ3MiLCJucG1yY1BhdGgiLCJleGlzdHNTeW5jIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJsb2ciLCJ0dHlGbGFncyIsInN0ZGluIiwiaXNUVFkiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJzdGF0dXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWdCQTs7O2VBQUFBOzs7bUNBYndCO3dCQUNGO3dCQUNkOzBCQUNBOytCQUNNO3lCQUMwQjtBQUV4RCxNQUFNQyxnQkFBZ0IsR0FBR0MsZ0NBQXVCLENBQUMsQ0FBQyxFQUFFQyx1QkFBYyxFQUFFO0FBTTdELFNBQVNILGFBQWFJLElBQWM7SUFDMUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsV0FBVyxFQUFFLEdBQUdDLElBQUFBLDRCQUFhLEVBQUNKO0lBQ2hFSyxJQUFBQSxpQkFBUyxFQUFDSixXQUFXO1FBQUVLLFdBQVc7SUFBSztJQUN2Q0QsSUFBQUEsaUJBQVMsRUFBQ0UsSUFBQUEsaUJBQU8sRUFBQ04sV0FBVyxpQkFBaUIsYUFBYTtRQUFFSyxXQUFXO0lBQUs7SUFFN0UsSUFBSTtRQUNIRSxJQUFBQSwrQkFBWSxFQUFDLFVBQVU7WUFBQztTQUFPLEVBQUU7WUFBRUMsT0FBTztRQUFPO0lBQ2xELEVBQUUsT0FBTTtRQUNQQyxRQUFRQyxLQUFLLENBQ1osNkRBQ0M7UUFFRkMsUUFBUUMsSUFBSSxDQUFDO0lBQ2Q7SUFFQSxNQUFNQyxVQUFVRixRQUFRRyxNQUFNO0lBQzlCLE1BQU1DLFVBQVVKLFFBQVFLLE1BQU0sUUFBUUg7SUFDdEMsTUFBTUksZ0JBQWdCSixXQUFXLFFBQVFFLFdBQVc7SUFFcEQsTUFBTUcsY0FBY1osSUFBQUEsaUJBQU8sRUFBQ2EsSUFBQUEsZUFBTyxLQUFJO0lBQ3ZDZixJQUFBQSxpQkFBUyxFQUFDYyxhQUFhO1FBQUViLFdBQVc7SUFBSztJQUV6QyxNQUFNZSxjQUFjO0lBRXBCLE1BQU1DLFVBQW9CO1FBQ3pCO1FBQ0EsR0FBR3JCLFVBQVUsV0FBVyxDQUFDO1FBQ3pCO1FBQ0EsR0FBR2tCLFlBQVksV0FBVyxDQUFDO0tBQzNCO0lBRUQsTUFBTUksVUFBb0I7UUFDekI7UUFDQTtRQUNBO1FBQ0EsQ0FBQyxzQkFBc0IsRUFBRXBCLGFBQWE7UUFDdEM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLENBQUMsS0FBSyxFQUFFa0IsYUFBYTtLQUNyQjtJQUVELE1BQU1HLFlBQVlqQixJQUFBQSxpQkFBTyxFQUFDYSxJQUFBQSxlQUFPLEtBQUk7SUFDckMsSUFBSUssSUFBQUEsa0JBQVUsRUFBQ0QsWUFBWTtRQUMxQkYsUUFBUUksSUFBSSxDQUFDLE1BQU0sR0FBR0YsVUFBVSxtQkFBbUIsQ0FBQztRQUNwREQsUUFBUUcsSUFBSSxDQUFDLE1BQU07SUFDcEI7SUFFQSxNQUFNQyxpQkFBaUJwQixJQUFBQSxpQkFBTyxFQUFDYSxJQUFBQSxlQUFPLEtBQUk7SUFDMUMsSUFBSUssSUFBQUEsa0JBQVUsRUFBQ0UsaUJBQWlCO1FBQy9CTCxRQUFRSSxJQUFJLENBQUMsTUFBTSxHQUFHQyxlQUFlLENBQUMsRUFBRU4sWUFBWSxjQUFjLENBQUM7SUFDcEU7SUFFQSxNQUFNTyxXQUFxQixFQUFFO0lBQzdCLElBQUlWLGVBQWU7UUFDbEJVLFNBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUdaLFFBQVEsQ0FBQyxFQUFFRSxTQUFTO0lBQ2hELE9BQU8sSUFBSUYsV0FBVyxNQUFNO1FBQzNCUyxRQUFRRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRVosU0FBUztRQUN4QyxJQUFJRSxXQUFXLE1BQU1PLFFBQVFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFVixTQUFTO0lBQzlEO0lBRUFOLFFBQVFtQixHQUFHLENBQUM7SUFFWixNQUFNQyxXQUFXbEIsUUFBUW1CLEtBQUssQ0FBQ0MsS0FBSyxHQUFHO1FBQUM7S0FBTSxHQUFHO1FBQUM7S0FBSztJQUV2RCxNQUFNQyxTQUFTQyxJQUFBQSw0QkFBUyxFQUN2QixVQUNBO1FBQ0M7UUFDQTtXQUNHSjtXQUNBRjtXQUNBTjtXQUNBQztRQUNIO1FBQ0E7UUFDQTFCO1dBQ0dLO0tBQ0gsRUFDRDtRQUFFTyxPQUFPO0lBQVU7SUFHcEIsSUFBSXdCLE9BQU9FLE1BQU0sS0FBSyxHQUFHO1FBQ3hCekIsUUFBUW1CLEdBQUcsQ0FBQyxDQUFDLDJEQUEyRCxFQUFFNUIsVUFBVSxFQUFFLENBQUM7SUFDeEY7SUFFQVcsUUFBUUMsSUFBSSxDQUFDb0IsT0FBT0UsTUFBTSxJQUFJO0FBQy9CIn0=
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get CREATE_IMAGE_REPOSITORY () {
13
- return CREATE_IMAGE_REPOSITORY;
14
- },
15
- get CREATE_VERSION () {
16
- return CREATE_VERSION;
17
- }
18
- });
19
- const _nodemodule = require("node:module");
20
- const _nodepath = require("node:path");
21
- const _nodeurl = require("node:url");
22
- const _require = (0, _nodemodule.createRequire)(require("url").pathToFileURL(__filename).toString());
23
- const DEFAULT_CREATE_VERSION = "0.0.1-dev";
24
- const DEFAULT_CREATE_IMAGE_REPOSITORY = "ghcr.io/typesmiths/decohere/create";
25
- function resolveCreateMetadata() {
26
- let dir = (0, _nodepath.dirname)((0, _nodeurl.fileURLToPath)(require("url").pathToFileURL(__filename).toString()));
27
- for(let i = 0; i < 5; i++){
28
- try {
29
- const pkg = _require((0, _nodepath.join)(dir, "package.json"));
30
- if (pkg.name === "@decohere/create") {
31
- return {
32
- version: pkg.version ?? DEFAULT_CREATE_VERSION,
33
- imageRepository: pkg.decohere?.dockerImageRepository ?? DEFAULT_CREATE_IMAGE_REPOSITORY
34
- };
35
- }
36
- } catch {}
37
- const parent = (0, _nodepath.dirname)(dir);
38
- if (parent === dir) break;
39
- dir = parent;
40
- }
41
- return {
42
- version: DEFAULT_CREATE_VERSION,
43
- imageRepository: DEFAULT_CREATE_IMAGE_REPOSITORY
44
- };
45
- }
46
- const createMetadata = resolveCreateMetadata();
47
- const CREATE_VERSION = createMetadata.version;
48
- const CREATE_IMAGE_REPOSITORY = createMetadata.imageRepository;
49
-
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdmVyc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBfcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxudHlwZSBDcmVhdGVQYWNrYWdlTWV0YWRhdGEgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdHZlcnNpb24/OiBzdHJpbmc7XG5cdGRlY29oZXJlPzoge1xuXHRcdGRvY2tlckltYWdlUmVwb3NpdG9yeT86IHN0cmluZztcblx0fTtcbn07XG5cbmNvbnN0IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04gPSBcIjAuMC4xLWRldlwiO1xuY29uc3QgREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IFwiZ2hjci5pby90eXBlc21pdGhzL2RlY29oZXJlL2NyZWF0ZVwiO1xuXG5mdW5jdGlvbiByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKSB7XG5cdGxldCBkaXIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBrZyA9IF9yZXF1aXJlKGpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSkgYXMgQ3JlYXRlUGFja2FnZU1ldGFkYXRhO1xuXHRcdFx0aWYgKHBrZy5uYW1lID09PSBcIkBkZWNvaGVyZS9jcmVhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZlcnNpb246IHBrZy52ZXJzaW9uID8/IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFx0aW1hZ2VSZXBvc2l0b3J5OlxuXHRcdFx0XHRcdFx0cGtnLmRlY29oZXJlPy5kb2NrZXJJbWFnZVJlcG9zaXRvcnkgPz8gREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0Y29uc3QgcGFyZW50ID0gZGlybmFtZShkaXIpO1xuXHRcdGlmIChwYXJlbnQgPT09IGRpcikgYnJlYWs7XG5cdFx0ZGlyID0gcGFyZW50O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR2ZXJzaW9uOiBERUZBVUxUX0NSRUFURV9WRVJTSU9OLFxuXHRcdGltYWdlUmVwb3NpdG9yeTogREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0fTtcbn1cblxuY29uc3QgY3JlYXRlTWV0YWRhdGEgPSByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKTtcblxuZXhwb3J0IGNvbnN0IENSRUFURV9WRVJTSU9OID0gY3JlYXRlTWV0YWRhdGEudmVyc2lvbjtcblxuZXhwb3J0IGNvbnN0IENSRUFURV9JTUFHRV9SRVBPU0lUT1JZID0gY3JlYXRlTWV0YWRhdGEuaW1hZ2VSZXBvc2l0b3J5O1xuIl0sIm5hbWVzIjpbIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIiwiQ1JFQVRFX1ZFUlNJT04iLCJfcmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJERUZBVUxUX0NSRUFURV9WRVJTSU9OIiwiREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsInJlc29sdmVDcmVhdGVNZXRhZGF0YSIsImRpciIsImRpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwiaSIsInBrZyIsImpvaW4iLCJuYW1lIiwidmVyc2lvbiIsImltYWdlUmVwb3NpdG9yeSIsImRlY29oZXJlIiwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5IiwicGFyZW50IiwiY3JlYXRlTWV0YWRhdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBNkNhQTtlQUFBQTs7UUFGQUM7ZUFBQUE7Ozs0QkEzQ2lCOzBCQUNBO3lCQUNBO0FBRTlCLE1BQU1DLFdBQVdDLElBQUFBLHlCQUFhLEVBQUM7QUFVL0IsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLGtDQUFrQztBQUV4QyxTQUFTQztJQUNSLElBQUlDLE1BQU1DLElBQUFBLGlCQUFPLEVBQUNDLElBQUFBLHNCQUFhLEVBQUM7SUFDaEMsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUksR0FBR0EsSUFBSztRQUMzQixJQUFJO1lBQ0gsTUFBTUMsTUFBTVQsU0FBU1UsSUFBQUEsY0FBSSxFQUFDTCxLQUFLO1lBQy9CLElBQUlJLElBQUlFLElBQUksS0FBSyxvQkFBb0I7Z0JBQ3BDLE9BQU87b0JBQ05DLFNBQVNILElBQUlHLE9BQU8sSUFBSVY7b0JBQ3hCVyxpQkFDQ0osSUFBSUssUUFBUSxFQUFFQyx5QkFBeUJaO2dCQUN6QztZQUNEO1FBQ0QsRUFBRSxPQUFNLENBQUM7UUFDVCxNQUFNYSxTQUFTVixJQUFBQSxpQkFBTyxFQUFDRDtRQUN2QixJQUFJVyxXQUFXWCxLQUFLO1FBQ3BCQSxNQUFNVztJQUNQO0lBRUEsT0FBTztRQUNOSixTQUFTVjtRQUNUVyxpQkFBaUJWO0lBQ2xCO0FBQ0Q7QUFFQSxNQUFNYyxpQkFBaUJiO0FBRWhCLE1BQU1MLGlCQUFpQmtCLGVBQWVMLE9BQU87QUFFN0MsTUFBTWQsMEJBQTBCbUIsZUFBZUosZUFBZSJ9
@@ -1,46 +0,0 @@
1
- import { basename, resolve } from "node:path";
2
- /**
3
- * Host `npm create` argv → directory to mount and argv for the in-image CLI.
4
- * Positional `webapi my-app` wins over `-d` (npm treats `-d` as its own loglevel).
5
- */ export function resolveLaunch(argv, cwd = process.cwd()) {
6
- if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h" || argv[0] === "--version")) {
7
- return {
8
- targetDir: cwd,
9
- containerArgv: argv,
10
- projectName: basename(cwd)
11
- };
12
- }
13
- let directoryFlag;
14
- const withoutD = [];
15
- for(let i = 0; i < argv.length; i++){
16
- const arg = argv[i];
17
- if (arg === "-d") {
18
- directoryFlag = argv[i + 1];
19
- i++;
20
- continue;
21
- }
22
- if (arg != null) withoutD.push(arg);
23
- }
24
- const isAdd = withoutD[0] === "webapi" && withoutD[1] === "add";
25
- let positional;
26
- let withoutPositional = withoutD;
27
- if (!isAdd && withoutD[0] === "webapi" && withoutD[1] != null && !withoutD[1].startsWith("-")) {
28
- positional = withoutD[1];
29
- withoutPositional = [
30
- withoutD[0],
31
- ...withoutD.slice(2)
32
- ];
33
- }
34
- const targetDir = resolve(cwd, positional?.trim() || directoryFlag?.trim() || ".");
35
- return {
36
- targetDir,
37
- containerArgv: [
38
- ...withoutPositional,
39
- "-d",
40
- "."
41
- ],
42
- projectName: basename(targetDir)
43
- };
44
- }
45
-
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcmVzb2x2ZS1sYXVuY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmV4cG9ydCB0eXBlIExhdW5jaFBsYW4gPSB7XG5cdHRhcmdldERpcjogc3RyaW5nO1xuXHRjb250YWluZXJBcmd2OiBzdHJpbmdbXTtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogSG9zdCBgbnBtIGNyZWF0ZWAgYXJndiDihpIgZGlyZWN0b3J5IHRvIG1vdW50IGFuZCBhcmd2IGZvciB0aGUgaW4taW1hZ2UgQ0xJLlxuICogUG9zaXRpb25hbCBgd2ViYXBpIG15LWFwcGAgd2lucyBvdmVyIGAtZGAgKG5wbSB0cmVhdHMgYC1kYCBhcyBpdHMgb3duIGxvZ2xldmVsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMYXVuY2goYXJndjogc3RyaW5nW10sIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBMYXVuY2hQbGFuIHtcblx0aWYgKFxuXHRcdGFyZ3YubGVuZ3RoID09PSAxICYmXG5cdFx0KGFyZ3ZbMF0gPT09IFwiLS1oZWxwXCIgfHwgYXJndlswXSA9PT0gXCItaFwiIHx8IGFyZ3ZbMF0gPT09IFwiLS12ZXJzaW9uXCIpXG5cdCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXREaXI6IGN3ZCxcblx0XHRcdGNvbnRhaW5lckFyZ3Y6IGFyZ3YsXG5cdFx0XHRwcm9qZWN0TmFtZTogYmFzZW5hbWUoY3dkKSxcblx0XHR9O1xuXHR9XG5cdGxldCBkaXJlY3RvcnlGbGFnOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IHdpdGhvdXREOiBzdHJpbmdbXSA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhcmcgPSBhcmd2W2ldO1xuXHRcdGlmIChhcmcgPT09IFwiLWRcIikge1xuXHRcdFx0ZGlyZWN0b3J5RmxhZyA9IGFyZ3ZbaSArIDFdO1xuXHRcdFx0aSsrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChhcmcgIT0gbnVsbCkgd2l0aG91dEQucHVzaChhcmcpO1xuXHR9XG5cblx0Y29uc3QgaXNBZGQgPSB3aXRob3V0RFswXSA9PT0gXCJ3ZWJhcGlcIiAmJiB3aXRob3V0RFsxXSA9PT0gXCJhZGRcIjtcblx0bGV0IHBvc2l0aW9uYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IHdpdGhvdXRQb3NpdGlvbmFsID0gd2l0aG91dEQ7XG5cdGlmIChcblx0XHQhaXNBZGQgJiZcblx0XHR3aXRob3V0RFswXSA9PT0gXCJ3ZWJhcGlcIiAmJlxuXHRcdHdpdGhvdXREWzFdICE9IG51bGwgJiZcblx0XHQhd2l0aG91dERbMV0uc3RhcnRzV2l0aChcIi1cIilcblx0KSB7XG5cdFx0cG9zaXRpb25hbCA9IHdpdGhvdXREWzFdO1xuXHRcdHdpdGhvdXRQb3NpdGlvbmFsID0gW3dpdGhvdXREWzBdLCAuLi53aXRob3V0RC5zbGljZSgyKV07XG5cdH1cblxuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGN3ZCwgcG9zaXRpb25hbD8udHJpbSgpIHx8IGRpcmVjdG9yeUZsYWc/LnRyaW0oKSB8fCBcIi5cIik7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0RGlyLFxuXHRcdGNvbnRhaW5lckFyZ3Y6IFsuLi53aXRob3V0UG9zaXRpb25hbCwgXCItZFwiLCBcIi5cIl0sXG5cdFx0cHJvamVjdE5hbWU6IGJhc2VuYW1lKHRhcmdldERpciksXG5cdH07XG59XG4iXSwibmFtZXMiOlsiYmFzZW5hbWUiLCJyZXNvbHZlIiwicmVzb2x2ZUxhdW5jaCIsImFyZ3YiLCJjd2QiLCJwcm9jZXNzIiwibGVuZ3RoIiwidGFyZ2V0RGlyIiwiY29udGFpbmVyQXJndiIsInByb2plY3ROYW1lIiwiZGlyZWN0b3J5RmxhZyIsIndpdGhvdXREIiwiaSIsImFyZyIsInB1c2giLCJpc0FkZCIsInBvc2l0aW9uYWwiLCJ3aXRob3V0UG9zaXRpb25hbCIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInRyaW0iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsT0FBTyxRQUFRLFlBQVk7QUFROUM7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQyxjQUFjQyxJQUFjLEVBQUVDLE1BQU1DLFFBQVFELEdBQUcsRUFBRTtJQUNoRSxJQUNDRCxLQUFLRyxNQUFNLEtBQUssS0FDZkgsQ0FBQUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxZQUFZQSxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVSxHQUNsRTtRQUNELE9BQU87WUFDTkksV0FBV0g7WUFDWEksZUFBZUw7WUFDZk0sYUFBYVQsU0FBU0k7UUFDdkI7SUFDRDtJQUNBLElBQUlNO0lBQ0osTUFBTUMsV0FBcUIsRUFBRTtJQUM3QixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSVQsS0FBS0csTUFBTSxFQUFFTSxJQUFLO1FBQ3JDLE1BQU1DLE1BQU1WLElBQUksQ0FBQ1MsRUFBRTtRQUNuQixJQUFJQyxRQUFRLE1BQU07WUFDakJILGdCQUFnQlAsSUFBSSxDQUFDUyxJQUFJLEVBQUU7WUFDM0JBO1lBQ0E7UUFDRDtRQUNBLElBQUlDLE9BQU8sTUFBTUYsU0FBU0csSUFBSSxDQUFDRDtJQUNoQztJQUVBLE1BQU1FLFFBQVFKLFFBQVEsQ0FBQyxFQUFFLEtBQUssWUFBWUEsUUFBUSxDQUFDLEVBQUUsS0FBSztJQUMxRCxJQUFJSztJQUNKLElBQUlDLG9CQUFvQk47SUFDeEIsSUFDQyxDQUFDSSxTQUNESixRQUFRLENBQUMsRUFBRSxLQUFLLFlBQ2hCQSxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQ2YsQ0FBQ0EsUUFBUSxDQUFDLEVBQUUsQ0FBQ08sVUFBVSxDQUFDLE1BQ3ZCO1FBQ0RGLGFBQWFMLFFBQVEsQ0FBQyxFQUFFO1FBQ3hCTSxvQkFBb0I7WUFBQ04sUUFBUSxDQUFDLEVBQUU7ZUFBS0EsU0FBU1EsS0FBSyxDQUFDO1NBQUc7SUFDeEQ7SUFFQSxNQUFNWixZQUFZTixRQUFRRyxLQUFLWSxZQUFZSSxVQUFVVixlQUFlVSxVQUFVO0lBQzlFLE9BQU87UUFDTmI7UUFDQUMsZUFBZTtlQUFJUztZQUFtQjtZQUFNO1NBQUk7UUFDaERSLGFBQWFULFNBQVNPO0lBQ3ZCO0FBQ0QifQ==
package/es6/src/runner.js DELETED
@@ -1,97 +0,0 @@
1
- import { execFileSync, spawnSync } from "node:child_process";
2
- import { existsSync, mkdirSync } from "node:fs";
3
- import { homedir } from "node:os";
4
- import { resolve } from "node:path";
5
- import { resolveLaunch } from "./resolve-launch.js";
6
- import { CREATE_IMAGE_REPOSITORY, CREATE_VERSION } from "./version.js";
7
- const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
8
- /**
9
- * Pull/run the Decohere CLI image. Host `@decohere/create` does not load the
10
- * `@decohere/cli` dependency tree — that lives in the image only.
11
- */ export function runInBuilder(argv) {
12
- const { targetDir, containerArgv, projectName } = resolveLaunch(argv);
13
- mkdirSync(targetDir, {
14
- recursive: true
15
- });
16
- mkdirSync(resolve(targetDir, ".devcontainer", "npm-auth"), {
17
- recursive: true
18
- });
19
- try {
20
- execFileSync("docker", [
21
- "info"
22
- ], {
23
- stdio: "pipe"
24
- });
25
- } catch {
26
- console.error("\n Docker is required to scaffold a Decohere project.\n" + " Install Docker Desktop: https://www.docker.com/products/docker-desktop\n");
27
- process.exit(1);
28
- }
29
- const hostUid = process.getuid?.();
30
- const hostGid = process.getgid?.() ?? hostUid;
31
- const runAsHostUser = hostUid != null && hostGid != null;
32
- const npmCacheDir = resolve(homedir(), ".cache/decohere-create/npm");
33
- mkdirSync(npmCacheDir, {
34
- recursive: true
35
- });
36
- const builderHome = "/tmp/decohere-create-home";
37
- const volumes = [
38
- "-v",
39
- `${targetDir}:/workspace`,
40
- "-v",
41
- `${npmCacheDir}:/npm-cache`
42
- ];
43
- const envArgs = [
44
- "-e",
45
- "DECOHERE_BUILDER=1",
46
- "-e",
47
- `DECOHERE_PROJECT_NAME=${projectName}`,
48
- "-e",
49
- "NPM_CONFIG_CACHE=/npm-cache",
50
- "-e",
51
- "NPM_CONFIG_PREFER_OFFLINE=true",
52
- "-e",
53
- `HOME=${builderHome}`
54
- ];
55
- const npmrcPath = resolve(homedir(), ".npmrc");
56
- if (existsSync(npmrcPath)) {
57
- volumes.push("-v", `${npmrcPath}:/tmp/host-npmrc:ro`);
58
- envArgs.push("-e", "NPM_CONFIG_USERCONFIG=/tmp/host-npmrc");
59
- }
60
- const auth0ConfigDir = resolve(homedir(), ".config/auth0");
61
- if (existsSync(auth0ConfigDir)) {
62
- volumes.push("-v", `${auth0ConfigDir}:${builderHome}/.config/auth0`);
63
- }
64
- const userArgs = [];
65
- if (runAsHostUser) {
66
- userArgs.push("--user", `${hostUid}:${hostGid}`);
67
- } else if (hostUid != null) {
68
- envArgs.push("-e", `HOST_UID=${hostUid}`);
69
- if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
70
- }
71
- console.log(" Running scaffolding in a sandboxed container...\n");
72
- const ttyFlags = process.stdin.isTTY ? [
73
- "-it"
74
- ] : [
75
- "-i"
76
- ];
77
- const result = spawnSync("docker", [
78
- "run",
79
- "--rm",
80
- ...ttyFlags,
81
- ...userArgs,
82
- ...volumes,
83
- ...envArgs,
84
- "-w",
85
- "/workspace",
86
- BUILDER_IMAGE,
87
- ...containerArgv
88
- ], {
89
- stdio: "inherit"
90
- });
91
- if (result.status === 0) {
92
- console.log(`\n Scaffold complete!\n\n Open your project:\n\n code ${targetDir}\n`);
93
- }
94
- process.exit(result.status ?? 0);
95
- }
96
-
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHJlc29sdmVMYXVuY2ggfSBmcm9tIFwiLi9yZXNvbHZlLWxhdW5jaC5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX0lNQUdFX1JFUE9TSVRPUlksIENSRUFURV9WRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBQdWxsL3J1biB0aGUgRGVjb2hlcmUgQ0xJIGltYWdlLiBIb3N0IGBAZGVjb2hlcmUvY3JlYXRlYCBkb2VzIG5vdCBsb2FkIHRoZVxuICogYEBkZWNvaGVyZS9jbGlgIGRlcGVuZGVuY3kgdHJlZSDigJQgdGhhdCBsaXZlcyBpbiB0aGUgaW1hZ2Ugb25seS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQnVpbGRlcihhcmd2OiBzdHJpbmdbXSk6IG5ldmVyIHtcblx0Y29uc3QgeyB0YXJnZXREaXIsIGNvbnRhaW5lckFyZ3YsIHByb2plY3ROYW1lIH0gPSByZXNvbHZlTGF1bmNoKGFyZ3YpO1xuXHRta2RpclN5bmModGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBob3N0VWlkID0gcHJvY2Vzcy5nZXR1aWQ/LigpO1xuXHRjb25zdCBob3N0R2lkID0gcHJvY2Vzcy5nZXRnaWQ/LigpID8/IGhvc3RVaWQ7XG5cdGNvbnN0IHJ1bkFzSG9zdFVzZXIgPSBob3N0VWlkICE9IG51bGwgJiYgaG9zdEdpZCAhPSBudWxsO1xuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdFwiLWVcIixcblx0XHRgREVDT0hFUkVfUFJPSkVDVF9OQU1FPSR7cHJvamVjdE5hbWV9YCxcblx0XHRcIi1lXCIsXG5cdFx0XCJOUE1fQ09ORklHX0NBQ0hFPS9ucG0tY2FjaGVcIixcblx0XHRcIi1lXCIsXG5cdFx0XCJOUE1fQ09ORklHX1BSRUZFUl9PRkZMSU5FPXRydWVcIixcblx0XHRcIi1lXCIsXG5cdFx0YEhPTUU9JHtidWlsZGVySG9tZX1gLFxuXHRdO1xuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Y29uc3QgYXV0aDBDb25maWdEaXIgPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIuY29uZmlnL2F1dGgwXCIpO1xuXHRpZiAoZXhpc3RzU3luYyhhdXRoMENvbmZpZ0RpcikpIHtcblx0XHR2b2x1bWVzLnB1c2goXCItdlwiLCBgJHthdXRoMENvbmZpZ0Rpcn06JHtidWlsZGVySG9tZX0vLmNvbmZpZy9hdXRoMGApO1xuXHR9XG5cblx0Y29uc3QgdXNlckFyZ3M6IHN0cmluZ1tdID0gW107XG5cdGlmIChydW5Bc0hvc3RVc2VyKSB7XG5cdFx0dXNlckFyZ3MucHVzaChcIi0tdXNlclwiLCBgJHtob3N0VWlkfToke2hvc3RHaWR9YCk7XG5cdH0gZWxzZSBpZiAoaG9zdFVpZCAhPSBudWxsKSB7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfVUlEPSR7aG9zdFVpZH1gKTtcblx0XHRpZiAoaG9zdEdpZCAhPSBudWxsKSBlbnZBcmdzLnB1c2goXCItZVwiLCBgSE9TVF9HSUQ9JHtob3N0R2lkfWApO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdGNvbnN0IHR0eUZsYWdzID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSA/IFtcIi1pdFwiXSA6IFtcIi1pXCJdO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdC4uLnR0eUZsYWdzLFxuXHRcdFx0Li4udXNlckFyZ3MsXG5cdFx0XHQuLi52b2x1bWVzLFxuXHRcdFx0Li4uZW52QXJncyxcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdC4uLmNvbnRhaW5lckFyZ3YsXG5cdFx0XSxcblx0XHR7IHN0ZGlvOiBcImluaGVyaXRcIiB9LFxuXHQpO1xuXG5cdGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG5cdFx0Y29uc29sZS5sb2coYFxcbiAgU2NhZmZvbGQgY29tcGxldGUhXFxuXFxuICBPcGVuIHlvdXIgcHJvamVjdDpcXG5cXG4gICAgY29kZSAke3RhcmdldERpcn1cXG5gKTtcblx0fVxuXG5cdHByb2Nlc3MuZXhpdChyZXN1bHQuc3RhdHVzID8/IDApO1xufVxuIl0sIm5hbWVzIjpbImV4ZWNGaWxlU3luYyIsInNwYXduU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJob21lZGlyIiwicmVzb2x2ZSIsInJlc29sdmVMYXVuY2giLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsImFyZ3YiLCJ0YXJnZXREaXIiLCJjb250YWluZXJBcmd2IiwicHJvamVjdE5hbWUiLCJyZWN1cnNpdmUiLCJzdGRpbyIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaG9zdFVpZCIsImdldHVpZCIsImhvc3RHaWQiLCJnZXRnaWQiLCJydW5Bc0hvc3RVc2VyIiwibnBtQ2FjaGVEaXIiLCJidWlsZGVySG9tZSIsInZvbHVtZXMiLCJlbnZBcmdzIiwibnBtcmNQYXRoIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJsb2ciLCJ0dHlGbGFncyIsInN0ZGluIiwiaXNUVFkiLCJyZXN1bHQiLCJzdGF0dXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksRUFBRUMsU0FBUyxRQUFRLHFCQUFxQjtBQUM3RCxTQUFTQyxVQUFVLEVBQUVDLFNBQVMsUUFBUSxVQUFVO0FBQ2hELFNBQVNDLE9BQU8sUUFBUSxVQUFVO0FBQ2xDLFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGFBQWEsUUFBUSxzQkFBc0I7QUFDcEQsU0FBU0MsdUJBQXVCLEVBQUVDLGNBQWMsUUFBUSxlQUFlO0FBRXZFLE1BQU1DLGdCQUFnQixHQUFHRix3QkFBd0IsQ0FBQyxFQUFFQyxnQkFBZ0I7QUFFcEU7OztDQUdDLEdBQ0QsT0FBTyxTQUFTRSxhQUFhQyxJQUFjO0lBQzFDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxhQUFhLEVBQUVDLFdBQVcsRUFBRSxHQUFHUixjQUFjSztJQUNoRVIsVUFBVVMsV0FBVztRQUFFRyxXQUFXO0lBQUs7SUFDdkNaLFVBQVVFLFFBQVFPLFdBQVcsaUJBQWlCLGFBQWE7UUFBRUcsV0FBVztJQUFLO0lBRTdFLElBQUk7UUFDSGYsYUFBYSxVQUFVO1lBQUM7U0FBTyxFQUFFO1lBQUVnQixPQUFPO1FBQU87SUFDbEQsRUFBRSxPQUFNO1FBQ1BDLFFBQVFDLEtBQUssQ0FDWiw2REFDQztRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLE1BQU1DLFVBQVVGLFFBQVFHLE1BQU07SUFDOUIsTUFBTUMsVUFBVUosUUFBUUssTUFBTSxRQUFRSDtJQUN0QyxNQUFNSSxnQkFBZ0JKLFdBQVcsUUFBUUUsV0FBVztJQUVwRCxNQUFNRyxjQUFjckIsUUFBUUQsV0FBVztJQUN2Q0QsVUFBVXVCLGFBQWE7UUFBRVgsV0FBVztJQUFLO0lBRXpDLE1BQU1ZLGNBQWM7SUFFcEIsTUFBTUMsVUFBb0I7UUFDekI7UUFDQSxHQUFHaEIsVUFBVSxXQUFXLENBQUM7UUFDekI7UUFDQSxHQUFHYyxZQUFZLFdBQVcsQ0FBQztLQUMzQjtJQUVELE1BQU1HLFVBQW9CO1FBQ3pCO1FBQ0E7UUFDQTtRQUNBLENBQUMsc0JBQXNCLEVBQUVmLGFBQWE7UUFDdEM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLENBQUMsS0FBSyxFQUFFYSxhQUFhO0tBQ3JCO0lBRUQsTUFBTUcsWUFBWXpCLFFBQVFELFdBQVc7SUFDckMsSUFBSUYsV0FBVzRCLFlBQVk7UUFDMUJGLFFBQVFHLElBQUksQ0FBQyxNQUFNLEdBQUdELFVBQVUsbUJBQW1CLENBQUM7UUFDcERELFFBQVFFLElBQUksQ0FBQyxNQUFNO0lBQ3BCO0lBRUEsTUFBTUMsaUJBQWlCM0IsUUFBUUQsV0FBVztJQUMxQyxJQUFJRixXQUFXOEIsaUJBQWlCO1FBQy9CSixRQUFRRyxJQUFJLENBQUMsTUFBTSxHQUFHQyxlQUFlLENBQUMsRUFBRUwsWUFBWSxjQUFjLENBQUM7SUFDcEU7SUFFQSxNQUFNTSxXQUFxQixFQUFFO0lBQzdCLElBQUlSLGVBQWU7UUFDbEJRLFNBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUdWLFFBQVEsQ0FBQyxFQUFFRSxTQUFTO0lBQ2hELE9BQU8sSUFBSUYsV0FBVyxNQUFNO1FBQzNCUSxRQUFRRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRVYsU0FBUztRQUN4QyxJQUFJRSxXQUFXLE1BQU1NLFFBQVFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFUixTQUFTO0lBQzlEO0lBRUFOLFFBQVFpQixHQUFHLENBQUM7SUFFWixNQUFNQyxXQUFXaEIsUUFBUWlCLEtBQUssQ0FBQ0MsS0FBSyxHQUFHO1FBQUM7S0FBTSxHQUFHO1FBQUM7S0FBSztJQUV2RCxNQUFNQyxTQUFTckMsVUFDZCxVQUNBO1FBQ0M7UUFDQTtXQUNHa0M7V0FDQUY7V0FDQUw7V0FDQUM7UUFDSDtRQUNBO1FBQ0FwQjtXQUNHSTtLQUNILEVBQ0Q7UUFBRUcsT0FBTztJQUFVO0lBR3BCLElBQUlzQixPQUFPQyxNQUFNLEtBQUssR0FBRztRQUN4QnRCLFFBQVFpQixHQUFHLENBQUMsQ0FBQywyREFBMkQsRUFBRXRCLFVBQVUsRUFBRSxDQUFDO0lBQ3hGO0lBRUFPLFFBQVFDLElBQUksQ0FBQ2tCLE9BQU9DLE1BQU0sSUFBSTtBQUMvQiJ9
@@ -1,32 +0,0 @@
1
- import { createRequire } from "node:module";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const _require = createRequire(import.meta.url);
5
- const DEFAULT_CREATE_VERSION = "0.0.1-dev";
6
- const DEFAULT_CREATE_IMAGE_REPOSITORY = "ghcr.io/typesmiths/decohere/create";
7
- function resolveCreateMetadata() {
8
- let dir = dirname(fileURLToPath(import.meta.url));
9
- for(let i = 0; i < 5; i++){
10
- try {
11
- const pkg = _require(join(dir, "package.json"));
12
- if (pkg.name === "@decohere/create") {
13
- return {
14
- version: pkg.version ?? DEFAULT_CREATE_VERSION,
15
- imageRepository: pkg.decohere?.dockerImageRepository ?? DEFAULT_CREATE_IMAGE_REPOSITORY
16
- };
17
- }
18
- } catch {}
19
- const parent = dirname(dir);
20
- if (parent === dir) break;
21
- dir = parent;
22
- }
23
- return {
24
- version: DEFAULT_CREATE_VERSION,
25
- imageRepository: DEFAULT_CREATE_IMAGE_REPOSITORY
26
- };
27
- }
28
- const createMetadata = resolveCreateMetadata();
29
- export const CREATE_VERSION = createMetadata.version;
30
- export const CREATE_IMAGE_REPOSITORY = createMetadata.imageRepository;
31
-
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdmVyc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBfcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxudHlwZSBDcmVhdGVQYWNrYWdlTWV0YWRhdGEgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdHZlcnNpb24/OiBzdHJpbmc7XG5cdGRlY29oZXJlPzoge1xuXHRcdGRvY2tlckltYWdlUmVwb3NpdG9yeT86IHN0cmluZztcblx0fTtcbn07XG5cbmNvbnN0IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04gPSBcIjAuMC4xLWRldlwiO1xuY29uc3QgREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IFwiZ2hjci5pby90eXBlc21pdGhzL2RlY29oZXJlL2NyZWF0ZVwiO1xuXG5mdW5jdGlvbiByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKSB7XG5cdGxldCBkaXIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBrZyA9IF9yZXF1aXJlKGpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSkgYXMgQ3JlYXRlUGFja2FnZU1ldGFkYXRhO1xuXHRcdFx0aWYgKHBrZy5uYW1lID09PSBcIkBkZWNvaGVyZS9jcmVhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZlcnNpb246IHBrZy52ZXJzaW9uID8/IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFx0aW1hZ2VSZXBvc2l0b3J5OlxuXHRcdFx0XHRcdFx0cGtnLmRlY29oZXJlPy5kb2NrZXJJbWFnZVJlcG9zaXRvcnkgPz8gREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0Y29uc3QgcGFyZW50ID0gZGlybmFtZShkaXIpO1xuXHRcdGlmIChwYXJlbnQgPT09IGRpcikgYnJlYWs7XG5cdFx0ZGlyID0gcGFyZW50O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR2ZXJzaW9uOiBERUZBVUxUX0NSRUFURV9WRVJTSU9OLFxuXHRcdGltYWdlUmVwb3NpdG9yeTogREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0fTtcbn1cblxuY29uc3QgY3JlYXRlTWV0YWRhdGEgPSByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKTtcblxuZXhwb3J0IGNvbnN0IENSRUFURV9WRVJTSU9OID0gY3JlYXRlTWV0YWRhdGEudmVyc2lvbjtcblxuZXhwb3J0IGNvbnN0IENSRUFURV9JTUFHRV9SRVBPU0lUT1JZID0gY3JlYXRlTWV0YWRhdGEuaW1hZ2VSZXBvc2l0b3J5O1xuIl0sIm5hbWVzIjpbImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwiam9pbiIsImZpbGVVUkxUb1BhdGgiLCJfcmVxdWlyZSIsInVybCIsIkRFRkFVTFRfQ1JFQVRFX1ZFUlNJT04iLCJERUZBVUxUX0NSRUFURV9JTUFHRV9SRVBPU0lUT1JZIiwicmVzb2x2ZUNyZWF0ZU1ldGFkYXRhIiwiZGlyIiwiaSIsInBrZyIsIm5hbWUiLCJ2ZXJzaW9uIiwiaW1hZ2VSZXBvc2l0b3J5IiwiZGVjb2hlcmUiLCJkb2NrZXJJbWFnZVJlcG9zaXRvcnkiLCJwYXJlbnQiLCJjcmVhdGVNZXRhZGF0YSIsIkNSRUFURV9WRVJTSU9OIiwiQ1JFQVRFX0lNQUdFX1JFUE9TSVRPUlkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBUSxjQUFjO0FBQzVDLFNBQVNDLE9BQU8sRUFBRUMsSUFBSSxRQUFRLFlBQVk7QUFDMUMsU0FBU0MsYUFBYSxRQUFRLFdBQVc7QUFFekMsTUFBTUMsV0FBV0osY0FBYyxZQUFZSyxHQUFHO0FBVTlDLE1BQU1DLHlCQUF5QjtBQUMvQixNQUFNQyxrQ0FBa0M7QUFFeEMsU0FBU0M7SUFDUixJQUFJQyxNQUFNUixRQUFRRSxjQUFjLFlBQVlFLEdBQUc7SUFDL0MsSUFBSyxJQUFJSyxJQUFJLEdBQUdBLElBQUksR0FBR0EsSUFBSztRQUMzQixJQUFJO1lBQ0gsTUFBTUMsTUFBTVAsU0FBU0YsS0FBS08sS0FBSztZQUMvQixJQUFJRSxJQUFJQyxJQUFJLEtBQUssb0JBQW9CO2dCQUNwQyxPQUFPO29CQUNOQyxTQUFTRixJQUFJRSxPQUFPLElBQUlQO29CQUN4QlEsaUJBQ0NILElBQUlJLFFBQVEsRUFBRUMseUJBQXlCVDtnQkFDekM7WUFDRDtRQUNELEVBQUUsT0FBTSxDQUFDO1FBQ1QsTUFBTVUsU0FBU2hCLFFBQVFRO1FBQ3ZCLElBQUlRLFdBQVdSLEtBQUs7UUFDcEJBLE1BQU1RO0lBQ1A7SUFFQSxPQUFPO1FBQ05KLFNBQVNQO1FBQ1RRLGlCQUFpQlA7SUFDbEI7QUFDRDtBQUVBLE1BQU1XLGlCQUFpQlY7QUFFdkIsT0FBTyxNQUFNVyxpQkFBaUJELGVBQWVMLE9BQU8sQ0FBQztBQUVyRCxPQUFPLE1BQU1PLDBCQUEwQkYsZUFBZUosZUFBZSxDQUFDIn0=
@@ -1,177 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Vendor `@decohere/cli` for the builder image: resolve `@decohere/*` from
4
- * dist/release via `file:` (not `overrides`), `npm install --install-links`,
5
- * then tar the installed tree including `node_modules`. `--install-links`
6
- * materializes `file:` packages (and their deps) instead of leaving symlinks
7
- * whose nested installs live outside the create directory.
8
- */
9
- import { spawnSync } from "node:child_process";
10
- import { readdirSync, readFileSync, writeFileSync } from "node:fs";
11
- import { dirname, join, relative, resolve } from "node:path";
12
- import { fileURLToPath } from "node:url";
13
-
14
- /**
15
- * @typedef {{ name: string, dir: string }} WorkspacePackage
16
- */
17
-
18
- /**
19
- * @param {string} rootDir
20
- * @returns {WorkspacePackage[]}
21
- */
22
- export function collectWorkspacePackages(rootDir) {
23
- /** @type {WorkspacePackage[]} */
24
- const found = [];
25
- const walk = (dir) => {
26
- let entries;
27
- try {
28
- entries = readdirSync(dir, { withFileTypes: true });
29
- } catch {
30
- return;
31
- }
32
- for (const entry of entries) {
33
- if (entry.name === "node_modules" || entry.name === ".git") continue;
34
- const path = join(dir, entry.name);
35
- if (entry.isDirectory()) {
36
- walk(path);
37
- continue;
38
- }
39
- if (entry.name !== "package.json") continue;
40
- const pkg = JSON.parse(readFileSync(path, "utf8"));
41
- if (typeof pkg.name === "string" && pkg.name.startsWith("@decohere/")) {
42
- found.push({ name: pkg.name, dir });
43
- }
44
- }
45
- };
46
- walk(rootDir);
47
- return found;
48
- }
49
-
50
- /**
51
- * @param {string} fromDir
52
- * @param {string} pkgDir
53
- */
54
- export function fileSpec(fromDir, pkgDir) {
55
- let rel = relative(fromDir, pkgDir) || ".";
56
- rel = rel.replaceAll("\\", "/");
57
- if (!rel.startsWith(".")) rel = `./${rel}`;
58
- return `file:${rel}`;
59
- }
60
-
61
- /**
62
- * Rewrite `@decohere/*` dependency specs to local `file:` paths.
63
- * Must mutate `dependencies` (not `overrides`) — npm throws EOVERRIDE when an
64
- * override conflicts with a direct dependency.
65
- *
66
- * @param {Record<string, unknown>} pkg
67
- * @param {string} fromDir
68
- * @param {WorkspacePackage[]} packages
69
- */
70
- export function rewriteDecohereDepsToFile(pkg, fromDir, packages) {
71
- const byName = new Map(packages.map((item) => [item.name, item.dir]));
72
- const from = resolve(fromDir);
73
- const rewrite = (deps) => {
74
- if (deps == null || typeof deps !== "object" || Array.isArray(deps)) return deps;
75
- const next = { .../** @type {Record<string, unknown>} */ (deps) };
76
- for (const name of Object.keys(next)) {
77
- const dir = byName.get(name);
78
- if (dir == null || resolve(dir) === from) continue;
79
- next[name] = fileSpec(fromDir, dir);
80
- }
81
- return next;
82
- };
83
- return {
84
- ...pkg,
85
- dependencies: rewrite(pkg.dependencies),
86
- optionalDependencies: rewrite(pkg.optionalDependencies),
87
- };
88
- }
89
-
90
- function writeJson(path, value) {
91
- writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`);
92
- }
93
-
94
- function runNpm(cwd, args) {
95
- const result = spawnSync("npm", args, { cwd, encoding: "utf8" });
96
- if (result.status !== 0) {
97
- throw new Error(
98
- `npm ${args.join(" ")} failed (exit ${result.status}):\n${result.stderr}${result.stdout}`,
99
- );
100
- }
101
- return result.stdout.trim();
102
- }
103
-
104
- function packInstalledTree(outDir, dest) {
105
- const result = spawnSync(
106
- "tar",
107
- ["--create", "--gzip", "--dereference", "--file", dest, "-C", outDir, "."],
108
- { encoding: "utf8" },
109
- );
110
- if (result.status !== 0) {
111
- throw new Error(`tar failed (exit ${result.status}):\n${result.stderr}${result.stdout}`);
112
- }
113
- }
114
-
115
- export function packBuilderTgz(options) {
116
- const outDir = resolve(options.outDir);
117
- const workspaceOut = resolve(options.workspaceOut);
118
- const dest = resolve(options.dest);
119
- const packageJsonPath = join(outDir, "package.json");
120
- const packages = collectWorkspacePackages(workspaceOut);
121
- const originals = packages.map((pkg) => {
122
- const path = join(pkg.dir, "package.json");
123
- return { path, original: JSON.parse(readFileSync(path, "utf8")) };
124
- });
125
- const createOriginal = originals.find((entry) => entry.path === packageJsonPath)?.original;
126
- if (createOriginal == null) {
127
- throw new Error(`No @decohere package.json at ${packageJsonPath}`);
128
- }
129
-
130
- try {
131
- for (const { path, original } of originals) {
132
- writeJson(path, rewriteDecohereDepsToFile(original, dirname(path), packages));
133
- }
134
- runNpm(outDir, ["install", "--omit=dev", "--ignore-scripts", "--install-links"]);
135
- } finally {
136
- for (const { path, original } of originals) {
137
- writeJson(path, original);
138
- }
139
- }
140
-
141
- packInstalledTree(outDir, dest);
142
- return dest;
143
- }
144
-
145
- function parseArgs(argv) {
146
- /** @type {Record<string, string>} */
147
- const parsed = {};
148
- for (let i = 0; i < argv.length; i++) {
149
- const arg = argv[i];
150
- if (arg == null || !arg.startsWith("--")) continue;
151
- const key = arg.slice(2);
152
- const value = argv[i + 1];
153
- if (value == null || value.startsWith("--")) {
154
- throw new Error(`Missing value for --${key}`);
155
- }
156
- parsed[key] = value;
157
- i++;
158
- }
159
- return parsed;
160
- }
161
-
162
- function main() {
163
- const args = parseArgs(process.argv.slice(2));
164
- const outDir = args["out-dir"];
165
- const workspaceOut = args["workspace-out"];
166
- const dest = args.dest;
167
- if (outDir == null || workspaceOut == null || dest == null) {
168
- throw new Error(
169
- "Usage: pack-builder-tgz.mjs --out-dir <dir> --workspace-out <dir> --dest <create.tgz>",
170
- );
171
- }
172
- packBuilderTgz({ outDir, workspaceOut, dest });
173
- }
174
-
175
- if (process.argv[1] != null && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
176
- main();
177
- }
@@ -1,10 +0,0 @@
1
- export type LaunchPlan = {
2
- targetDir: string;
3
- containerArgv: string[];
4
- projectName: string;
5
- };
6
- /**
7
- * Host `npm create` argv → directory to mount and argv for the in-image CLI.
8
- * Positional `webapi my-app` wins over `-d` (npm treats `-d` as its own loglevel).
9
- */
10
- export declare function resolveLaunch(argv: string[], cwd?: string): LaunchPlan;
@@ -1,5 +0,0 @@
1
- /**
2
- * Pull/run the Decohere CLI image. Host `@decohere/create` does not load the
3
- * `@decohere/cli` dependency tree — that lives in the image only.
4
- */
5
- export declare function runInBuilder(argv: string[]): never;
@@ -1,2 +0,0 @@
1
- export declare const CREATE_VERSION: string;
2
- export declare const CREATE_IMAGE_REPOSITORY: string;