hacklab 0.0.2 → 0.3.1
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 +44 -3
- package/bin/ddd +19 -0
- package/dist/commands/brag.d.ts +3 -6
- package/dist/commands/brag.d.ts.map +1 -1
- package/dist/commands/brag.js +68 -299
- package/dist/commands/brag.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +48 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/drop.d.ts +2 -0
- package/dist/commands/drop.d.ts.map +1 -0
- package/dist/commands/drop.js +29 -0
- package/dist/commands/drop.js.map +1 -0
- package/dist/commands/exam.d.ts +5 -0
- package/dist/commands/exam.d.ts.map +1 -0
- package/dist/commands/exam.js +224 -0
- package/dist/commands/exam.js.map +1 -0
- package/dist/commands/join.d.ts +10 -9
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +213 -285
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/login.d.ts +1 -15
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +69 -133
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/scan-profile.d.ts +33 -0
- package/dist/commands/scan-profile.d.ts.map +1 -0
- package/dist/commands/scan-profile.js +279 -0
- package/dist/commands/scan-profile.js.map +1 -0
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +55 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/whoami.d.ts +1 -3
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +10 -37
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +18 -0
- package/dist/config.js.map +1 -0
- package/dist/dd.d.ts +3 -0
- package/dist/dd.d.ts.map +1 -0
- package/dist/dd.js +28 -0
- package/dist/dd.js.map +1 -0
- package/dist/index.js +117 -112
- package/dist/index.js.map +1 -1
- package/dist/project-brag.d.ts +58 -0
- package/dist/project-brag.d.ts.map +1 -0
- package/dist/project-brag.js +270 -0
- package/dist/project-brag.js.map +1 -0
- package/dist/scanners/index.d.ts +24 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +543 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/util.d.ts +83 -0
- package/dist/scanners/util.d.ts.map +1 -0
- package/dist/scanners/util.js +129 -0
- package/dist/scanners/util.js.map +1 -0
- package/dist/session.d.ts +17 -13
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +46 -155
- package/dist/session.js.map +1 -1
- package/dist/share-card.d.ts +29 -0
- package/dist/share-card.d.ts.map +1 -0
- package/dist/share-card.js +401 -0
- package/dist/share-card.js.map +1 -0
- package/dist/sync.d.ts +64 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +805 -0
- package/dist/sync.js.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +21 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/openBrowser.js.map +1 -1
- package/package.json +36 -29
- package/dist/api/client.d.ts +0 -150
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -246
- package/dist/api/client.js.map +0 -1
- package/dist/commands/admin-waitlist.d.ts +0 -12
- package/dist/commands/admin-waitlist.d.ts.map +0 -1
- package/dist/commands/admin-waitlist.js +0 -96
- package/dist/commands/admin-waitlist.js.map +0 -1
- package/dist/commands/brag.utils.d.ts +0 -12
- package/dist/commands/brag.utils.d.ts.map +0 -1
- package/dist/commands/brag.utils.js +0 -43
- package/dist/commands/brag.utils.js.map +0 -1
- package/dist/commands/essay.d.ts +0 -18
- package/dist/commands/essay.d.ts.map +0 -1
- package/dist/commands/essay.js +0 -117
- package/dist/commands/essay.js.map +0 -1
- package/dist/commands/explore.d.ts +0 -9
- package/dist/commands/explore.d.ts.map +0 -1
- package/dist/commands/explore.js +0 -32
- package/dist/commands/explore.js.map +0 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -237
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/link.d.ts +0 -17
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -36
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/login.utils.d.ts +0 -3
- package/dist/commands/login.utils.d.ts.map +0 -1
- package/dist/commands/login.utils.js +0 -13
- package/dist/commands/login.utils.js.map +0 -1
- package/dist/commands/new.d.ts +0 -15
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -172
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/new.utils.d.ts +0 -7
- package/dist/commands/new.utils.d.ts.map +0 -1
- package/dist/commands/new.utils.js +0 -50
- package/dist/commands/new.utils.js.map +0 -1
- package/dist/commands/onboard.d.ts +0 -10
- package/dist/commands/onboard.d.ts.map +0 -1
- package/dist/commands/onboard.js +0 -93
- package/dist/commands/onboard.js.map +0 -1
- package/dist/commands/publish.d.ts +0 -8
- package/dist/commands/publish.d.ts.map +0 -1
- package/dist/commands/publish.js +0 -47
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -12
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -112
- package/dist/commands/tui.js.map +0 -1
- package/dist/help-format.d.ts +0 -4
- package/dist/help-format.d.ts.map +0 -1
- package/dist/help-format.js +0 -30
- package/dist/help-format.js.map +0 -1
- package/dist/lab/config.d.ts +0 -32
- package/dist/lab/config.d.ts.map +0 -1
- package/dist/lab/config.js +0 -148
- package/dist/lab/config.js.map +0 -1
- package/dist/lab/contentStatus.d.ts +0 -6
- package/dist/lab/contentStatus.d.ts.map +0 -1
- package/dist/lab/contentStatus.js +0 -19
- package/dist/lab/contentStatus.js.map +0 -1
- package/dist/ui/banner.d.ts +0 -2
- package/dist/ui/banner.d.ts.map +0 -1
- package/dist/ui/banner.js +0 -22
- package/dist/ui/banner.js.map +0 -1
- package/dist/utils/findRepoRoot.d.ts +0 -2
- package/dist/utils/findRepoRoot.d.ts.map +0 -1
- package/dist/utils/findRepoRoot.js +0 -17
- package/dist/utils/findRepoRoot.js.map +0 -1
- package/dist/utils/pathExists.d.ts +0 -2
- package/dist/utils/pathExists.d.ts.map +0 -1
- package/dist/utils/pathExists.js +0 -11
- package/dist/utils/pathExists.js.map +0 -1
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { cancel, intro, note, outro } from '@clack/prompts';
|
|
2
|
-
import { fetchCliAdminWaitlist, fetchCliWhoAmI, } from '../api/client.js';
|
|
3
|
-
import { loadSession } from '../session.js';
|
|
4
|
-
import { getAppUrl } from './login.utils.js';
|
|
5
|
-
const MAX_LIMIT = 500;
|
|
6
|
-
const DEFAULT_LIMIT = 100;
|
|
7
|
-
const ADMIN_ROLES = new Set(['DEV', 'GOD']);
|
|
8
|
-
const ROLE_ALIASES = {
|
|
9
|
-
all: 'ALL',
|
|
10
|
-
human: 'HUMAN',
|
|
11
|
-
agent: 'AGENT',
|
|
12
|
-
};
|
|
13
|
-
export function normalizeAdminWaitlistRole(rawRole) {
|
|
14
|
-
if (!rawRole) {
|
|
15
|
-
return 'ALL';
|
|
16
|
-
}
|
|
17
|
-
const normalized = rawRole.trim().toLowerCase();
|
|
18
|
-
return ROLE_ALIASES[normalized] ?? 'ALL';
|
|
19
|
-
}
|
|
20
|
-
export function normalizeAdminWaitlistLimit(rawLimit) {
|
|
21
|
-
if (!rawLimit) {
|
|
22
|
-
return DEFAULT_LIMIT;
|
|
23
|
-
}
|
|
24
|
-
const parsed = Number.parseInt(rawLimit, 10);
|
|
25
|
-
if (!Number.isFinite(parsed)) {
|
|
26
|
-
return DEFAULT_LIMIT;
|
|
27
|
-
}
|
|
28
|
-
if (parsed < 1) {
|
|
29
|
-
return 1;
|
|
30
|
-
}
|
|
31
|
-
if (parsed > MAX_LIMIT) {
|
|
32
|
-
return MAX_LIMIT;
|
|
33
|
-
}
|
|
34
|
-
return parsed;
|
|
35
|
-
}
|
|
36
|
-
function formatTime(isoDate) {
|
|
37
|
-
return new Date(isoDate).toISOString().replace('T', ' ').slice(0, 16);
|
|
38
|
-
}
|
|
39
|
-
export function renderAdminWaitlistRows(snapshot) {
|
|
40
|
-
if (snapshot.rows.length === 0) {
|
|
41
|
-
return ['no waitlist signups found for current filters.'];
|
|
42
|
-
}
|
|
43
|
-
const emailWidth = Math.max('email'.length, ...snapshot.rows.map((row) => row.email.length));
|
|
44
|
-
const roleWidth = Math.max('role'.length, ...snapshot.rows.map((row) => row.role.length));
|
|
45
|
-
const header = `${'joined_at'.padEnd(16)} ${'role'.padEnd(roleWidth)} ${'email'.padEnd(emailWidth)}`;
|
|
46
|
-
const divider = `${'-'.repeat(16)} ${'-'.repeat(roleWidth)} ${'-'.repeat(emailWidth)}`;
|
|
47
|
-
const lines = snapshot.rows.map((row) => {
|
|
48
|
-
const joinedAt = formatTime(row.joinedAt);
|
|
49
|
-
return `${joinedAt.padEnd(16)} ${row.role.padEnd(roleWidth)} ${row.email.padEnd(emailWidth)}`;
|
|
50
|
-
});
|
|
51
|
-
return [header, divider, ...lines];
|
|
52
|
-
}
|
|
53
|
-
export async function adminWaitlistCommand(options = {}) {
|
|
54
|
-
intro('hacklab admin waitlist');
|
|
55
|
-
const session = await loadSession();
|
|
56
|
-
if (!session) {
|
|
57
|
-
cancel('not logged in. run `hacklab login`.');
|
|
58
|
-
process.exitCode = 1;
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const appUrl = getAppUrl(options.appUrl || session.appUrl);
|
|
62
|
-
const identity = await fetchCliWhoAmI(appUrl, session.token);
|
|
63
|
-
if (!identity) {
|
|
64
|
-
cancel('your cli session is invalid or expired. run `hacklab login`.');
|
|
65
|
-
process.exitCode = 1;
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (!ADMIN_ROLES.has(identity.user.systemMode)) {
|
|
69
|
-
cancel('admin access required (DEV/GOD only).');
|
|
70
|
-
process.exitCode = 1;
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const role = normalizeAdminWaitlistRole(options.role);
|
|
74
|
-
const limit = normalizeAdminWaitlistLimit(options.limit);
|
|
75
|
-
const search = options.search?.trim() || '';
|
|
76
|
-
const snapshot = await fetchCliAdminWaitlist(appUrl, session.token, {
|
|
77
|
-
role,
|
|
78
|
-
limit,
|
|
79
|
-
search,
|
|
80
|
-
});
|
|
81
|
-
note([
|
|
82
|
-
`total: ${snapshot.counts.total}`,
|
|
83
|
-
`humans: ${snapshot.counts.human}`,
|
|
84
|
-
`agents: ${snapshot.counts.agent}`,
|
|
85
|
-
`matching filters: ${snapshot.filteredTotal}`,
|
|
86
|
-
].join('\n'), 'waitlist stats');
|
|
87
|
-
note([
|
|
88
|
-
`role filter: ${snapshot.query.role.toLowerCase()}`,
|
|
89
|
-
`limit: ${snapshot.query.limit}`,
|
|
90
|
-
`search: ${snapshot.query.search || '-'}`,
|
|
91
|
-
].join('\n'), 'query');
|
|
92
|
-
const lines = renderAdminWaitlistRows(snapshot);
|
|
93
|
-
note(lines.join('\n'), 'signups');
|
|
94
|
-
outro('done.');
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=admin-waitlist.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-waitlist.js","sourceRoot":"","sources":["../../src/commands/admin-waitlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export type ParsedGitHubRemote = {
|
|
2
|
-
owner: string;
|
|
3
|
-
repo: string;
|
|
4
|
-
fullName: string;
|
|
5
|
-
httpsUrl: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function parseGitHubRemote(remoteUrl: string): ParsedGitHubRemote | null;
|
|
8
|
-
export declare function defaultAccountOwner(input: {
|
|
9
|
-
nickname?: string;
|
|
10
|
-
email: string;
|
|
11
|
-
}): string;
|
|
12
|
-
//# sourceMappingURL=brag.utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brag.utils.d.ts","sourceRoot":"","sources":["../../src/commands/brag.utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAMD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAqC9E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CAChB,GAAG,MAAM,CAST"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
function sanitizeRepoName(value) {
|
|
2
|
-
return value.trim().replace(/\.git$/i, '').replace(/\/$/, '');
|
|
3
|
-
}
|
|
4
|
-
export function parseGitHubRemote(remoteUrl) {
|
|
5
|
-
const value = remoteUrl.trim();
|
|
6
|
-
if (!value) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
const patterns = [
|
|
10
|
-
/^git@github\.com:([^/]+)\/(.+)$/i,
|
|
11
|
-
/^ssh:\/\/git@github\.com\/([^/]+)\/(.+)$/i,
|
|
12
|
-
/^https?:\/\/github\.com\/([^/]+)\/(.+)$/i,
|
|
13
|
-
/^git:\/\/github\.com\/([^/]+)\/(.+)$/i,
|
|
14
|
-
];
|
|
15
|
-
for (const pattern of patterns) {
|
|
16
|
-
const match = value.match(pattern);
|
|
17
|
-
if (!match) {
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
const owner = match[1].trim();
|
|
21
|
-
const repo = sanitizeRepoName(match[2]);
|
|
22
|
-
if (!owner || !repo) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
owner,
|
|
27
|
-
repo,
|
|
28
|
-
fullName: `${owner}/${repo}`,
|
|
29
|
-
httpsUrl: `https://github.com/${owner}/${repo}`,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
export function defaultAccountOwner(input) {
|
|
35
|
-
if (input.nickname) {
|
|
36
|
-
return input.nickname;
|
|
37
|
-
}
|
|
38
|
-
const email = input.email.trim().toLowerCase();
|
|
39
|
-
const local = email.split('@')[0] || '';
|
|
40
|
-
const normalized = local.replace(/[^a-z0-9._-]/g, '');
|
|
41
|
-
return normalized || 'unknown';
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=brag.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brag.utils.js","sourceRoot":"","sources":["../../src/commands/brag.utils.ts"],"names":[],"mappings":"AAOA,SAAS,gBAAgB,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM,QAAQ,GAAG;QACb,kCAAkC;QAClC,2CAA2C;QAC3C,0CAA0C;QAC1C,uCAAuC;KAC1C,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,SAAQ;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAEvC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACf,CAAC;QAED,OAAO;YACH,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,GAAG,KAAK,IAAI,IAAI,EAAE;YAC5B,QAAQ,EAAE,sBAAsB,KAAK,IAAI,IAAI,EAAE;SAClD,CAAA;IACL,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAGnC;IACG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,QAAQ,CAAA;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACrD,OAAO,UAAU,IAAI,SAAS,CAAA;AAClC,CAAC"}
|
package/dist/commands/essay.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
type EssayOptions = {
|
|
2
|
-
appUrl?: string;
|
|
3
|
-
lab?: string;
|
|
4
|
-
title?: string;
|
|
5
|
-
summary?: string;
|
|
6
|
-
body?: string;
|
|
7
|
-
file?: string;
|
|
8
|
-
publish?: boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare function getInitialLabSlug(explicitLabSlug: string | undefined, configLabSlug: string | undefined): string | undefined;
|
|
11
|
-
export declare function readEssayBody(options: {
|
|
12
|
-
file?: string;
|
|
13
|
-
body?: string;
|
|
14
|
-
title: string;
|
|
15
|
-
}): Promise<string>;
|
|
16
|
-
export declare function essayCommand(options?: EssayOptions): Promise<void>;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=essay.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"essay.d.ts","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"AAmBA,KAAK,YAAY,GAAG;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,wBAAgB,iBAAiB,CAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,aAAa,EAAE,MAAM,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlB;AA6BD,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E5E"}
|
package/dist/commands/essay.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
import { cancel, intro, isCancel, note, outro, select, text, } from '@clack/prompts';
|
|
4
|
-
import { createCliEssay, fetchCliLabs } from '../api/client.js';
|
|
5
|
-
import { loadHacklabConfig } from '../lab/config.js';
|
|
6
|
-
import { loadSession } from '../session.js';
|
|
7
|
-
import { findRepoRoot } from '../utils/findRepoRoot.js';
|
|
8
|
-
import { getAppUrl } from './login.utils.js';
|
|
9
|
-
export function getInitialLabSlug(explicitLabSlug, configLabSlug) {
|
|
10
|
-
const fromFlag = explicitLabSlug?.trim();
|
|
11
|
-
if (fromFlag) {
|
|
12
|
-
return fromFlag;
|
|
13
|
-
}
|
|
14
|
-
const fromConfig = configLabSlug?.trim();
|
|
15
|
-
if (fromConfig) {
|
|
16
|
-
return fromConfig;
|
|
17
|
-
}
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
export async function readEssayBody(options) {
|
|
21
|
-
if (options.file) {
|
|
22
|
-
const filePath = resolve(options.file);
|
|
23
|
-
return await readFile(filePath, 'utf8');
|
|
24
|
-
}
|
|
25
|
-
const body = options.body?.trim();
|
|
26
|
-
if (body) {
|
|
27
|
-
return options.body || '';
|
|
28
|
-
}
|
|
29
|
-
return [`# ${options.title}`, '', 'write your essay here.', ''].join('\n');
|
|
30
|
-
}
|
|
31
|
-
async function pickLabFromList(labs) {
|
|
32
|
-
if (labs.length === 1) {
|
|
33
|
-
return labs[0];
|
|
34
|
-
}
|
|
35
|
-
const selected = await select({
|
|
36
|
-
message: 'select lab',
|
|
37
|
-
options: labs.map((lab) => ({
|
|
38
|
-
value: lab.slug,
|
|
39
|
-
label: `${lab.name} (${lab.slug})`,
|
|
40
|
-
})),
|
|
41
|
-
});
|
|
42
|
-
if (isCancel(selected)) {
|
|
43
|
-
cancel('essay creation cancelled.');
|
|
44
|
-
process.exit(1);
|
|
45
|
-
}
|
|
46
|
-
const selectedLab = labs.find((lab) => lab.slug === String(selected));
|
|
47
|
-
if (!selectedLab) {
|
|
48
|
-
cancel('selected lab is invalid.');
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
return selectedLab;
|
|
52
|
-
}
|
|
53
|
-
export async function essayCommand(options = {}) {
|
|
54
|
-
intro('add essay to studio');
|
|
55
|
-
const session = await loadSession();
|
|
56
|
-
if (!session) {
|
|
57
|
-
outro('not logged in. run `hacklab login`.');
|
|
58
|
-
process.exitCode = 1;
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const appUrl = getAppUrl(options.appUrl || session.appUrl);
|
|
62
|
-
const repoRoot = await findRepoRoot();
|
|
63
|
-
const config = await loadHacklabConfig(repoRoot);
|
|
64
|
-
const initialLabSlug = getInitialLabSlug(options.lab, config?.labSlug);
|
|
65
|
-
const labs = await fetchCliLabs(appUrl, session.token);
|
|
66
|
-
if (labs.length === 0) {
|
|
67
|
-
cancel('no labs found. run `hacklab onboard` first.');
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
let selectedLab;
|
|
71
|
-
if (initialLabSlug) {
|
|
72
|
-
const explicitLab = labs.find((lab) => lab.slug === initialLabSlug);
|
|
73
|
-
if (!explicitLab) {
|
|
74
|
-
note(labs.map((lab) => `- ${lab.slug}`).join('\n'), 'available labs');
|
|
75
|
-
cancel(`lab "${initialLabSlug}" not found. run \`hacklab onboard\` if needed.`);
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
selectedLab = explicitLab;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
selectedLab = await pickLabFromList(labs);
|
|
82
|
-
}
|
|
83
|
-
note(`${selectedLab.name} (${selectedLab.slug})`, 'lab');
|
|
84
|
-
let title = options.title?.trim();
|
|
85
|
-
if (!title) {
|
|
86
|
-
const titleInput = await text({
|
|
87
|
-
message: 'essay title',
|
|
88
|
-
placeholder: 'my first essay',
|
|
89
|
-
});
|
|
90
|
-
if (isCancel(titleInput)) {
|
|
91
|
-
cancel('essay creation cancelled.');
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
title = String(titleInput).trim();
|
|
95
|
-
}
|
|
96
|
-
if (!title || title.length < 2) {
|
|
97
|
-
cancel('essay title must be at least 2 characters.');
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
const body = await readEssayBody({
|
|
101
|
-
file: options.file,
|
|
102
|
-
body: options.body,
|
|
103
|
-
title,
|
|
104
|
-
});
|
|
105
|
-
const created = await createCliEssay(appUrl, session.token, {
|
|
106
|
-
labSlug: selectedLab.slug,
|
|
107
|
-
title,
|
|
108
|
-
summary: options.summary,
|
|
109
|
-
body,
|
|
110
|
-
publish: options.publish,
|
|
111
|
-
});
|
|
112
|
-
const absoluteUrl = `${appUrl}${created.essay.url}`;
|
|
113
|
-
note(created.essay.slug, 'essay');
|
|
114
|
-
note(created.essay.status.toLowerCase(), 'status');
|
|
115
|
-
outro(`created "${created.essay.title}"\n${absoluteUrl}`);
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=essay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"essay.js","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
type ExploreOptions = {
|
|
2
|
-
appUrl?: string;
|
|
3
|
-
path?: string;
|
|
4
|
-
browser?: boolean;
|
|
5
|
-
};
|
|
6
|
-
export declare function buildExploreUrl(options?: ExploreOptions): string;
|
|
7
|
-
export declare function exploreCommand(options?: ExploreOptions): Promise<void>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=explore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"AAKA,KAAK,cAAc,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAYD,wBAAgB,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,CAKpE;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhF"}
|
package/dist/commands/explore.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { intro, note, outro } from '@clack/prompts';
|
|
2
|
-
import { openBrowser } from '../utils/openBrowser.js';
|
|
3
|
-
import { getAppUrl } from './login.utils.js';
|
|
4
|
-
function normalizeExplorePath(path) {
|
|
5
|
-
const normalized = path?.trim();
|
|
6
|
-
if (!normalized) {
|
|
7
|
-
return '/explore';
|
|
8
|
-
}
|
|
9
|
-
return normalized.startsWith('/') ? normalized : `/${normalized}`;
|
|
10
|
-
}
|
|
11
|
-
export function buildExploreUrl(options = {}) {
|
|
12
|
-
const appUrl = getAppUrl(options.appUrl);
|
|
13
|
-
const path = normalizeExplorePath(options.path);
|
|
14
|
-
return `${appUrl}${path}`;
|
|
15
|
-
}
|
|
16
|
-
export async function exploreCommand(options = {}) {
|
|
17
|
-
intro('explore hacklab');
|
|
18
|
-
const exploreUrl = buildExploreUrl(options);
|
|
19
|
-
if (options.browser === false) {
|
|
20
|
-
note(exploreUrl, 'explore url');
|
|
21
|
-
outro('browser disabled. copy the url above.');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const opened = await openBrowser(exploreUrl);
|
|
25
|
-
if (!opened) {
|
|
26
|
-
note(exploreUrl, 'explore url');
|
|
27
|
-
outro('could not open browser automatically. copy the url above.');
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
outro(`opened ${exploreUrl}`);
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=explore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAQ5C,SAAS,oBAAoB,CAAC,IAAa;IACvC,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,CAAA;IAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAA0B,EAAE;IACxD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/C,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA0B,EAAE;IAC7D,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAExB,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IAE3C,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC/B,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC9C,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAA;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC/B,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAClE,OAAM;IACV,CAAC;IAED,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/commands/init.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type HacklabConfig } from '../lab/config.js';
|
|
2
|
-
export type InitOptions = {
|
|
3
|
-
name?: string;
|
|
4
|
-
force?: boolean;
|
|
5
|
-
};
|
|
6
|
-
export type InitializeRepositoryResult = {
|
|
7
|
-
status: 'already-initialized';
|
|
8
|
-
configPath: string;
|
|
9
|
-
} | {
|
|
10
|
-
status: 'initialized';
|
|
11
|
-
configPath: string;
|
|
12
|
-
config: HacklabConfig;
|
|
13
|
-
};
|
|
14
|
-
export declare function initializeRepository(repoRoot: string, options?: InitOptions): Promise<InitializeRepositoryResult>;
|
|
15
|
-
export declare function initCommand(options?: InitOptions): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,OAAO,EAKH,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;AAIzB,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAChC;IACI,MAAM,EAAE,qBAAqB,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;CACrB,GACD;IACI,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,aAAa,CAAA;CACxB,CAAA;AAsIP,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,0BAA0B,CAAC,CA+HrC;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC1E"}
|
package/dist/commands/init.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { basename, dirname, join, relative } from 'node:path';
|
|
3
|
-
import { cancel, intro, note, outro } from '@clack/prompts';
|
|
4
|
-
import { CONTENT_STATUSES, DEFAULT_CONTENT_STATUS, DEFAULT_CONTENT_VISIBILITY, STATUS_DESCRIPTIONS, } from '../lab/contentStatus.js';
|
|
5
|
-
import { createDefaultHacklabConfig, getHacklabConfigPath, hasHacklabConfig, saveHacklabConfig, } from '../lab/config.js';
|
|
6
|
-
import { findRepoRoot } from '../utils/findRepoRoot.js';
|
|
7
|
-
import { pathExists } from '../utils/pathExists.js';
|
|
8
|
-
function currentDate() {
|
|
9
|
-
return new Date().toISOString().slice(0, 10);
|
|
10
|
-
}
|
|
11
|
-
function buildFrontmatter(type, title) {
|
|
12
|
-
const date = currentDate();
|
|
13
|
-
return [
|
|
14
|
-
'---',
|
|
15
|
-
`title: ${title}`,
|
|
16
|
-
`type: ${type}`,
|
|
17
|
-
`status: ${DEFAULT_CONTENT_STATUS}`,
|
|
18
|
-
`visibility: ${DEFAULT_CONTENT_VISIBILITY}`,
|
|
19
|
-
`created_at: ${date}`,
|
|
20
|
-
`updated_at: ${date}`,
|
|
21
|
-
'---',
|
|
22
|
-
].join('\n');
|
|
23
|
-
}
|
|
24
|
-
function buildExampleContent(type, title, body) {
|
|
25
|
-
return [buildFrontmatter(type, title), '', ...body, ''].join('\n');
|
|
26
|
-
}
|
|
27
|
-
async function ensureDirectoryWithGitkeep(path) {
|
|
28
|
-
await mkdir(path, { recursive: true });
|
|
29
|
-
const gitkeepPath = join(path, '.gitkeep');
|
|
30
|
-
if (!(await pathExists(gitkeepPath))) {
|
|
31
|
-
await writeFile(gitkeepPath, '', 'utf8');
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async function writeFileIfMissing(path, content) {
|
|
35
|
-
if (await pathExists(path)) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
await mkdir(dirname(path), { recursive: true });
|
|
39
|
-
await writeFile(path, content, 'utf8');
|
|
40
|
-
}
|
|
41
|
-
function buildContentModelDoc() {
|
|
42
|
-
const statusLines = CONTENT_STATUSES.map((status) => {
|
|
43
|
-
return `- \`${status}\`: ${STATUS_DESCRIPTIONS[status]}`;
|
|
44
|
-
});
|
|
45
|
-
return [
|
|
46
|
-
'# content model',
|
|
47
|
-
'',
|
|
48
|
-
'this repo stores authored content in these directories:',
|
|
49
|
-
'',
|
|
50
|
-
'- `profile/`',
|
|
51
|
-
'- `projects/`',
|
|
52
|
-
'- `guides/`',
|
|
53
|
-
'- `courses/`',
|
|
54
|
-
'- `essays/`',
|
|
55
|
-
'- `research/`',
|
|
56
|
-
'',
|
|
57
|
-
'## statuses',
|
|
58
|
-
'',
|
|
59
|
-
...statusLines,
|
|
60
|
-
'',
|
|
61
|
-
'## notes',
|
|
62
|
-
'',
|
|
63
|
-
'- use lowercase values for all status/type frontmatter fields.',
|
|
64
|
-
'- keep `status` and `visibility` separate.',
|
|
65
|
-
'- start new content as `draft` unless intentionally only an idea.',
|
|
66
|
-
'',
|
|
67
|
-
].join('\n');
|
|
68
|
-
}
|
|
69
|
-
function buildFrontmatterDoc() {
|
|
70
|
-
return [
|
|
71
|
-
'# frontmatter',
|
|
72
|
-
'',
|
|
73
|
-
'use this base frontmatter for all `.mdx` content:',
|
|
74
|
-
'',
|
|
75
|
-
'```mdx',
|
|
76
|
-
'---',
|
|
77
|
-
'title: my title',
|
|
78
|
-
'type: essay',
|
|
79
|
-
'status: draft',
|
|
80
|
-
'visibility: private',
|
|
81
|
-
'created_at: 2026-02-19',
|
|
82
|
-
'updated_at: 2026-02-19',
|
|
83
|
-
'---',
|
|
84
|
-
'```',
|
|
85
|
-
'',
|
|
86
|
-
'allowed statuses:',
|
|
87
|
-
'',
|
|
88
|
-
`- ${CONTENT_STATUSES.join(', ')}`,
|
|
89
|
-
'',
|
|
90
|
-
].join('\n');
|
|
91
|
-
}
|
|
92
|
-
function buildDocsReadme() {
|
|
93
|
-
return [
|
|
94
|
-
'# docs',
|
|
95
|
-
'',
|
|
96
|
-
'- `profile.mdx`: profile content and ownership guidance',
|
|
97
|
-
'- `content-model.mdx`: directory and status model',
|
|
98
|
-
'- `frontmatter.mdx`: canonical frontmatter format',
|
|
99
|
-
'',
|
|
100
|
-
].join('\n');
|
|
101
|
-
}
|
|
102
|
-
function buildProfileDoc() {
|
|
103
|
-
return [
|
|
104
|
-
'# profile content',
|
|
105
|
-
'',
|
|
106
|
-
'- personal profile content belongs in `profile/`.',
|
|
107
|
-
'- suggested files: `bio.mdx`, `cv.mdx`.',
|
|
108
|
-
'- keep lab identity and machine config in `.hacklab/config.json`.',
|
|
109
|
-
'',
|
|
110
|
-
].join('\n');
|
|
111
|
-
}
|
|
112
|
-
function buildHacklabMetadataReadme() {
|
|
113
|
-
return [
|
|
114
|
-
'# .hacklab metadata',
|
|
115
|
-
'',
|
|
116
|
-
'this folder stores hacklab metadata and tooling files only.',
|
|
117
|
-
'',
|
|
118
|
-
'- `config.json` defines local lab structure and defaults.',
|
|
119
|
-
'- identity fields include `labId` (optional), `labSlug`, `labName`, `owner`, `workspaceType`.',
|
|
120
|
-
'- do not store authored content here.',
|
|
121
|
-
'- authored content belongs in `profile/`, `projects/`, `guides/`, `courses/`, `essays/`, `research/`.',
|
|
122
|
-
'',
|
|
123
|
-
].join('\n');
|
|
124
|
-
}
|
|
125
|
-
export async function initializeRepository(repoRoot, options = {}) {
|
|
126
|
-
const configPath = getHacklabConfigPath(repoRoot);
|
|
127
|
-
if ((await hasHacklabConfig(repoRoot)) && !options.force) {
|
|
128
|
-
return {
|
|
129
|
-
status: 'already-initialized',
|
|
130
|
-
configPath,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
const defaultLabName = basename(repoRoot);
|
|
134
|
-
const config = createDefaultHacklabConfig({
|
|
135
|
-
labName: options.name || defaultLabName,
|
|
136
|
-
});
|
|
137
|
-
await saveHacklabConfig(repoRoot, config);
|
|
138
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, 'assets'));
|
|
139
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, 'profile'));
|
|
140
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, config.contentDirs.projects));
|
|
141
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, config.contentDirs.guides));
|
|
142
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, config.contentDirs.courses));
|
|
143
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, config.contentDirs.essays));
|
|
144
|
-
await ensureDirectoryWithGitkeep(join(repoRoot, config.contentDirs.research));
|
|
145
|
-
await writeFileIfMissing(join(repoRoot, 'home.mdx'), [
|
|
146
|
-
'# home',
|
|
147
|
-
'',
|
|
148
|
-
'welcome to your lab home.',
|
|
149
|
-
'',
|
|
150
|
-
'- run `hacklab tui` and type `/new` to create content.',
|
|
151
|
-
'',
|
|
152
|
-
].join('\n'));
|
|
153
|
-
await writeFileIfMissing(join(repoRoot, 'readme.mdx'), [
|
|
154
|
-
'# readme',
|
|
155
|
-
'',
|
|
156
|
-
'this repository is a hacklab.',
|
|
157
|
-
'',
|
|
158
|
-
].join('\n'));
|
|
159
|
-
await writeFileIfMissing(join(repoRoot, 'profile', 'bio.mdx'), [
|
|
160
|
-
'# bio',
|
|
161
|
-
'',
|
|
162
|
-
'write a short introduction about yourself.',
|
|
163
|
-
'',
|
|
164
|
-
].join('\n'));
|
|
165
|
-
await writeFileIfMissing(join(repoRoot, 'profile', 'cv.mdx'), [
|
|
166
|
-
'# cv',
|
|
167
|
-
'',
|
|
168
|
-
'list experience, projects, and education.',
|
|
169
|
-
'',
|
|
170
|
-
].join('\n'));
|
|
171
|
-
await writeFileIfMissing(join(repoRoot, config.contentDirs.projects, 'example-project', 'README.mdx'), buildExampleContent('project', 'example project', [
|
|
172
|
-
'# example project',
|
|
173
|
-
'',
|
|
174
|
-
'describe what you are building and why.',
|
|
175
|
-
]));
|
|
176
|
-
await writeFileIfMissing(join(repoRoot, config.contentDirs.guides, 'example-guide', 'README.mdx'), buildExampleContent('guide', 'example guide', [
|
|
177
|
-
'# example guide',
|
|
178
|
-
'',
|
|
179
|
-
'step-by-step guide content goes here.',
|
|
180
|
-
]));
|
|
181
|
-
await writeFileIfMissing(join(repoRoot, config.contentDirs.courses, 'example-course', 'README.mdx'), buildExampleContent('course', 'example course', [
|
|
182
|
-
'# example course',
|
|
183
|
-
'',
|
|
184
|
-
'outline modules, chapters, and outcomes.',
|
|
185
|
-
]));
|
|
186
|
-
await writeFileIfMissing(join(repoRoot, config.contentDirs.essays, 'example-essay.mdx'), buildExampleContent('essay', 'example essay', [
|
|
187
|
-
'# example essay',
|
|
188
|
-
'',
|
|
189
|
-
'write your perspective here.',
|
|
190
|
-
]));
|
|
191
|
-
await writeFileIfMissing(join(repoRoot, config.contentDirs.research, 'example-research-paper.mdx'), buildExampleContent('research-paper', 'example research paper', [
|
|
192
|
-
'# example research paper',
|
|
193
|
-
'',
|
|
194
|
-
'abstract:',
|
|
195
|
-
'',
|
|
196
|
-
'## notes',
|
|
197
|
-
]));
|
|
198
|
-
await writeFileIfMissing(join(repoRoot, 'docs', 'README.mdx'), buildDocsReadme());
|
|
199
|
-
await writeFileIfMissing(join(repoRoot, 'docs', 'profile.mdx'), buildProfileDoc());
|
|
200
|
-
await writeFileIfMissing(join(repoRoot, 'docs', 'content-model.mdx'), buildContentModelDoc());
|
|
201
|
-
await writeFileIfMissing(join(repoRoot, 'docs', 'frontmatter.mdx'), buildFrontmatterDoc());
|
|
202
|
-
await writeFileIfMissing(join(repoRoot, '.hacklab', 'README.mdx'), buildHacklabMetadataReadme());
|
|
203
|
-
return {
|
|
204
|
-
status: 'initialized',
|
|
205
|
-
configPath,
|
|
206
|
-
config,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
export async function initCommand(options = {}) {
|
|
210
|
-
intro('initialize hacklab repository');
|
|
211
|
-
const repoRoot = await findRepoRoot();
|
|
212
|
-
const result = await initializeRepository(repoRoot, options);
|
|
213
|
-
if (result.status === 'already-initialized') {
|
|
214
|
-
cancel(`hacklab is already initialized at ${relative(process.cwd(), result.configPath) || result.configPath}. use --force to overwrite config.`);
|
|
215
|
-
process.exit(1);
|
|
216
|
-
}
|
|
217
|
-
const config = result.config;
|
|
218
|
-
note(`initialized in ${repoRoot}`, 'repository');
|
|
219
|
-
note([
|
|
220
|
-
'- assets/',
|
|
221
|
-
'- profile/',
|
|
222
|
-
`- ${config.contentDirs.projects}/`,
|
|
223
|
-
`- ${config.contentDirs.guides}/`,
|
|
224
|
-
`- ${config.contentDirs.courses}/`,
|
|
225
|
-
`- ${config.contentDirs.essays}/`,
|
|
226
|
-
`- ${config.contentDirs.research}/`,
|
|
227
|
-
'- home.mdx',
|
|
228
|
-
'- readme.mdx',
|
|
229
|
-
'- profile/bio.mdx',
|
|
230
|
-
'- profile/cv.mdx',
|
|
231
|
-
'- docs/profile.mdx',
|
|
232
|
-
'- docs/content-model.mdx',
|
|
233
|
-
'- docs/frontmatter.mdx',
|
|
234
|
-
].join('\n'), 'created structure');
|
|
235
|
-
outro('hacklab repo initialized. run `hacklab new` to create your first entry.');
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|