emdash-emit 0.1.8 → 0.1.10
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 +132 -28
- package/dist/bin/emit.d.ts.map +1 -1
- package/dist/bin/emit.js +6 -0
- package/dist/bin/emit.js.map +1 -1
- package/dist/cli/commands/conflicts.d.ts +4 -0
- package/dist/cli/commands/conflicts.d.ts.map +1 -0
- package/dist/cli/commands/conflicts.js +153 -0
- package/dist/cli/commands/conflicts.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +4 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +89 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +82 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +52 -22
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +67 -13
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +5 -0
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +119 -39
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +38 -1
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +87 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/context.d.ts +38 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +129 -16
- package/dist/cli/context.js.map +1 -1
- package/dist/client/auth.d.ts +1 -0
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +1 -0
- package/dist/client/auth.js.map +1 -1
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +27 -10
- package/dist/client/http.js.map +1 -1
- package/dist/db/cache.d.ts +3 -0
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +39 -0
- package/dist/db/cache.js.map +1 -1
- package/dist/mcp/context.d.ts +8 -0
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +91 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-errors.d.ts +16 -0
- package/dist/mcp/tool-errors.d.ts.map +1 -0
- package/dist/mcp/tool-errors.js +137 -0
- package/dist/mcp/tool-errors.js.map +1 -0
- package/dist/mcp/tools/profile.d.ts +9 -2
- package/dist/mcp/tools/profile.d.ts.map +1 -1
- package/dist/mcp/tools/profile.js +53 -36
- package/dist/mcp/tools/profile.js.map +1 -1
- package/dist/mcp/tools/sync-conflicts.d.ts +4 -0
- package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/sync-conflicts.js +100 -0
- package/dist/mcp/tools/sync-conflicts.js.map +1 -0
- package/dist/mcp/tools/sync-delete.d.ts +4 -0
- package/dist/mcp/tools/sync-delete.d.ts.map +1 -0
- package/dist/mcp/tools/sync-delete.js +77 -0
- package/dist/mcp/tools/sync-delete.js.map +1 -0
- package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
- package/dist/mcp/tools/sync-diff.js +22 -8
- package/dist/mcp/tools/sync-diff.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts +4 -0
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -0
- package/dist/mcp/tools/sync-doctor.js +57 -0
- package/dist/mcp/tools/sync-doctor.js.map +1 -0
- package/dist/mcp/tools/sync-new.d.ts.map +1 -1
- package/dist/mcp/tools/sync-new.js +49 -23
- package/dist/mcp/tools/sync-new.js.map +1 -1
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +132 -73
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +39 -33
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +103 -11
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/conflicts.d.ts +89 -0
- package/dist/sync/conflicts.d.ts.map +1 -0
- package/dist/sync/conflicts.js +374 -0
- package/dist/sync/conflicts.js.map +1 -0
- package/dist/sync/delete.d.ts +58 -0
- package/dist/sync/delete.d.ts.map +1 -0
- package/dist/sync/delete.js +221 -0
- package/dist/sync/delete.js.map +1 -0
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +6 -3
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts +31 -0
- package/dist/sync/doctor.d.ts.map +1 -0
- package/dist/sync/doctor.js +224 -0
- package/dist/sync/doctor.js.map +1 -0
- package/dist/sync/media.d.ts +22 -0
- package/dist/sync/media.d.ts.map +1 -1
- package/dist/sync/media.js +342 -94
- package/dist/sync/media.js.map +1 -1
- package/dist/sync/new.d.ts +31 -0
- package/dist/sync/new.d.ts.map +1 -1
- package/dist/sync/new.js +139 -2
- package/dist/sync/new.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +6 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +54 -27
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +29 -3
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull.d.ts +51 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +289 -58
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +12 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +69 -24
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +21 -1
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +66 -6
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts +14 -5
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +142 -9
- package/dist/sync/taxonomies.js.map +1 -1
- package/dist/utils/config.d.ts +23 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +41 -4
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +51 -2
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +234 -9
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/profile.d.ts +3 -3
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +105 -8
- package/dist/utils/profile.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2026 SPORT-SERVICE RS★R
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
* in the Software without restriction, including without limitation the rights
|
|
7
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
* furnished to do so, subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
* SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
import { deleteArticle } from '../../sync/delete.js';
|
|
23
|
+
import { ApiError } from '../../client/error.js';
|
|
24
|
+
export function registerDeleteCommand(program, resolveContext) {
|
|
25
|
+
const reportActionFailure = (error) => {
|
|
26
|
+
if (error instanceof ApiError) {
|
|
27
|
+
console.error(error.toActionableString());
|
|
28
|
+
}
|
|
29
|
+
else if (error instanceof Error) {
|
|
30
|
+
console.error(error.message);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(String(error));
|
|
34
|
+
}
|
|
35
|
+
process.exit(1);
|
|
36
|
+
};
|
|
37
|
+
program
|
|
38
|
+
.command('delete <target>')
|
|
39
|
+
.description('Safely delete an article from both local workspace and remote EmDash server')
|
|
40
|
+
.option('--allow-delete-published', 'Explicitly confirm deletion of a live published article')
|
|
41
|
+
.option('--dry-run', 'Preview deletion metadata without deleting anything')
|
|
42
|
+
.option('-y, --yes', 'Confirm deletion without interactive prompt')
|
|
43
|
+
.option('-c, --collection <collection>', 'Target collection (defaults to "posts")')
|
|
44
|
+
.option('-p, --profile <name>', 'Explicitly use a specific connection profile')
|
|
45
|
+
.action(async (target, options) => {
|
|
46
|
+
try {
|
|
47
|
+
// In non-interactive CLI environments, require --yes or treat as dry-run
|
|
48
|
+
const isDryRun = Boolean(options.dryRun || !options.yes);
|
|
49
|
+
const ctx = resolveContext(options.profile, { optionalAuth: isDryRun });
|
|
50
|
+
const collection = options.collection || ctx.config.defaultCollection;
|
|
51
|
+
const result = await deleteArticle({
|
|
52
|
+
workspaceRoot: ctx.root,
|
|
53
|
+
cache: ctx.cache,
|
|
54
|
+
filePath: target.endsWith('.md') || target.includes('/') ? target : undefined,
|
|
55
|
+
id: !target.endsWith('.md') && !target.includes('/') ? target : undefined,
|
|
56
|
+
collection,
|
|
57
|
+
allowDeletePublished: Boolean(options.allowDeletePublished),
|
|
58
|
+
dryRun: isDryRun,
|
|
59
|
+
origin: ctx.origin,
|
|
60
|
+
token: ctx.auth?.token,
|
|
61
|
+
refreshToken: ctx.auth?.refreshToken,
|
|
62
|
+
});
|
|
63
|
+
if (result.dryRun) {
|
|
64
|
+
console.log(`\n🔍 [DRY-RUN PREVIEW]`);
|
|
65
|
+
console.log(` ID: ${result.id}`);
|
|
66
|
+
console.log(` Slug: ${result.slug}`);
|
|
67
|
+
console.log(` Title: ${result.title}`);
|
|
68
|
+
console.log(` Status: ${result.status}`);
|
|
69
|
+
console.log(` File Path: ${result.filePath}`);
|
|
70
|
+
console.log(` Lines: ${result.bodyLineCount} lines`);
|
|
71
|
+
if (result.referencedMedia.length > 0) {
|
|
72
|
+
console.log(` Referenced Media (${result.referencedMedia.length} files preserved in media/):`);
|
|
73
|
+
for (const m of result.referencedMedia) {
|
|
74
|
+
console.log(` - ${m}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log(`\n⚠️ To permanently delete this article, run again with --yes:`);
|
|
78
|
+
const pubFlag = result.status === 'published' ? ' --allow-delete-published' : '';
|
|
79
|
+
console.log(` emit delete ${target}${pubFlag} --yes\n`);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log(`\n${result.message}\n`);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
reportActionFailure(error);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAgEhG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2026 SPORT-SERVICE RS★R
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
* in the Software without restriction, including without limitation the rights
|
|
7
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
* furnished to do so, subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
* SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
import { ApiError } from '../../client/error.js';
|
|
23
|
+
import { runWorkspaceDoctor } from '../../sync/doctor.js';
|
|
24
|
+
export function registerDoctorCommand(program, resolveContext) {
|
|
25
|
+
const reportActionFailure = (error) => {
|
|
26
|
+
if (error instanceof ApiError) {
|
|
27
|
+
console.error(error.toActionableString());
|
|
28
|
+
}
|
|
29
|
+
else if (error instanceof Error) {
|
|
30
|
+
console.error(`❌ Error: ${error.message}`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(`❌ Error: ${String(error)}`);
|
|
34
|
+
}
|
|
35
|
+
process.exit(1);
|
|
36
|
+
};
|
|
37
|
+
program
|
|
38
|
+
.command('doctor')
|
|
39
|
+
.description('Run comprehensive diagnostics on workspace configuration, cache, and content integrity')
|
|
40
|
+
.option('-c, --collection <collection>', 'Target collection (defaults to "posts")')
|
|
41
|
+
.option('-p, --profile <name>', 'Explicitly use a specific connection profile')
|
|
42
|
+
.action(async (options) => {
|
|
43
|
+
try {
|
|
44
|
+
const ctx = resolveContext(options.profile, { optionalAuth: true });
|
|
45
|
+
const collection = options.collection || ctx.config.defaultCollection || 'posts';
|
|
46
|
+
const report = await runWorkspaceDoctor({
|
|
47
|
+
workspaceRoot: ctx.root,
|
|
48
|
+
cache: ctx.cache,
|
|
49
|
+
config: ctx.config,
|
|
50
|
+
profileName: ctx.auth?.profileName,
|
|
51
|
+
profileOrigin: ctx.auth?.origin,
|
|
52
|
+
collection,
|
|
53
|
+
});
|
|
54
|
+
console.log(`🩺 Emit Workspace Doctor`);
|
|
55
|
+
console.log(` Workspace: ${report.workspace}`);
|
|
56
|
+
console.log(` Version: v${report.emitVersion}${report.createdWithVersion ? ` (created with v${report.createdWithVersion})` : ''}\n`);
|
|
57
|
+
for (const check of report.checks) {
|
|
58
|
+
const badge = check.status === 'ok'
|
|
59
|
+
? '✅ [PASS]'
|
|
60
|
+
: check.status === 'warning'
|
|
61
|
+
? '⚠️ [WARN]'
|
|
62
|
+
: '❌ [FAIL]';
|
|
63
|
+
console.log(` ${badge} ${check.name}: ${check.message}`);
|
|
64
|
+
}
|
|
65
|
+
console.log('');
|
|
66
|
+
if (report.overallStatus === 'healthy') {
|
|
67
|
+
console.log('🎉 Overall Status: HEALTHY — Workspace is in good condition.');
|
|
68
|
+
}
|
|
69
|
+
else if (report.overallStatus === 'warnings') {
|
|
70
|
+
console.log('⚠️ Overall Status: WARNINGS — Workspace is functional but has items to review.');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log('❌ Overall Status: ERRORS — Issues detected that need attention.');
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
reportActionFailure(err);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAqE7F"}
|
package/dist/cli/commands/new.js
CHANGED
|
@@ -19,9 +19,22 @@
|
|
|
19
19
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
20
|
* SOFTWARE.
|
|
21
21
|
*/
|
|
22
|
-
import { createArticleScaffold } from '../../sync/new.js';
|
|
22
|
+
import { createArticleScaffold, checkRemoteDuplicateSlug, DuplicateSlugError, } from '../../sync/new.js';
|
|
23
|
+
import { ApiError } from '../../client/error.js';
|
|
23
24
|
import { getLocalTaxonomiesSummary, formatTaxonomiesHint } from '../../sync/taxonomies.js';
|
|
24
25
|
export function registerNewCommand(program, resolveContext) {
|
|
26
|
+
const reportActionFailure = (error) => {
|
|
27
|
+
if (error instanceof ApiError) {
|
|
28
|
+
console.error(error.toActionableString());
|
|
29
|
+
}
|
|
30
|
+
else if (error instanceof Error) {
|
|
31
|
+
console.error(error.message);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error(String(error));
|
|
35
|
+
}
|
|
36
|
+
process.exit(1);
|
|
37
|
+
};
|
|
25
38
|
program
|
|
26
39
|
.command('new <slug>')
|
|
27
40
|
.description('Create a new draft article template with an auto-generated ULID and taxonomy hints')
|
|
@@ -30,28 +43,45 @@ export function registerNewCommand(program, resolveContext) {
|
|
|
30
43
|
.option('-l, --locale <locale>', 'Article locale (defaults to "ja")')
|
|
31
44
|
.option('-b, --byline <slug>', 'Author byline slug (defaults to first cached non-guest author by slug)')
|
|
32
45
|
.option('-p, --profile <name>', 'Explicitly use a specific connection profile')
|
|
33
|
-
.action((slug, options) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
.action(async (slug, options) => {
|
|
47
|
+
try {
|
|
48
|
+
const ctx = resolveContext(options.profile);
|
|
49
|
+
const collection = options.collection || ctx.config.defaultCollection;
|
|
50
|
+
const locale = options.locale || ctx.config.defaultLocale;
|
|
51
|
+
// Best-effort remote duplicate check if connected
|
|
52
|
+
if (ctx.origin && ctx.auth?.token) {
|
|
53
|
+
const remoteDup = await checkRemoteDuplicateSlug({
|
|
54
|
+
origin: ctx.origin,
|
|
55
|
+
token: ctx.auth.token,
|
|
56
|
+
collection,
|
|
57
|
+
slug,
|
|
58
|
+
}).catch(() => null);
|
|
59
|
+
if (remoteDup) {
|
|
60
|
+
throw new DuplicateSlugError(remoteDup);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const res = createArticleScaffold({
|
|
64
|
+
slug,
|
|
65
|
+
title: options.title,
|
|
66
|
+
collection,
|
|
67
|
+
locale,
|
|
68
|
+
byline: options.byline,
|
|
69
|
+
workspaceRoot: ctx.root,
|
|
70
|
+
cache: ctx.cache,
|
|
71
|
+
});
|
|
72
|
+
console.log(`✅ Created new article scaffold (ID: ${res.id})`);
|
|
73
|
+
console.log(` Path: ${res.filePath}`);
|
|
74
|
+
const taxSummary = getLocalTaxonomiesSummary(ctx.root);
|
|
75
|
+
const taxHint = formatTaxonomiesHint(taxSummary, { maxTags: 30 });
|
|
76
|
+
if (taxHint) {
|
|
77
|
+
console.log(`\n${taxHint}`);
|
|
78
|
+
}
|
|
79
|
+
console.log(`\nNext: Write your content in Markdown, then run:`);
|
|
80
|
+
console.log(` emit push ${res.filePath}`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
reportActionFailure(error);
|
|
52
84
|
}
|
|
53
|
-
console.log(`\nNext: Write your content in Markdown, then run:`);
|
|
54
|
-
console.log(` emit push ${res.filePath}`);
|
|
55
85
|
});
|
|
56
86
|
}
|
|
57
87
|
//# sourceMappingURL=new.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0I9D"}
|
|
@@ -21,6 +21,17 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { loadProfilesFile, setProfile, setActiveProfile, removeProfile, resolveTargetProfile, } from '../../utils/profile.js';
|
|
23
23
|
export function registerProfileCommands(program) {
|
|
24
|
+
/**
|
|
25
|
+
* Profile management is local-file work, and its failures (unknown profile name, ambiguous
|
|
26
|
+
* multi-profile resolution) are user-correctable. Report them as one actionable line with a
|
|
27
|
+
* non-zero exit instead of leaking a raw Node stack trace, matching how pull/push already
|
|
28
|
+
* format errors.
|
|
29
|
+
*/
|
|
30
|
+
const reportProfileFailure = (error) => {
|
|
31
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32
|
+
console.error(`❌ ${message}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
};
|
|
24
35
|
const profileCmd = program
|
|
25
36
|
.command('profile')
|
|
26
37
|
.description('Manage EmDash site connection profiles (multi-site support)');
|
|
@@ -58,31 +69,67 @@ export function registerProfileCommands(program) {
|
|
|
58
69
|
.option('--workspace <path>', 'Default local workspace directory for this site')
|
|
59
70
|
.option('--active', 'Set this profile as active immediately')
|
|
60
71
|
.action((name, options) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
try {
|
|
73
|
+
/**
|
|
74
|
+
* `add` doubles as "update", so unspecified options must fall back to what is already
|
|
75
|
+
* stored. Re-running `emit profile add <name> --origin <new>` used to rebuild the entry
|
|
76
|
+
* from scratch, silently wiping a stored token and the workspace link that `emit init`
|
|
77
|
+
* created - the next command then failed with "No authentication found" and directory
|
|
78
|
+
* based profile resolution broke.
|
|
79
|
+
*/
|
|
80
|
+
const existing = loadProfilesFile().profiles[name];
|
|
81
|
+
const token = options.token ?? existing?.token ?? '';
|
|
82
|
+
const workspace = options.workspace ?? existing?.workspace;
|
|
83
|
+
const profileConfig = {
|
|
84
|
+
origin: options.origin,
|
|
85
|
+
token,
|
|
86
|
+
...(workspace ? { workspace } : {}),
|
|
87
|
+
...(existing?.defaultCollection ? { defaultCollection: existing.defaultCollection } : {}),
|
|
88
|
+
...(existing?.defaultLocale ? { defaultLocale: existing.defaultLocale } : {}),
|
|
89
|
+
};
|
|
90
|
+
setProfile(name, profileConfig);
|
|
91
|
+
if (options.active) {
|
|
92
|
+
setActiveProfile(name);
|
|
93
|
+
}
|
|
94
|
+
const kept = [];
|
|
95
|
+
if (!options.token && existing?.token)
|
|
96
|
+
kept.push('token');
|
|
97
|
+
if (!options.workspace && workspace)
|
|
98
|
+
kept.push('workspace link');
|
|
99
|
+
console.log(`✅ Profile "${name}" ${existing ? 'updated' : 'configured'} successfully.` +
|
|
100
|
+
(kept.length
|
|
101
|
+
? ` Kept the existing ${kept.join(' and ')}; pass --token/--workspace to replace them.`
|
|
102
|
+
: ''));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
reportProfileFailure(error);
|
|
68
106
|
}
|
|
69
|
-
console.log(`✅ Profile "${name}" configured successfully.`);
|
|
70
107
|
});
|
|
71
108
|
// emit profile use <name>
|
|
72
109
|
profileCmd
|
|
73
110
|
.command('use <name>')
|
|
74
111
|
.description('Set active default profile')
|
|
75
112
|
.action((name) => {
|
|
76
|
-
|
|
77
|
-
|
|
113
|
+
try {
|
|
114
|
+
setActiveProfile(name);
|
|
115
|
+
console.log(`✅ Active profile set to "${name}".`);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
reportProfileFailure(error);
|
|
119
|
+
}
|
|
78
120
|
});
|
|
79
121
|
// emit profile remove <name>
|
|
80
122
|
profileCmd
|
|
81
123
|
.command('remove <name>')
|
|
82
124
|
.description('Remove a profile')
|
|
83
125
|
.action((name) => {
|
|
84
|
-
|
|
85
|
-
|
|
126
|
+
try {
|
|
127
|
+
removeProfile(name);
|
|
128
|
+
console.log(`✅ Profile "${name}" removed.`);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
reportProfileFailure(error);
|
|
132
|
+
}
|
|
86
133
|
});
|
|
87
134
|
// emit profile current
|
|
88
135
|
profileCmd
|
|
@@ -90,7 +137,14 @@ export function registerProfileCommands(program) {
|
|
|
90
137
|
.description('Show currently resolved profile and origin')
|
|
91
138
|
.option('-p, --profile <name>', 'Explicit profile name to inspect')
|
|
92
139
|
.action((options) => {
|
|
93
|
-
|
|
140
|
+
let resolved;
|
|
141
|
+
try {
|
|
142
|
+
resolved = resolveTargetProfile({ profile: options.profile });
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
reportProfileFailure(error);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
94
148
|
if (!resolved) {
|
|
95
149
|
console.log('No profile resolved (relying on environment variables or defaults).');
|
|
96
150
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/cli/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import type { CliContextResolver } from '../context.js';
|
|
3
|
+
export declare function formatPullWindowLabel(status: string | undefined, limit: number): string;
|
|
4
|
+
export declare function formatPullStatusBreakdown(status: string | undefined, items: Array<{
|
|
5
|
+
deleted?: boolean;
|
|
6
|
+
status?: string;
|
|
7
|
+
}>): string;
|
|
3
8
|
export declare function registerPullCommands(program: Command, resolveContext: CliContextResolver): void;
|
|
4
9
|
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACnD,MAAM,CAKR;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CA+T/F"}
|