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
package/dist/commands/link.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type HacklabConfig } from '../lab/config.js';
|
|
2
|
-
type LinkOptions = {
|
|
3
|
-
name?: string;
|
|
4
|
-
force?: boolean;
|
|
5
|
-
};
|
|
6
|
-
export type LinkResult = {
|
|
7
|
-
status: 'linked';
|
|
8
|
-
configPath: string;
|
|
9
|
-
config: HacklabConfig;
|
|
10
|
-
} | {
|
|
11
|
-
status: 'already-linked';
|
|
12
|
-
configPath: string;
|
|
13
|
-
};
|
|
14
|
-
export declare function linkRepository(repoRoot: string, options?: LinkOptions): Promise<LinkResult>;
|
|
15
|
-
export declare function linkCommand(options?: LinkOptions): Promise<void>;
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=link.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAIA,OAAO,EAKH,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;AAGzB,KAAK,WAAW,GAAG;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAChB;IACI,MAAM,EAAE,QAAQ,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,aAAa,CAAA;CACxB,GACD;IACI,MAAM,EAAE,gBAAgB,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AAEP,wBAAsB,cAAc,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1E"}
|
package/dist/commands/link.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { basename, relative } from 'node:path';
|
|
2
|
-
import { cancel, intro, note, outro } from '@clack/prompts';
|
|
3
|
-
import { createDefaultHacklabConfig, getHacklabConfigPath, hasHacklabConfig, saveHacklabConfig, } from '../lab/config.js';
|
|
4
|
-
import { findRepoRoot } from '../utils/findRepoRoot.js';
|
|
5
|
-
export async function linkRepository(repoRoot, options = {}) {
|
|
6
|
-
const configPath = getHacklabConfigPath(repoRoot);
|
|
7
|
-
if ((await hasHacklabConfig(repoRoot)) && !options.force) {
|
|
8
|
-
return {
|
|
9
|
-
status: 'already-linked',
|
|
10
|
-
configPath,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
const defaultLabName = basename(repoRoot);
|
|
14
|
-
const config = createDefaultHacklabConfig({
|
|
15
|
-
labName: options.name || defaultLabName,
|
|
16
|
-
});
|
|
17
|
-
await saveHacklabConfig(repoRoot, config);
|
|
18
|
-
return {
|
|
19
|
-
status: 'linked',
|
|
20
|
-
configPath,
|
|
21
|
-
config,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export async function linkCommand(options = {}) {
|
|
25
|
-
intro('link existing repository to hacklab');
|
|
26
|
-
const repoRoot = await findRepoRoot();
|
|
27
|
-
const result = await linkRepository(repoRoot, options);
|
|
28
|
-
if (result.status === 'already-linked') {
|
|
29
|
-
cancel(`repository is already linked at ${relative(process.cwd(), result.configPath) || result.configPath}. use --force to overwrite config.`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
note(`linked ${repoRoot}`, 'repository');
|
|
33
|
-
note(relative(process.cwd(), result.configPath) || result.configPath, 'config path');
|
|
34
|
-
outro('repository linked. no content folders were created.');
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=link.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EACH,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAEpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAkBvD,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,QAAgB,EAChB,UAAuB,EAAE;IAEzB,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAEjD,IAAI,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO;YACH,MAAM,EAAE,gBAAgB;YACxB,UAAU;SACb,CAAA;IACL,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,0BAA0B,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,cAAc;KAC1C,CAAC,CAAA;IACF,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAEzC,OAAO;QACH,MAAM,EAAE,QAAQ;QAChB,UAAU;QACV,MAAM;KACT,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAuB,EAAE;IACvD,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAE5C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEtD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACrC,MAAM,CACF,mCAAmC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,oCAAoC,CACzI,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,UAAU,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAA;IACxC,IAAI,CACA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,EAC/D,aAAa,CAChB,CAAA;IACD,KAAK,CAAC,qDAAqD,CAAC,CAAA;AAChE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.utils.d.ts","sourceRoot":"","sources":["../../src/commands/login.utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,0BAA0B,CAAA;AAEtD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAYjD"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_APP_URL = 'http://localhost:3000';
|
|
2
|
-
export function getAppUrl(appUrl) {
|
|
3
|
-
const normalizedOption = appUrl?.trim();
|
|
4
|
-
if (normalizedOption) {
|
|
5
|
-
return normalizedOption.replace(/\/$/, '');
|
|
6
|
-
}
|
|
7
|
-
const envUrl = process.env.HACKLAB_APP_URL?.trim();
|
|
8
|
-
if (envUrl) {
|
|
9
|
-
return envUrl.replace(/\/$/, '');
|
|
10
|
-
}
|
|
11
|
-
return DEFAULT_APP_URL;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=login.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.utils.js","sourceRoot":"","sources":["../../src/commands/login.utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAEtD,MAAM,UAAU,SAAS,CAAC,MAAe;IACrC,MAAM,gBAAgB,GAAG,MAAM,EAAE,IAAI,EAAE,CAAA;IACvC,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAA;IAClD,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,eAAe,CAAA;AAC1B,CAAC"}
|
package/dist/commands/new.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type EntryType } from './new.utils.js';
|
|
2
|
-
type NewOptions = {
|
|
3
|
-
title?: string;
|
|
4
|
-
showIntro?: boolean;
|
|
5
|
-
showOutput?: boolean;
|
|
6
|
-
};
|
|
7
|
-
export type NewCommandResult = {
|
|
8
|
-
entryType: EntryType;
|
|
9
|
-
slug: string;
|
|
10
|
-
title: string;
|
|
11
|
-
targetPath: string;
|
|
12
|
-
};
|
|
13
|
-
export declare function newCommand(rawType?: string, rawSlug?: string, options?: NewOptions): Promise<NewCommandResult>;
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=new.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAYA,OAAO,EAKH,KAAK,SAAS,EACjB,MAAM,gBAAgB,CAAA;AAEvB,KAAK,UAAU,GAAG;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AAoJD,wBAAsB,UAAU,CAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA6D3B"}
|
package/dist/commands/new.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
3
|
-
import { cancel, intro, isCancel, note, outro, select, text } from '@clack/prompts';
|
|
4
|
-
import { DEFAULT_CONTENT_STATUS, DEFAULT_CONTENT_VISIBILITY, } from '../lab/contentStatus.js';
|
|
5
|
-
import { loadHacklabConfig } from '../lab/config.js';
|
|
6
|
-
import { findRepoRoot } from '../utils/findRepoRoot.js';
|
|
7
|
-
import { pathExists } from '../utils/pathExists.js';
|
|
8
|
-
import { getEntryTypeLabel, parseEntryType, slugify, titleFromSlug, } from './new.utils.js';
|
|
9
|
-
function currentDate() {
|
|
10
|
-
return new Date().toISOString().slice(0, 10);
|
|
11
|
-
}
|
|
12
|
-
function buildFrontmatter(entryType, title) {
|
|
13
|
-
const date = currentDate();
|
|
14
|
-
return [
|
|
15
|
-
'---',
|
|
16
|
-
`title: ${title}`,
|
|
17
|
-
`type: ${entryType}`,
|
|
18
|
-
`status: ${DEFAULT_CONTENT_STATUS}`,
|
|
19
|
-
`visibility: ${DEFAULT_CONTENT_VISIBILITY}`,
|
|
20
|
-
`created_at: ${date}`,
|
|
21
|
-
`updated_at: ${date}`,
|
|
22
|
-
'---',
|
|
23
|
-
].join('\n');
|
|
24
|
-
}
|
|
25
|
-
function getTargetPath(entryType, baseDir, slug) {
|
|
26
|
-
if (entryType === 'essay' || entryType === 'research-paper') {
|
|
27
|
-
return join(baseDir, `${slug}.mdx`);
|
|
28
|
-
}
|
|
29
|
-
return join(baseDir, slug, 'README.mdx');
|
|
30
|
-
}
|
|
31
|
-
function getTemplate(entryType, title) {
|
|
32
|
-
const frontmatter = buildFrontmatter(entryType, title);
|
|
33
|
-
if (entryType === 'essay') {
|
|
34
|
-
return [
|
|
35
|
-
frontmatter,
|
|
36
|
-
'',
|
|
37
|
-
`# ${title}`,
|
|
38
|
-
'',
|
|
39
|
-
'write your essay here.',
|
|
40
|
-
'',
|
|
41
|
-
].join('\n');
|
|
42
|
-
}
|
|
43
|
-
if (entryType === 'research-paper') {
|
|
44
|
-
return [
|
|
45
|
-
frontmatter,
|
|
46
|
-
'',
|
|
47
|
-
`# ${title}`,
|
|
48
|
-
'',
|
|
49
|
-
'abstract:',
|
|
50
|
-
'',
|
|
51
|
-
'## notes',
|
|
52
|
-
'',
|
|
53
|
-
].join('\n');
|
|
54
|
-
}
|
|
55
|
-
return [frontmatter, '', `# ${title}`, '', `this is a new ${entryType}.`, ''].join('\n');
|
|
56
|
-
}
|
|
57
|
-
function getBaseDirectory(entryType, dirs) {
|
|
58
|
-
if (entryType === 'project') {
|
|
59
|
-
return dirs.projects;
|
|
60
|
-
}
|
|
61
|
-
if (entryType === 'guide') {
|
|
62
|
-
return dirs.guides;
|
|
63
|
-
}
|
|
64
|
-
if (entryType === 'course') {
|
|
65
|
-
return dirs.courses;
|
|
66
|
-
}
|
|
67
|
-
if (entryType === 'essay') {
|
|
68
|
-
return dirs.essays;
|
|
69
|
-
}
|
|
70
|
-
return dirs.research;
|
|
71
|
-
}
|
|
72
|
-
async function promptForEntryType() {
|
|
73
|
-
const value = await select({
|
|
74
|
-
message: 'what do you want to create?',
|
|
75
|
-
options: [
|
|
76
|
-
{
|
|
77
|
-
value: 'essay',
|
|
78
|
-
label: 'essay',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
value: 'guide',
|
|
82
|
-
label: 'guide',
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
value: 'course',
|
|
86
|
-
label: 'course',
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
value: 'research-paper',
|
|
90
|
-
label: 'research paper',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
value: 'project',
|
|
94
|
-
label: 'project',
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
if (isCancel(value)) {
|
|
99
|
-
cancel('creation cancelled.');
|
|
100
|
-
process.exit(1);
|
|
101
|
-
}
|
|
102
|
-
const entryType = parseEntryType(String(value));
|
|
103
|
-
if (!entryType) {
|
|
104
|
-
cancel('invalid content type selected.');
|
|
105
|
-
process.exit(1);
|
|
106
|
-
}
|
|
107
|
-
return entryType;
|
|
108
|
-
}
|
|
109
|
-
async function promptForSlug(entryType) {
|
|
110
|
-
const label = getEntryTypeLabel(entryType);
|
|
111
|
-
const value = await text({
|
|
112
|
-
message: `name your ${label}`,
|
|
113
|
-
placeholder: `my-${label.replace(/\s+/g, '-')}`,
|
|
114
|
-
});
|
|
115
|
-
if (isCancel(value)) {
|
|
116
|
-
cancel('creation cancelled.');
|
|
117
|
-
process.exit(1);
|
|
118
|
-
}
|
|
119
|
-
const slug = slugify(String(value));
|
|
120
|
-
if (!slug) {
|
|
121
|
-
cancel('invalid name. use letters, numbers, spaces, underscores, or dashes.');
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
return slug;
|
|
125
|
-
}
|
|
126
|
-
export async function newCommand(rawType, rawSlug, options = {}) {
|
|
127
|
-
const showIntro = options.showIntro !== false;
|
|
128
|
-
const showOutput = options.showOutput !== false;
|
|
129
|
-
if (showIntro) {
|
|
130
|
-
intro('create new hacklab content');
|
|
131
|
-
}
|
|
132
|
-
const entryType = rawType
|
|
133
|
-
? parseEntryType(rawType)
|
|
134
|
-
: await promptForEntryType();
|
|
135
|
-
if (!entryType) {
|
|
136
|
-
cancel(`unknown content type "${rawType}". use one of: project, guide, course, essay, research-paper.`);
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
const slug = rawSlug ? slugify(rawSlug) : await promptForSlug(entryType);
|
|
140
|
-
if (!slug) {
|
|
141
|
-
cancel('invalid slug. use letters, numbers, spaces, underscores, or dashes.');
|
|
142
|
-
process.exit(1);
|
|
143
|
-
}
|
|
144
|
-
const repoRoot = await findRepoRoot();
|
|
145
|
-
const config = await loadHacklabConfig(repoRoot);
|
|
146
|
-
if (!config) {
|
|
147
|
-
cancel('hacklab is not initialized. run `hacklab init` first.');
|
|
148
|
-
process.exit(1);
|
|
149
|
-
}
|
|
150
|
-
const baseDirectory = getBaseDirectory(entryType, config.contentDirs);
|
|
151
|
-
const basePath = join(repoRoot, baseDirectory);
|
|
152
|
-
const targetPath = getTargetPath(entryType, basePath, slug);
|
|
153
|
-
if (await pathExists(targetPath)) {
|
|
154
|
-
cancel(`target already exists: ${targetPath}`);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
await mkdir(dirname(targetPath), { recursive: true });
|
|
158
|
-
const title = options.title?.trim() || titleFromSlug(slug);
|
|
159
|
-
const template = getTemplate(entryType, title);
|
|
160
|
-
await writeFile(targetPath, template, 'utf8');
|
|
161
|
-
if (showOutput) {
|
|
162
|
-
note(targetPath, 'created');
|
|
163
|
-
outro(`created ${getEntryTypeLabel(entryType)} "${slug}".`);
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
entryType,
|
|
167
|
-
slug,
|
|
168
|
-
title,
|
|
169
|
-
targetPath,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=new.js.map
|
package/dist/commands/new.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const ENTRY_TYPES: readonly ["project", "guide", "course", "essay", "research-paper"];
|
|
2
|
-
export type EntryType = (typeof ENTRY_TYPES)[number];
|
|
3
|
-
export declare function parseEntryType(value: string): EntryType | null;
|
|
4
|
-
export declare function getEntryTypeLabel(entryType: EntryType): string;
|
|
5
|
-
export declare function slugify(value: string): string;
|
|
6
|
-
export declare function titleFromSlug(slug: string): string;
|
|
7
|
-
//# sourceMappingURL=new.utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"new.utils.d.ts","sourceRoot":"","sources":["../../src/commands/new.utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,oEAMd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAwB9D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAM9D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
export const ENTRY_TYPES = [
|
|
2
|
-
'project',
|
|
3
|
-
'guide',
|
|
4
|
-
'course',
|
|
5
|
-
'essay',
|
|
6
|
-
'research-paper',
|
|
7
|
-
];
|
|
8
|
-
export function parseEntryType(value) {
|
|
9
|
-
const normalized = value.trim().toLowerCase();
|
|
10
|
-
if (!normalized) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
if (normalized === 'guides') {
|
|
14
|
-
return 'guide';
|
|
15
|
-
}
|
|
16
|
-
if (normalized === 'research' || normalized === 'paper') {
|
|
17
|
-
return 'research-paper';
|
|
18
|
-
}
|
|
19
|
-
if (normalized === 'research paper') {
|
|
20
|
-
return 'research-paper';
|
|
21
|
-
}
|
|
22
|
-
if (ENTRY_TYPES.includes(normalized)) {
|
|
23
|
-
return normalized;
|
|
24
|
-
}
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
export function getEntryTypeLabel(entryType) {
|
|
28
|
-
if (entryType === 'research-paper') {
|
|
29
|
-
return 'research paper';
|
|
30
|
-
}
|
|
31
|
-
return entryType;
|
|
32
|
-
}
|
|
33
|
-
export function slugify(value) {
|
|
34
|
-
const normalized = value
|
|
35
|
-
.trim()
|
|
36
|
-
.toLowerCase()
|
|
37
|
-
.replace(/[^a-z0-9\s-_]/g, '')
|
|
38
|
-
.replace(/[\s_]+/g, '-')
|
|
39
|
-
.replace(/-+/g, '-')
|
|
40
|
-
.replace(/^-|-$/g, '');
|
|
41
|
-
return normalized;
|
|
42
|
-
}
|
|
43
|
-
export function titleFromSlug(slug) {
|
|
44
|
-
return slug
|
|
45
|
-
.split('-')
|
|
46
|
-
.filter(Boolean)
|
|
47
|
-
.map((part) => `${part[0].toUpperCase()}${part.slice(1)}`)
|
|
48
|
-
.join(' ');
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=new.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"new.utils.js","sourceRoot":"","sources":["../../src/commands/new.utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,SAAS;IACT,OAAO;IACP,QAAQ;IACR,OAAO;IACP,gBAAgB;CACV,CAAA;AAIV,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAA;IAClB,CAAC;IAED,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACtD,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IAED,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IAED,IAAK,WAAiC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,OAAO,UAAuB,CAAA;IAClC,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IAClD,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IAED,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACjC,MAAM,UAAU,GAAG,KAAK;SACnB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAE1B,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACtC,OAAO,IAAI;SACN,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
type OnboardOptions = {
|
|
2
|
-
appUrl?: string;
|
|
3
|
-
username?: string;
|
|
4
|
-
bio?: string;
|
|
5
|
-
labName?: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function getDefaultUsername(email: string): string;
|
|
8
|
-
export declare function onboardCommand(options?: OnboardOptions): Promise<void>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAUA,KAAK,cAAc,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhF"}
|
package/dist/commands/onboard.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { cancel, intro, isCancel, note, outro, text } from '@clack/prompts';
|
|
2
|
-
import { createCliLab, fetchCliLabs, fetchCliMe, updateCliMe, } from '../api/client.js';
|
|
3
|
-
import { loadSession } from '../session.js';
|
|
4
|
-
import { getAppUrl } from './login.utils.js';
|
|
5
|
-
export function getDefaultUsername(email) {
|
|
6
|
-
const localPart = email.trim().toLowerCase().split('@')[0] || 'hacker';
|
|
7
|
-
return localPart.replace(/[^a-z0-9._-]/g, '') || 'hacker';
|
|
8
|
-
}
|
|
9
|
-
export async function onboardCommand(options = {}) {
|
|
10
|
-
intro('hacklab onboarding');
|
|
11
|
-
const session = await loadSession();
|
|
12
|
-
if (!session) {
|
|
13
|
-
outro('not logged in. run `hacklab login`.');
|
|
14
|
-
process.exitCode = 1;
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
const appUrl = getAppUrl(options.appUrl || session.appUrl);
|
|
18
|
-
const me = await fetchCliMe(appUrl, session.token);
|
|
19
|
-
if (!me) {
|
|
20
|
-
outro('your cli session is invalid or expired. run `hacklab login`.');
|
|
21
|
-
process.exitCode = 1;
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
let username = options.username?.trim();
|
|
25
|
-
let bio = options.bio;
|
|
26
|
-
if (!me.name && !username) {
|
|
27
|
-
const usernameInput = await text({
|
|
28
|
-
message: 'username',
|
|
29
|
-
placeholder: getDefaultUsername(me.email),
|
|
30
|
-
});
|
|
31
|
-
if (isCancel(usernameInput)) {
|
|
32
|
-
cancel('onboarding cancelled.');
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
username = String(usernameInput).trim();
|
|
36
|
-
}
|
|
37
|
-
if (me.bio === null && bio === undefined) {
|
|
38
|
-
const bioInput = await text({
|
|
39
|
-
message: 'bio (optional)',
|
|
40
|
-
placeholder: 'builder, hacker, explorer',
|
|
41
|
-
});
|
|
42
|
-
if (isCancel(bioInput)) {
|
|
43
|
-
cancel('onboarding cancelled.');
|
|
44
|
-
process.exit(1);
|
|
45
|
-
}
|
|
46
|
-
bio = String(bioInput);
|
|
47
|
-
}
|
|
48
|
-
const shouldUpdateUsername = Boolean(username && username !== me.name);
|
|
49
|
-
const shouldUpdateBio = bio !== undefined && bio !== me.bio;
|
|
50
|
-
if (shouldUpdateUsername || shouldUpdateBio) {
|
|
51
|
-
const updated = await updateCliMe(appUrl, session.token, {
|
|
52
|
-
...(shouldUpdateUsername ? { username } : {}),
|
|
53
|
-
...(shouldUpdateBio ? { bio } : {}),
|
|
54
|
-
});
|
|
55
|
-
note(updated.name || '-', 'username');
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
note(me.name || '-', 'username');
|
|
59
|
-
}
|
|
60
|
-
let labs = await fetchCliLabs(appUrl, session.token);
|
|
61
|
-
if (labs.length === 0) {
|
|
62
|
-
let labName = options.labName?.trim();
|
|
63
|
-
if (!labName) {
|
|
64
|
-
const labNameInput = await text({
|
|
65
|
-
message: 'lab name',
|
|
66
|
-
placeholder: `${(username || me.name || 'my').trim()} lab`,
|
|
67
|
-
});
|
|
68
|
-
if (isCancel(labNameInput)) {
|
|
69
|
-
cancel('onboarding cancelled.');
|
|
70
|
-
process.exit(1);
|
|
71
|
-
}
|
|
72
|
-
labName = String(labNameInput).trim();
|
|
73
|
-
}
|
|
74
|
-
if (!labName) {
|
|
75
|
-
cancel('lab name is required.');
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
const created = await createCliLab(appUrl, session.token, {
|
|
79
|
-
name: labName,
|
|
80
|
-
});
|
|
81
|
-
note(created.lab.slug, created.created ? 'lab created' : 'lab');
|
|
82
|
-
labs = [created.lab];
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
note(labs[0].slug, 'lab');
|
|
86
|
-
}
|
|
87
|
-
const firstLab = labs[0];
|
|
88
|
-
outro([
|
|
89
|
-
'onboarding complete.',
|
|
90
|
-
`studio: ${appUrl}/studio/lab/${firstLab.slug}`,
|
|
91
|
-
].join('\n'));
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=onboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type PublishOptions = {
|
|
2
|
-
remote?: string;
|
|
3
|
-
branch?: string;
|
|
4
|
-
};
|
|
5
|
-
export declare function getGitPushArgs(options?: PublishOptions): string[];
|
|
6
|
-
export declare function publishCommand(options?: PublishOptions): Promise<void>;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAWA,KAAK,cAAc,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAOD,wBAAgB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CAiBrE;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhF"}
|
package/dist/commands/publish.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
|
-
import { cancel, intro, note, outro } from '@clack/prompts';
|
|
5
|
-
import { findRepoRoot } from '../utils/findRepoRoot.js';
|
|
6
|
-
import { pathExists } from '../utils/pathExists.js';
|
|
7
|
-
const execFileAsync = promisify(execFile);
|
|
8
|
-
function normalizeArg(value) {
|
|
9
|
-
const normalized = value?.trim();
|
|
10
|
-
return normalized ? normalized : undefined;
|
|
11
|
-
}
|
|
12
|
-
export function getGitPushArgs(options = {}) {
|
|
13
|
-
const remote = normalizeArg(options.remote);
|
|
14
|
-
const branch = normalizeArg(options.branch);
|
|
15
|
-
if (!remote && !branch) {
|
|
16
|
-
return ['push'];
|
|
17
|
-
}
|
|
18
|
-
if (!remote && branch) {
|
|
19
|
-
return ['push', 'origin', branch];
|
|
20
|
-
}
|
|
21
|
-
if (remote && !branch) {
|
|
22
|
-
return ['push', remote];
|
|
23
|
-
}
|
|
24
|
-
return ['push', remote, branch];
|
|
25
|
-
}
|
|
26
|
-
export async function publishCommand(options = {}) {
|
|
27
|
-
intro('publish hq');
|
|
28
|
-
const repoRoot = await findRepoRoot();
|
|
29
|
-
if (!(await pathExists(join(repoRoot, '.git')))) {
|
|
30
|
-
cancel('this command must be run inside a git repository.');
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
const args = getGitPushArgs(options);
|
|
34
|
-
try {
|
|
35
|
-
await execFileAsync('git', args, {
|
|
36
|
-
cwd: repoRoot,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
41
|
-
cancel(`publish failed: ${message}`);
|
|
42
|
-
process.exit(1);
|
|
43
|
-
}
|
|
44
|
-
note(`git ${args.join(' ')}`, 'pushed');
|
|
45
|
-
outro('published. hacklab will sync from github.');
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAOzC,SAAS,YAAY,CAAC,KAAc;IAChC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAChC,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAA0B,EAAE;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,MAAgB,EAAE,MAAgB,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA0B,EAAE;IAC7D,KAAK,CAAC,YAAY,CAAC,CAAA;IAEnB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IAErC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,mDAAmD,CAAC,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAEpC,IAAI,CAAC;QACD,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;YAC7B,GAAG,EAAE,QAAQ;SAChB,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,MAAM,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACvC,KAAK,CAAC,2CAA2C,CAAC,CAAA;AACtD,CAAC"}
|
package/dist/commands/tui.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
type SlashCommandDefinition = {
|
|
2
|
-
command: '/new' | '/help' | '/exit';
|
|
3
|
-
description: string;
|
|
4
|
-
};
|
|
5
|
-
export declare function parseSlashCommand(rawInput: string): {
|
|
6
|
-
command: string;
|
|
7
|
-
args: string[];
|
|
8
|
-
};
|
|
9
|
-
export declare function getSlashCommandMatches(query: string): SlashCommandDefinition[];
|
|
10
|
-
export declare function tuiCommand(): Promise<void>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAKA,KAAK,sBAAsB,GAAG;IAC1B,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;IACnC,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAiBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;CACjB,CAMA;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAQ9E;AAuDD,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA6ChD"}
|