sh3-core 0.20.2 → 0.20.3

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.
Files changed (45) hide show
  1. package/dist/BrandSlot.svelte +2 -2
  2. package/dist/actions/ctx-actions.svelte.test.js +2 -2
  3. package/dist/artifact.d.ts +2 -0
  4. package/dist/boot/satellitePayload.d.ts +2 -0
  5. package/dist/boot/satellitePayload.test.js +19 -0
  6. package/dist/build.d.ts +7 -1
  7. package/dist/build.js +22 -3
  8. package/dist/build.test.js +27 -1
  9. package/dist/createShell.js +34 -9
  10. package/dist/documents/browse.d.ts +20 -0
  11. package/dist/documents/browse.js +35 -0
  12. package/dist/documents/browse.test.js +125 -0
  13. package/dist/documents/config.d.ts +0 -4
  14. package/dist/documents/config.js +0 -8
  15. package/dist/documents/http-backend.d.ts +5 -0
  16. package/dist/documents/http-backend.js +25 -0
  17. package/dist/documents/http-backend.test.js +66 -0
  18. package/dist/documents/index.d.ts +1 -1
  19. package/dist/documents/index.js +1 -1
  20. package/dist/documents/types.d.ts +11 -0
  21. package/dist/host-entry.d.ts +1 -1
  22. package/dist/host-entry.js +1 -1
  23. package/dist/host.d.ts +1 -1
  24. package/dist/host.js +1 -1
  25. package/dist/layout/slotHostPool.svelte.js +2 -2
  26. package/dist/overlays/FloatFrame.svelte +1 -0
  27. package/dist/projects/session-state.svelte.d.ts +3 -0
  28. package/dist/projects/session-state.svelte.js +25 -0
  29. package/dist/projects/session-state.test.js +43 -2
  30. package/dist/projects-shard/ProjectsSection.svelte +14 -18
  31. package/dist/runtime/runVerb-shell.test.js +2 -2
  32. package/dist/runtime/runVerb.test.js +2 -2
  33. package/dist/sh3core-shard/appActions.js +5 -2
  34. package/dist/shards/activate-browse.test.js +2 -2
  35. package/dist/shards/activate-contributions.test.js +2 -2
  36. package/dist/shards/activate-error-isolation.test.js +3 -3
  37. package/dist/shards/activate-on-key-revoked.test.js +2 -2
  38. package/dist/shards/activate-runtime.test.js +2 -2
  39. package/dist/shards/activate.svelte.js +4 -4
  40. package/dist/shards/ctx-fetch.test.js +4 -4
  41. package/dist/shell-shard/verbs/xfer.js +13 -27
  42. package/dist/shell-shard/verbs/xfer.test.js +36 -25
  43. package/dist/version.d.ts +1 -1
  44. package/dist/version.js +1 -1
  45. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
2
  import { xferVerb } from './xfer';
3
3
  function makeDocs(overrides = {}) {
4
- return Object.assign({ listDocuments: vi.fn(async () => []), listShards: vi.fn(async () => []), watchDocuments: vi.fn(() => () => { }), transferToScope: vi.fn(async () => { }) }, overrides);
4
+ return Object.assign({ listDocuments: vi.fn(async () => []), listShards: vi.fn(async () => []), watchDocuments: vi.fn(() => () => { }), transferToScope: vi.fn(async () => { }), listDocumentsIn: vi.fn(async () => []), transferBetweenScopes: vi.fn(async () => { }) }, overrides);
5
5
  }
6
6
  function makeSh3(scope) {
7
7
  return {
@@ -32,13 +32,15 @@ describe('xfer verb', () => {
32
32
  const err = pushed.find((e) => e.kind === 'status' && e.level === 'error');
33
33
  expect(err).toBeDefined();
34
34
  });
35
- it('emits error when active scope is not a project', async () => {
35
+ it('works from personal (non-project) scope', async () => {
36
+ const transferBetweenScopes = vi.fn(async () => { });
37
+ const docs = makeDocs({ transferBetweenScopes });
36
38
  const sh3 = makeSh3(personalScope);
37
- const { ctx, pushed } = makeCtx(makeDocs(), sh3);
38
- await xferVerb.run(ctx, ['notes/draft.md', '@me:notes/draft.md']);
39
- const err = pushed.find((e) => e.kind === 'status' && e.level === 'error');
40
- expect(err).toBeDefined();
41
- expect(err.text).toMatch(/project/i);
39
+ const { ctx, pushed } = makeCtx(docs, sh3);
40
+ await xferVerb.run(ctx, ['@me:notes/draft.md', '@project-proj-abc:notes/draft.md']);
41
+ expect(transferBetweenScopes).toHaveBeenCalledWith('user-me', 'notes', 'draft.md', 'proj-abc', 'notes', 'draft.md', expect.objectContaining({ delete: true }));
42
+ const ok = pushed.find((e) => e.kind === 'status' && e.level === 'info');
43
+ expect(ok).toBeDefined();
42
44
  });
43
45
  it('emits usage error when fewer than two args', async () => {
44
46
  const sh3 = makeSh3(projectScope);
@@ -47,50 +49,59 @@ describe('xfer verb', () => {
47
49
  const err = pushed.find((e) => e.kind === 'status' && e.level === 'error');
48
50
  expect(err.text).toMatch(/usage/i);
49
51
  });
50
- it('moves (default) a doc from project to personal scope', async () => {
51
- const transferToScope = vi.fn(async () => { });
52
- const docs = makeDocs({ transferToScope });
52
+ it('moves a doc from project to personal scope', async () => {
53
+ const transferBetweenScopes = vi.fn(async () => { });
54
+ const docs = makeDocs({ transferBetweenScopes });
53
55
  const sh3 = makeSh3(projectScope);
54
56
  const { ctx, pushed } = makeCtx(docs, sh3);
55
57
  await xferVerb.run(ctx, ['@project-proj-abc:notes/draft.md', '@me:notes/draft.md']);
56
- expect(transferToScope).toHaveBeenCalledWith('notes', 'draft.md', 'user-me', expect.objectContaining({ delete: true }));
58
+ expect(transferBetweenScopes).toHaveBeenCalledWith('proj-abc', 'notes', 'draft.md', 'user-me', 'notes', 'draft.md', expect.objectContaining({ delete: true }));
57
59
  const ok = pushed.find((e) => e.kind === 'status' && e.level === 'info');
58
60
  expect(ok).toBeDefined();
59
61
  });
60
62
  it('-C flag copies without deleting source', async () => {
61
- const transferToScope = vi.fn(async () => { });
62
- const docs = makeDocs({ transferToScope });
63
+ const transferBetweenScopes = vi.fn(async () => { });
64
+ const docs = makeDocs({ transferBetweenScopes });
63
65
  const sh3 = makeSh3(projectScope);
64
66
  const { ctx } = makeCtx(docs, sh3);
65
67
  await xferVerb.run(ctx, ['-C', '@project-proj-abc:notes/draft.md', '@me:notes/draft.md']);
66
- expect(transferToScope).toHaveBeenCalledWith('notes', 'draft.md', 'user-me', expect.objectContaining({ delete: false }));
68
+ expect(transferBetweenScopes).toHaveBeenCalledWith('proj-abc', 'notes', 'draft.md', 'user-me', 'notes', 'draft.md', expect.objectContaining({ delete: false }));
67
69
  });
68
- it('rejects when src scope is not the active project (v1 limitation)', async () => {
69
- const transferToScope = vi.fn(async () => { });
70
- const docs = makeDocs({ transferToScope });
70
+ it('allows @me as source when project scope is active', async () => {
71
+ const transferBetweenScopes = vi.fn(async () => { });
72
+ const docs = makeDocs({ transferBetweenScopes });
71
73
  const sh3 = makeSh3(projectScope);
72
74
  const { ctx, pushed } = makeCtx(docs, sh3);
73
- // @me src while project is active → src tenant differs from active
74
75
  await xferVerb.run(ctx, ['@me:notes/draft.md', '@project-proj-abc:notes/draft.md']);
75
- expect(transferToScope).not.toHaveBeenCalled();
76
+ expect(transferBetweenScopes).toHaveBeenCalledWith('user-me', 'notes', 'draft.md', 'proj-abc', 'notes', 'draft.md', expect.objectContaining({ delete: true }));
77
+ const ok = pushed.find((e) => e.kind === 'status' && e.level === 'info');
78
+ expect(ok).toBeDefined();
79
+ });
80
+ it('emits error when source and destination are identical', async () => {
81
+ const transferBetweenScopes = vi.fn(async () => { });
82
+ const docs = makeDocs({ transferBetweenScopes });
83
+ const sh3 = makeSh3(projectScope);
84
+ const { ctx, pushed } = makeCtx(docs, sh3);
85
+ await xferVerb.run(ctx, ['@project-proj-abc:notes/draft.md', '@project-proj-abc:notes/draft.md']);
86
+ expect(transferBetweenScopes).not.toHaveBeenCalled();
76
87
  const err = pushed.find((e) => e.kind === 'status' && e.level === 'error');
77
- expect(err).toBeDefined();
88
+ expect(err.text).toMatch(/same/i);
78
89
  });
79
90
  it('-R flag recurses over all docs matching src prefix', async () => {
80
- const transferToScope = vi.fn(async () => { });
91
+ const transferBetweenScopes = vi.fn(async () => { });
81
92
  const allDocs = [
82
93
  { shardId: 'notes', path: 'ideas/a.md', size: 1, lastModified: 0 },
83
94
  { shardId: 'notes', path: 'ideas/b.md', size: 1, lastModified: 0 },
84
95
  { shardId: 'notes', path: 'other.md', size: 1, lastModified: 0 },
85
96
  ];
86
97
  const docs = makeDocs({
87
- transferToScope,
88
- listDocuments: vi.fn(async () => allDocs),
98
+ transferBetweenScopes,
99
+ listDocumentsIn: vi.fn(async () => allDocs),
89
100
  });
90
101
  const sh3 = makeSh3(projectScope);
91
102
  const { ctx } = makeCtx(docs, sh3);
92
103
  await xferVerb.run(ctx, ['-R', '@project-proj-abc:notes/ideas', '@me:notes/ideas']);
93
- // Only the two docs under ideas/ should be transferred
94
- expect(transferToScope).toHaveBeenCalledTimes(2);
104
+ expect(transferBetweenScopes).toHaveBeenCalledTimes(2);
105
+ expect(transferBetweenScopes).toHaveBeenCalledWith('proj-abc', 'notes', 'ideas/a.md', 'user-me', 'notes', 'ideas/a.md', expect.objectContaining({ delete: true }));
95
106
  });
96
107
  });
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Auto-generated from package.json — do not edit manually. */
2
- export declare const VERSION = "0.20.2";
2
+ export declare const VERSION = "0.20.3";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Auto-generated from package.json — do not edit manually. */
2
- export const VERSION = '0.20.2';
2
+ export const VERSION = '0.20.3';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh3-core",
3
- "version": "0.20.2",
3
+ "version": "0.20.3",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"