@shipfox/client-projects 4.0.0 → 6.0.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.
Files changed (109) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +78 -0
  3. package/dist/chrome.d.ts.map +1 -1
  4. package/dist/chrome.js +7 -10
  5. package/dist/chrome.js.map +1 -1
  6. package/dist/components/model-provider-reminder-banner.d.ts.map +1 -1
  7. package/dist/components/model-provider-reminder-banner.js +1 -1
  8. package/dist/components/model-provider-reminder-banner.js.map +1 -1
  9. package/dist/components/source-strip.d.ts +2 -2
  10. package/dist/components/source-strip.d.ts.map +1 -1
  11. package/dist/components/source-strip.js +2 -2
  12. package/dist/components/source-strip.js.map +1 -1
  13. package/dist/core/definition.d.ts +32 -0
  14. package/dist/core/definition.d.ts.map +1 -0
  15. package/dist/core/definition.js +3 -0
  16. package/dist/core/definition.js.map +1 -0
  17. package/dist/core/project.d.ts +26 -0
  18. package/dist/core/project.d.ts.map +1 -0
  19. package/dist/core/project.js +12 -0
  20. package/dist/core/project.js.map +1 -0
  21. package/dist/feature.d.ts +8 -10
  22. package/dist/feature.d.ts.map +1 -1
  23. package/dist/feature.js +11 -22
  24. package/dist/feature.js.map +1 -1
  25. package/dist/hooks/api/definitions.d.ts +12 -88
  26. package/dist/hooks/api/definitions.d.ts.map +1 -1
  27. package/dist/hooks/api/definitions.js +18 -10
  28. package/dist/hooks/api/definitions.js.map +1 -1
  29. package/dist/hooks/api/mappers.d.ts +17 -0
  30. package/dist/hooks/api/mappers.d.ts.map +1 -0
  31. package/dist/hooks/api/mappers.js +56 -0
  32. package/dist/hooks/api/mappers.js.map +1 -0
  33. package/dist/hooks/api/projects.d.ts +19 -81
  34. package/dist/hooks/api/projects.d.ts.map +1 -1
  35. package/dist/hooks/api/projects.js +72 -18
  36. package/dist/hooks/api/projects.js.map +1 -1
  37. package/dist/index.d.ts +3 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/pages/create-project-page.d.ts.map +1 -1
  42. package/dist/pages/create-project-page.js +12 -37
  43. package/dist/pages/create-project-page.js.map +1 -1
  44. package/dist/pages/create-project-page.stories.d.ts.map +1 -1
  45. package/dist/pages/create-project-page.stories.js +4 -5
  46. package/dist/pages/create-project-page.stories.js.map +1 -1
  47. package/dist/pages/home-router.d.ts +4 -1
  48. package/dist/pages/home-router.d.ts.map +1 -1
  49. package/dist/pages/home-router.js +4 -2
  50. package/dist/pages/home-router.js.map +1 -1
  51. package/dist/pages/projects-hub-page.d.ts +3 -1
  52. package/dist/pages/projects-hub-page.d.ts.map +1 -1
  53. package/dist/pages/projects-hub-page.js +26 -30
  54. package/dist/pages/projects-hub-page.js.map +1 -1
  55. package/dist/routes/home.d.ts +3 -2
  56. package/dist/routes/home.d.ts.map +1 -1
  57. package/dist/routes/home.js +7 -2
  58. package/dist/routes/home.js.map +1 -1
  59. package/dist/routes/inputs.d.ts +6 -0
  60. package/dist/routes/inputs.d.ts.map +1 -0
  61. package/dist/routes/inputs.js +14 -0
  62. package/dist/routes/inputs.js.map +1 -0
  63. package/dist/routes/search.d.ts +5 -0
  64. package/dist/routes/search.d.ts.map +1 -0
  65. package/dist/routes/search.js +8 -0
  66. package/dist/routes/search.js.map +1 -0
  67. package/dist/tsconfig.test.tsbuildinfo +1 -1
  68. package/package.json +14 -17
  69. package/src/chrome.tsx +11 -6
  70. package/src/components/model-provider-reminder-banner.tsx +1 -3
  71. package/src/components/project-switcher.test.tsx +2 -1
  72. package/src/components/source-strip.tsx +5 -5
  73. package/src/core/definition.ts +31 -0
  74. package/src/core/project.ts +47 -0
  75. package/src/feature.ts +13 -23
  76. package/src/hooks/api/definitions.ts +54 -19
  77. package/src/hooks/api/mappers.ts +67 -0
  78. package/src/hooks/api/projects.test.ts +11 -4
  79. package/src/hooks/api/projects.ts +125 -28
  80. package/src/index.ts +10 -6
  81. package/src/pages/create-project-page.stories.tsx +7 -5
  82. package/src/pages/create-project-page.test.tsx +3 -1
  83. package/src/pages/create-project-page.tsx +16 -51
  84. package/src/pages/home-router.tsx +3 -2
  85. package/src/pages/projects-hub-page.test.tsx +13 -8
  86. package/src/pages/projects-hub-page.tsx +24 -34
  87. package/src/routes/home.tsx +6 -2
  88. package/src/routes/inputs.test.ts +14 -0
  89. package/src/routes/inputs.ts +15 -0
  90. package/src/routes/search.ts +8 -0
  91. package/test/pages.tsx +2 -17
  92. package/tsconfig.build.tsbuildinfo +1 -1
  93. package/dist/components/workspace-setup-guard.d.ts +0 -9
  94. package/dist/components/workspace-setup-guard.d.ts.map +0 -1
  95. package/dist/components/workspace-setup-guard.js +0 -160
  96. package/dist/components/workspace-setup-guard.js.map +0 -1
  97. package/dist/pages/project-workflows-page.d.ts +0 -4
  98. package/dist/pages/project-workflows-page.d.ts.map +0 -1
  99. package/dist/pages/project-workflows-page.js +0 -481
  100. package/dist/pages/project-workflows-page.js.map +0 -1
  101. package/dist/routes/workflows.d.ts +0 -5
  102. package/dist/routes/workflows.d.ts.map +0 -1
  103. package/dist/routes/workflows.js +0 -16
  104. package/dist/routes/workflows.js.map +0 -1
  105. package/src/components/workspace-setup-guard.test.tsx +0 -534
  106. package/src/components/workspace-setup-guard.tsx +0 -185
  107. package/src/pages/project-workflows-page.test.tsx +0 -258
  108. package/src/pages/project-workflows-page.tsx +0 -445
  109. package/src/routes/workflows.tsx +0 -10
@@ -1,5 +1,7 @@
1
- import { apiRequest } from '@shipfox/client-api';
2
- import { keepPreviousData, useInfiniteQuery, useQuery } from '@tanstack/react-query';
1
+ import { definitionListResponseSchema } from '@shipfox/api-definitions-dto';
2
+ import { checkedApiRequest } from '@shipfox/client-api';
3
+ import { keepPreviousData, queryOptions, useInfiniteQuery, useQuery } from '@tanstack/react-query';
4
+ import { toDefinitionList } from './mappers.js';
3
5
  export const definitionsQueryKeys = {
4
6
  all: [
5
7
  'definitions'
@@ -16,12 +18,12 @@ export async function listDefinitions({ projectId, limit = 50, cursor, signal })
16
18
  limit: String(limit)
17
19
  });
18
20
  if (cursor) params.set('cursor', cursor);
19
- return await apiRequest(`/definitions?${params.toString()}`, {
21
+ return toDefinitionList(await checkedApiRequest(definitionListResponseSchema, `/definitions?${params.toString()}`, {
20
22
  signal
21
- });
23
+ }));
22
24
  }
23
- export function useDefinitionsInfiniteQuery(projectId, limit = 50) {
24
- return useInfiniteQuery({
25
+ export function definitionsInfiniteQueryOptions(projectId, limit = 50) {
26
+ return {
25
27
  queryKey: projectId ? definitionsQueryKeys.list(projectId) : [
26
28
  ...definitionsQueryKeys.all,
27
29
  'list'
@@ -34,12 +36,12 @@ export function useDefinitionsInfiniteQuery(projectId, limit = 50) {
34
36
  cursor: pageParam,
35
37
  signal
36
38
  }),
37
- getNextPageParam: (lastPage)=>lastPage.next_cursor ?? undefined,
39
+ getNextPageParam: (lastPage)=>lastPage.nextCursor ?? undefined,
38
40
  placeholderData: keepPreviousData
39
- });
41
+ };
40
42
  }
41
- export function useDefinitionsQuery(projectId) {
42
- return useQuery({
43
+ export function definitionsQueryOptions(projectId) {
44
+ return queryOptions({
43
45
  queryKey: projectId ? definitionsQueryKeys.list(projectId) : [
44
46
  ...definitionsQueryKeys.all,
45
47
  'list'
@@ -51,5 +53,11 @@ export function useDefinitionsQuery(projectId) {
51
53
  })
52
54
  });
53
55
  }
56
+ export function useDefinitionsInfiniteQuery(projectId, limit = 50) {
57
+ return useInfiniteQuery(definitionsInfiniteQueryOptions(projectId, limit));
58
+ }
59
+ export function useDefinitionsQuery(projectId) {
60
+ return useQuery(definitionsQueryOptions(projectId));
61
+ }
54
62
 
55
63
  //# sourceMappingURL=definitions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/definitions.ts"],"sourcesContent":["import type {DefinitionListResponseDto} from '@shipfox/api-definitions-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {keepPreviousData, useInfiniteQuery, useQuery} from '@tanstack/react-query';\n\nexport const definitionsQueryKeys = {\n all: ['definitions'] as const,\n list: (projectId: string) => [...definitionsQueryKeys.all, 'list', projectId] as const,\n};\n\nexport async function listDefinitions({\n projectId,\n limit = 50,\n cursor,\n signal,\n}: {\n projectId: string;\n limit?: number;\n cursor?: string | undefined;\n signal?: AbortSignal;\n}) {\n const params = new URLSearchParams({project_id: projectId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n return await apiRequest<DefinitionListResponseDto>(`/definitions?${params.toString()}`, {\n signal,\n });\n}\n\nexport function useDefinitionsInfiniteQuery(projectId: string | undefined, limit = 50) {\n return useInfiniteQuery({\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : [...definitionsQueryKeys.all, 'list'],\n enabled: Boolean(projectId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}) =>\n listDefinitions({projectId: projectId ?? '', limit, cursor: pageParam, signal}),\n getNextPageParam: (lastPage) => lastPage.next_cursor ?? undefined,\n placeholderData: keepPreviousData,\n });\n}\n\nexport function useDefinitionsQuery(projectId: string | undefined) {\n return useQuery({\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : [...definitionsQueryKeys.all, 'list'],\n enabled: Boolean(projectId),\n queryFn: ({signal}) => listDefinitions({projectId: projectId ?? '', signal}),\n });\n}\n"],"names":["apiRequest","keepPreviousData","useInfiniteQuery","useQuery","definitionsQueryKeys","all","list","projectId","listDefinitions","limit","cursor","signal","params","URLSearchParams","project_id","String","set","toString","useDefinitionsInfiniteQuery","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","next_cursor","placeholderData","useDefinitionsQuery"],"mappings":"AACA,SAAQA,UAAU,QAAO,sBAAsB;AAC/C,SAAQC,gBAAgB,EAAEC,gBAAgB,EAAEC,QAAQ,QAAO,wBAAwB;AAEnF,OAAO,MAAMC,uBAAuB;IAClCC,KAAK;QAAC;KAAc;IACpBC,MAAM,CAACC,YAAsB;eAAIH,qBAAqBC,GAAG;YAAE;YAAQE;SAAU;AAC/E,EAAE;AAEF,OAAO,eAAeC,gBAAgB,EACpCD,SAAS,EACTE,QAAQ,EAAE,EACVC,MAAM,EACNC,MAAM,EAMP;IACC,MAAMC,SAAS,IAAIC,gBAAgB;QAACC,YAAYP;QAAWE,OAAOM,OAAON;IAAM;IAC/E,IAAIC,QAAQE,OAAOI,GAAG,CAAC,UAAUN;IACjC,OAAO,MAAMV,WAAsC,CAAC,aAAa,EAAEY,OAAOK,QAAQ,IAAI,EAAE;QACtFN;IACF;AACF;AAEA,OAAO,SAASO,4BAA4BX,SAA6B,EAAEE,QAAQ,EAAE;IACnF,OAAOP,iBAAiB;QACtBiB,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aAC1B;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QACzCe,SAASC,QAAQd;QACjBe,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAEd,MAAM,EAAC,GAC3BH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAIE;gBAAOC,QAAQe;gBAAWd;YAAM;QAC/Ee,kBAAkB,CAACC,WAAaA,SAASC,WAAW,IAAIL;QACxDM,iBAAiB5B;IACnB;AACF;AAEA,OAAO,SAAS6B,oBAAoBvB,SAA6B;IAC/D,OAAOJ,SAAS;QACdgB,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aAC1B;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QACzCe,SAASC,QAAQd;QACjBiB,SAAS,CAAC,EAACb,MAAM,EAAC,GAAKH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAII;YAAM;IAC5E;AACF"}
1
+ {"version":3,"sources":["../../../src/hooks/api/definitions.ts"],"sourcesContent":["import {definitionListResponseSchema} from '@shipfox/api-definitions-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n type InfiniteData,\n keepPreviousData,\n queryOptions,\n type UseInfiniteQueryOptions,\n type UseQueryOptions,\n useInfiniteQuery,\n useQuery,\n} from '@tanstack/react-query';\nimport type {DefinitionList} from '#core/definition.js';\nimport {toDefinitionList} from './mappers.js';\n\nexport const definitionsQueryKeys = {\n all: ['definitions'] as const,\n list: (projectId: string) => [...definitionsQueryKeys.all, 'list', projectId] as const,\n};\n\ntype DefinitionListQueryKey =\n | ReturnType<typeof definitionsQueryKeys.list>\n | readonly ['definitions', 'list'];\ntype DefinitionListInfiniteQueryOptions = UseInfiniteQueryOptions<\n DefinitionList,\n Error,\n InfiniteData<DefinitionList, string | undefined>,\n DefinitionListQueryKey,\n string | undefined\n>;\ntype DefinitionListQueryOptions = UseQueryOptions<\n DefinitionList,\n Error,\n DefinitionList,\n DefinitionListQueryKey\n>;\nexport async function listDefinitions({\n projectId,\n limit = 50,\n cursor,\n signal,\n}: {\n projectId: string;\n limit?: number;\n cursor?: string | undefined;\n signal?: AbortSignal | undefined;\n}): Promise<DefinitionList> {\n const params = new URLSearchParams({project_id: projectId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n return toDefinitionList(\n await checkedApiRequest(definitionListResponseSchema, `/definitions?${params.toString()}`, {\n signal,\n }),\n );\n}\nexport function definitionsInfiniteQueryOptions(\n projectId: string | undefined,\n limit = 50,\n): DefinitionListInfiniteQueryOptions {\n return {\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : ([...definitionsQueryKeys.all, 'list'] as const),\n enabled: Boolean(projectId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}: {pageParam: string | undefined; signal: AbortSignal}) =>\n listDefinitions({projectId: projectId ?? '', limit, cursor: pageParam, signal}),\n getNextPageParam: (lastPage: DefinitionList) => lastPage.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n };\n}\nexport function definitionsQueryOptions(projectId: string | undefined): DefinitionListQueryOptions {\n return queryOptions({\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : ([...definitionsQueryKeys.all, 'list'] as const),\n enabled: Boolean(projectId),\n queryFn: ({signal}) => listDefinitions({projectId: projectId ?? '', signal}),\n });\n}\nexport function useDefinitionsInfiniteQuery(projectId: string | undefined, limit = 50) {\n return useInfiniteQuery(definitionsInfiniteQueryOptions(projectId, limit));\n}\nexport function useDefinitionsQuery(projectId: string | undefined) {\n return useQuery(definitionsQueryOptions(projectId));\n}\n"],"names":["definitionListResponseSchema","checkedApiRequest","keepPreviousData","queryOptions","useInfiniteQuery","useQuery","toDefinitionList","definitionsQueryKeys","all","list","projectId","listDefinitions","limit","cursor","signal","params","URLSearchParams","project_id","String","set","toString","definitionsInfiniteQueryOptions","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","nextCursor","placeholderData","definitionsQueryOptions","useDefinitionsInfiniteQuery","useDefinitionsQuery"],"mappings":"AAAA,SAAQA,4BAA4B,QAAO,+BAA+B;AAC1E,SAAQC,iBAAiB,QAAO,sBAAsB;AACtD,SAEEC,gBAAgB,EAChBC,YAAY,EAGZC,gBAAgB,EAChBC,QAAQ,QACH,wBAAwB;AAE/B,SAAQC,gBAAgB,QAAO,eAAe;AAE9C,OAAO,MAAMC,uBAAuB;IAClCC,KAAK;QAAC;KAAc;IACpBC,MAAM,CAACC,YAAsB;eAAIH,qBAAqBC,GAAG;YAAE;YAAQE;SAAU;AAC/E,EAAE;AAkBF,OAAO,eAAeC,gBAAgB,EACpCD,SAAS,EACTE,QAAQ,EAAE,EACVC,MAAM,EACNC,MAAM,EAMP;IACC,MAAMC,SAAS,IAAIC,gBAAgB;QAACC,YAAYP;QAAWE,OAAOM,OAAON;IAAM;IAC/E,IAAIC,QAAQE,OAAOI,GAAG,CAAC,UAAUN;IACjC,OAAOP,iBACL,MAAML,kBAAkBD,8BAA8B,CAAC,aAAa,EAAEe,OAAOK,QAAQ,IAAI,EAAE;QACzFN;IACF;AAEJ;AACA,OAAO,SAASO,gCACdX,SAA6B,EAC7BE,QAAQ,EAAE;IAEV,OAAO;QACLU,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aACzB;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QAC1Ce,SAASC,QAAQd;QACjBe,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAEd,MAAM,EAAuD,GACjFH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAIE;gBAAOC,QAAQe;gBAAWd;YAAM;QAC/Ee,kBAAkB,CAACC,WAA6BA,SAASC,UAAU,IAAIL;QACvEM,iBAAiB9B;IACnB;AACF;AACA,OAAO,SAAS+B,wBAAwBvB,SAA6B;IACnE,OAAOP,aAAa;QAClBmB,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aACzB;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QAC1Ce,SAASC,QAAQd;QACjBiB,SAAS,CAAC,EAACb,MAAM,EAAC,GAAKH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAII;YAAM;IAC5E;AACF;AACA,OAAO,SAASoB,4BAA4BxB,SAA6B,EAAEE,QAAQ,EAAE;IACnF,OAAOR,iBAAiBiB,gCAAgCX,WAAWE;AACrE;AACA,OAAO,SAASuB,oBAAoBzB,SAA6B;IAC/D,OAAOL,SAAS4B,wBAAwBvB;AAC1C"}
@@ -0,0 +1,17 @@
1
+ import type { DefinitionDto, DefinitionSyncSummaryDto } from '@shipfox/api-definitions-dto';
2
+ import type { ProjectResponseDto } from '@shipfox/api-projects-dto';
3
+ import type { Definition, DefinitionList, DefinitionSyncSummary } from '#core/definition.js';
4
+ import type { Project, ProjectList } from '#core/project.js';
5
+ export declare function toProject(dto: ProjectResponseDto): Project;
6
+ export declare function toProjectList(dto: {
7
+ projects: ProjectResponseDto[];
8
+ next_cursor: string | null;
9
+ }): ProjectList;
10
+ export declare function toDefinition(dto: DefinitionDto): Definition;
11
+ export declare function toDefinitionSyncSummary(dto: DefinitionSyncSummaryDto): DefinitionSyncSummary;
12
+ export declare function toDefinitionList(dto: {
13
+ definitions: DefinitionDto[];
14
+ sync: DefinitionSyncSummaryDto | null;
15
+ next_cursor: string | null;
16
+ }): DefinitionList;
17
+ //# sourceMappingURL=mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,wBAAwB,EAAC,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC3F,OAAO,KAAK,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE3D,wBAAgB,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAY1D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,WAAW,CAEd;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAgB3D;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAU5F;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,IAAI,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,cAAc,CAMjB"}
@@ -0,0 +1,56 @@
1
+ export function toProject(dto) {
2
+ return {
3
+ id: dto.id,
4
+ workspaceId: dto.workspace_id,
5
+ name: dto.name,
6
+ source: {
7
+ connectionId: dto.source.connection_id,
8
+ externalRepositoryId: dto.source.external_repository_id
9
+ },
10
+ createdAt: dto.created_at,
11
+ updatedAt: dto.updated_at
12
+ };
13
+ }
14
+ export function toProjectList(dto) {
15
+ return {
16
+ projects: dto.projects.map(toProject),
17
+ nextCursor: dto.next_cursor
18
+ };
19
+ }
20
+ export function toDefinition(dto) {
21
+ return {
22
+ id: dto.id,
23
+ projectId: dto.project_id,
24
+ configPath: dto.config_path,
25
+ source: dto.source,
26
+ sha: dto.sha,
27
+ ref: dto.ref,
28
+ name: dto.name,
29
+ workflowDocument: dto.workflow_document,
30
+ workflowModel: dto.workflow_model,
31
+ manualTrigger: dto.manual_trigger,
32
+ fetchedAt: dto.fetched_at,
33
+ createdAt: dto.created_at,
34
+ updatedAt: dto.updated_at
35
+ };
36
+ }
37
+ export function toDefinitionSyncSummary(dto) {
38
+ return {
39
+ ref: dto.ref,
40
+ status: dto.status,
41
+ lastSyncAt: dto.last_sync_at,
42
+ startedAt: dto.started_at,
43
+ finishedAt: dto.finished_at,
44
+ lastErrorCode: dto.last_error_code,
45
+ lastErrorMessage: dto.last_error_message
46
+ };
47
+ }
48
+ export function toDefinitionList(dto) {
49
+ return {
50
+ definitions: dto.definitions.map(toDefinition),
51
+ sync: dto.sync && toDefinitionSyncSummary(dto.sync),
52
+ nextCursor: dto.next_cursor
53
+ };
54
+ }
55
+
56
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/api/mappers.ts"],"sourcesContent":["import type {DefinitionDto, DefinitionSyncSummaryDto} from '@shipfox/api-definitions-dto';\nimport type {ProjectResponseDto} from '@shipfox/api-projects-dto';\nimport type {Definition, DefinitionList, DefinitionSyncSummary} from '#core/definition.js';\nimport type {Project, ProjectList} from '#core/project.js';\n\nexport function toProject(dto: ProjectResponseDto): Project {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n source: {\n connectionId: dto.source.connection_id,\n externalRepositoryId: dto.source.external_repository_id,\n },\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toProjectList(dto: {\n projects: ProjectResponseDto[];\n next_cursor: string | null;\n}): ProjectList {\n return {projects: dto.projects.map(toProject), nextCursor: dto.next_cursor};\n}\n\nexport function toDefinition(dto: DefinitionDto): Definition {\n return {\n id: dto.id,\n projectId: dto.project_id,\n configPath: dto.config_path,\n source: dto.source,\n sha: dto.sha,\n ref: dto.ref,\n name: dto.name,\n workflowDocument: dto.workflow_document,\n workflowModel: dto.workflow_model,\n manualTrigger: dto.manual_trigger,\n fetchedAt: dto.fetched_at,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toDefinitionSyncSummary(dto: DefinitionSyncSummaryDto): DefinitionSyncSummary {\n return {\n ref: dto.ref,\n status: dto.status,\n lastSyncAt: dto.last_sync_at,\n startedAt: dto.started_at,\n finishedAt: dto.finished_at,\n lastErrorCode: dto.last_error_code,\n lastErrorMessage: dto.last_error_message,\n };\n}\n\nexport function toDefinitionList(dto: {\n definitions: DefinitionDto[];\n sync: DefinitionSyncSummaryDto | null;\n next_cursor: string | null;\n}): DefinitionList {\n return {\n definitions: dto.definitions.map(toDefinition),\n sync: dto.sync && toDefinitionSyncSummary(dto.sync),\n nextCursor: dto.next_cursor,\n };\n}\n"],"names":["toProject","dto","id","workspaceId","workspace_id","name","source","connectionId","connection_id","externalRepositoryId","external_repository_id","createdAt","created_at","updatedAt","updated_at","toProjectList","projects","map","nextCursor","next_cursor","toDefinition","projectId","project_id","configPath","config_path","sha","ref","workflowDocument","workflow_document","workflowModel","workflow_model","manualTrigger","manual_trigger","fetchedAt","fetched_at","toDefinitionSyncSummary","status","lastSyncAt","last_sync_at","startedAt","started_at","finishedAt","finished_at","lastErrorCode","last_error_code","lastErrorMessage","last_error_message","toDefinitionList","definitions","sync"],"mappings":"AAKA,OAAO,SAASA,UAAUC,GAAuB;IAC/C,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVC,aAAaF,IAAIG,YAAY;QAC7BC,MAAMJ,IAAII,IAAI;QACdC,QAAQ;YACNC,cAAcN,IAAIK,MAAM,CAACE,aAAa;YACtCC,sBAAsBR,IAAIK,MAAM,CAACI,sBAAsB;QACzD;QACAC,WAAWV,IAAIW,UAAU;QACzBC,WAAWZ,IAAIa,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,cAAcd,GAG7B;IACC,OAAO;QAACe,UAAUf,IAAIe,QAAQ,CAACC,GAAG,CAACjB;QAAYkB,YAAYjB,IAAIkB,WAAW;IAAA;AAC5E;AAEA,OAAO,SAASC,aAAanB,GAAkB;IAC7C,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVmB,WAAWpB,IAAIqB,UAAU;QACzBC,YAAYtB,IAAIuB,WAAW;QAC3BlB,QAAQL,IAAIK,MAAM;QAClBmB,KAAKxB,IAAIwB,GAAG;QACZC,KAAKzB,IAAIyB,GAAG;QACZrB,MAAMJ,IAAII,IAAI;QACdsB,kBAAkB1B,IAAI2B,iBAAiB;QACvCC,eAAe5B,IAAI6B,cAAc;QACjCC,eAAe9B,IAAI+B,cAAc;QACjCC,WAAWhC,IAAIiC,UAAU;QACzBvB,WAAWV,IAAIW,UAAU;QACzBC,WAAWZ,IAAIa,UAAU;IAC3B;AACF;AAEA,OAAO,SAASqB,wBAAwBlC,GAA6B;IACnE,OAAO;QACLyB,KAAKzB,IAAIyB,GAAG;QACZU,QAAQnC,IAAImC,MAAM;QAClBC,YAAYpC,IAAIqC,YAAY;QAC5BC,WAAWtC,IAAIuC,UAAU;QACzBC,YAAYxC,IAAIyC,WAAW;QAC3BC,eAAe1C,IAAI2C,eAAe;QAClCC,kBAAkB5C,IAAI6C,kBAAkB;IAC1C;AACF;AAEA,OAAO,SAASC,iBAAiB9C,GAIhC;IACC,OAAO;QACL+C,aAAa/C,IAAI+C,WAAW,CAAC/B,GAAG,CAACG;QACjC6B,MAAMhD,IAAIgD,IAAI,IAAId,wBAAwBlC,IAAIgD,IAAI;QAClD/B,YAAYjB,IAAIkB,WAAW;IAC7B;AACF"}
@@ -1,93 +1,31 @@
1
- import type { CreateProjectBodyDto } from '@shipfox/api-projects-dto';
1
+ import { type InfiniteData, type UseInfiniteQueryOptions, type UseQueryOptions } from '@tanstack/react-query';
2
+ import type { CreateProjectCommand, Project, ProjectList } from '#core/project.js';
2
3
  export declare const projectsQueryKeys: {
3
4
  all: readonly ["projects"];
4
5
  list: (workspaceId: string, search?: string) => readonly ["projects", "list", string, string];
5
6
  exists: (workspaceId: string) => readonly ["projects", "exists", string];
6
7
  detail: (projectId: string) => readonly ["projects", "detail", string];
7
8
  };
9
+ type ProjectListQueryKey = ReturnType<typeof projectsQueryKeys.list> | readonly ['projects', 'list'];
10
+ type ProjectExistenceQueryKey = ReturnType<typeof projectsQueryKeys.exists> | readonly ['projects', 'exists'];
11
+ type ProjectDetailQueryKey = ReturnType<typeof projectsQueryKeys.detail> | readonly ['projects', 'detail'];
12
+ type ProjectListInfiniteQueryOptions = UseInfiniteQueryOptions<ProjectList, Error, InfiniteData<ProjectList, string | undefined>, ProjectListQueryKey, string | undefined>;
13
+ type ProjectExistenceQueryOptions = UseQueryOptions<ProjectList, Error, ProjectList, ProjectExistenceQueryKey>;
14
+ type ProjectDetailQueryOptions = UseQueryOptions<Project, Error, Project, ProjectDetailQueryKey>;
8
15
  export declare function listProjects({ workspaceId, limit, cursor, search, signal, }: {
9
16
  workspaceId: string;
10
17
  limit?: number;
11
18
  cursor?: string | undefined;
12
19
  search?: string | undefined;
13
- signal?: AbortSignal;
14
- }): Promise<{
15
- projects: {
16
- id: string;
17
- workspace_id: string;
18
- name: string;
19
- source: {
20
- connection_id: string;
21
- external_repository_id: string;
22
- };
23
- created_at: string;
24
- updated_at: string;
25
- }[];
26
- next_cursor: string | null;
27
- }>;
28
- export declare function getProject(projectId: string): Promise<{
29
- id: string;
30
- workspace_id: string;
31
- name: string;
32
- source: {
33
- connection_id: string;
34
- external_repository_id: string;
35
- };
36
- created_at: string;
37
- updated_at: string;
38
- }>;
39
- export declare function createProject(body: CreateProjectBodyDto): Promise<{
40
- id: string;
41
- workspace_id: string;
42
- name: string;
43
- source: {
44
- connection_id: string;
45
- external_repository_id: string;
46
- };
47
- created_at: string;
48
- updated_at: string;
49
- }>;
50
- export declare function useProjectsInfiniteQuery(workspaceId: string | undefined, search?: string, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
51
- projects: {
52
- id: string;
53
- workspace_id: string;
54
- name: string;
55
- source: {
56
- connection_id: string;
57
- external_repository_id: string;
58
- };
59
- created_at: string;
60
- updated_at: string;
61
- }[];
62
- next_cursor: string | null;
63
- }, unknown>, Error>;
64
- export declare function useProjectQuery(projectId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
65
- id: string;
66
- workspace_id: string;
67
- name: string;
68
- source: {
69
- connection_id: string;
70
- external_repository_id: string;
71
- };
72
- created_at: string;
73
- updated_at: string;
74
- }>, Error>;
75
- export declare function useCreateProjectMutation(): import("@tanstack/react-query").UseMutationResult<{
76
- id: string;
77
- workspace_id: string;
78
- name: string;
79
- source: {
80
- connection_id: string;
81
- external_repository_id: string;
82
- };
83
- created_at: string;
84
- updated_at: string;
85
- }, Error, {
86
- workspace_id: string;
87
- name: string;
88
- source: {
89
- connection_id: string;
90
- external_repository_id: string;
91
- };
92
- }, unknown>;
20
+ signal?: AbortSignal | undefined;
21
+ }): Promise<ProjectList>;
22
+ export declare function getProject(projectId: string): Promise<Project>;
23
+ export declare function createProject(command: CreateProjectCommand): Promise<Project>;
24
+ export declare function projectsInfiniteQueryOptions(workspaceId: string | undefined, search?: string, limit?: number): ProjectListInfiniteQueryOptions;
25
+ export declare function projectExistenceQueryOptions(workspaceId: string | undefined): ProjectExistenceQueryOptions;
26
+ export declare function projectQueryOptions(projectId: string | undefined): ProjectDetailQueryOptions;
27
+ export declare function useProjectsInfiniteQuery(workspaceId: string | undefined, search?: string, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<InfiniteData<ProjectList, string | undefined>, Error>;
28
+ export declare function useProjectQuery(projectId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<Project>, Error>;
29
+ export declare function useCreateProjectMutation(): import("@tanstack/react-query").UseMutationResult<Project, Error, CreateProjectCommand, unknown>;
30
+ export {};
93
31
  //# sourceMappingURL=projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,iBAAiB;;wBAER,MAAM,WAAW,MAAM;0BAErB,MAAM;wBACR,MAAM;CAC3B,CAAC;AAEF,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,KAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;;;;;;;;;;;;;GAMA;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;GAEjD;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;;;GAE7D;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,SAAK;;;;;;;;;;;;;oBAaX;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;WAQ5D;AAED,wBAAgB,wBAAwB;;;;;;;;;;;;;;;;;YAEvC"}
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/projects.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAGjF,eAAO,MAAM,iBAAiB;;wBAER,MAAM;0BAEJ,MAAM;wBACR,MAAM;CAC3B,CAAC;AAEF,KAAK,mBAAmB,GACpB,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GACzC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAClC,KAAK,wBAAwB,GACzB,UAAU,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,GAC3C,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC,KAAK,qBAAqB,GACtB,UAAU,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,GAC3C,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEpC,KAAK,+BAA+B,GAAG,uBAAuB,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,mBAAmB,EACnB,MAAM,GAAG,SAAS,CACnB,CAAC;AACF,KAAK,4BAA4B,GAAG,eAAe,CACjD,WAAW,EACX,KAAK,EACL,WAAW,EACX,wBAAwB,CACzB,CAAC;AACF,KAAK,yBAAyB,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAEjG,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,KAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,GAAG,OAAO,CAAC,WAAW,CAAC,CAOvB;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYnF;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,SAAK,GACT,+BAA+B,CAmBjC;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,4BAA4B,CAS9B;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,yBAAyB,CAQ5F;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,SAAK,gHAGX;AACD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,2EAE5D;AAED,wBAAgB,wBAAwB,qGAoBvC"}
@@ -1,14 +1,16 @@
1
- import { apiRequest } from '@shipfox/client-api';
2
- import { keepPreviousData, useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
1
+ import { createProjectBodySchema, listProjectsResponseSchema, projectResponseSchema } from '@shipfox/api-projects-dto';
2
+ import { checkedApiRequest } from '@shipfox/client-api';
3
+ import { keepPreviousData, queryOptions, useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
4
+ import { toProject, toProjectList } from './mappers.js';
3
5
  export const projectsQueryKeys = {
4
6
  all: [
5
7
  'projects'
6
8
  ],
7
- list: (workspaceId, search)=>[
9
+ list: (workspaceId, search = '')=>[
8
10
  ...projectsQueryKeys.all,
9
11
  'list',
10
12
  workspaceId,
11
- search ?? ''
13
+ search
12
14
  ],
13
15
  exists: (workspaceId)=>[
14
16
  ...projectsQueryKeys.all,
@@ -28,22 +30,31 @@ export async function listProjects({ workspaceId, limit = 50, cursor, search, si
28
30
  });
29
31
  if (cursor) params.set('cursor', cursor);
30
32
  if (search) params.set('search', search);
31
- return await apiRequest(`/projects?${params.toString()}`, {
33
+ return toProjectList(await checkedApiRequest(listProjectsResponseSchema, `/projects?${params.toString()}`, {
32
34
  signal
33
- });
35
+ }));
34
36
  }
35
37
  export async function getProject(projectId) {
36
- return await apiRequest(`/projects/${projectId}`);
38
+ return toProject(await checkedApiRequest(projectResponseSchema, `/projects/${projectId}`));
37
39
  }
38
- export async function createProject(body) {
39
- return await apiRequest('/projects', {
40
+ export async function createProject(command) {
41
+ const body = createProjectBodySchema.parse({
42
+ workspace_id: command.workspaceId,
43
+ name: command.name,
44
+ source: {
45
+ connection_id: command.source.connectionId,
46
+ external_repository_id: command.source.externalRepositoryId
47
+ }
48
+ });
49
+ return toProject(await checkedApiRequest(projectResponseSchema, '/projects', {
40
50
  method: 'POST',
41
51
  body
42
- });
52
+ }));
43
53
  }
44
- export function useProjectsInfiniteQuery(workspaceId, search, limit = 50) {
45
- return useInfiniteQuery({
46
- queryKey: workspaceId ? projectsQueryKeys.list(workspaceId, search) : [
54
+ export function projectsInfiniteQueryOptions(workspaceId, search, limit = 50) {
55
+ const normalizedSearch = search?.trim() ?? '';
56
+ return {
57
+ queryKey: workspaceId ? projectsQueryKeys.list(workspaceId, normalizedSearch) : [
47
58
  ...projectsQueryKeys.all,
48
59
  'list'
49
60
  ],
@@ -53,15 +64,30 @@ export function useProjectsInfiniteQuery(workspaceId, search, limit = 50) {
53
64
  workspaceId: workspaceId ?? '',
54
65
  limit,
55
66
  cursor: pageParam,
56
- search,
67
+ search: normalizedSearch || undefined,
57
68
  signal
58
69
  }),
59
- getNextPageParam: (lastPage)=>lastPage.next_cursor ?? undefined,
70
+ getNextPageParam: (lastPage)=>lastPage.nextCursor ?? undefined,
60
71
  placeholderData: keepPreviousData
72
+ };
73
+ }
74
+ export function projectExistenceQueryOptions(workspaceId) {
75
+ return queryOptions({
76
+ queryKey: workspaceId ? projectsQueryKeys.exists(workspaceId) : [
77
+ ...projectsQueryKeys.all,
78
+ 'exists'
79
+ ],
80
+ enabled: Boolean(workspaceId),
81
+ queryFn: ({ signal })=>listProjects({
82
+ workspaceId: workspaceId ?? '',
83
+ limit: 1,
84
+ signal
85
+ }),
86
+ staleTime: 30_000
61
87
  });
62
88
  }
63
- export function useProjectQuery(projectId) {
64
- return useQuery({
89
+ export function projectQueryOptions(projectId) {
90
+ return queryOptions({
65
91
  queryKey: projectId ? projectsQueryKeys.detail(projectId) : [
66
92
  ...projectsQueryKeys.all,
67
93
  'detail'
@@ -70,9 +96,37 @@ export function useProjectQuery(projectId) {
70
96
  queryFn: ()=>getProject(projectId ?? '')
71
97
  });
72
98
  }
99
+ export function useProjectsInfiniteQuery(workspaceId, search, limit = 50) {
100
+ return useInfiniteQuery(projectsInfiniteQueryOptions(workspaceId, search, limit));
101
+ }
102
+ export function useProjectQuery(projectId) {
103
+ return useQuery(projectQueryOptions(projectId));
104
+ }
73
105
  export function useCreateProjectMutation() {
106
+ const queryClient = useQueryClient();
74
107
  return useMutation({
75
- mutationFn: createProject
108
+ mutationFn: createProject,
109
+ onSuccess: async (project)=>{
110
+ queryClient.setQueryData(projectsQueryKeys.detail(project.id), project);
111
+ queryClient.setQueryData(projectsQueryKeys.exists(project.workspaceId), {
112
+ projects: [
113
+ project
114
+ ],
115
+ nextCursor: null
116
+ });
117
+ await queryClient.invalidateQueries({
118
+ queryKey: projectsQueryKeys.list(project.workspaceId)
119
+ });
120
+ },
121
+ onError: async (_error, command)=>{
122
+ await queryClient.invalidateQueries({
123
+ queryKey: projectsQueryKeys.exists(command.workspaceId),
124
+ refetchType: 'active'
125
+ });
126
+ await queryClient.invalidateQueries({
127
+ queryKey: projectsQueryKeys.list(command.workspaceId)
128
+ });
129
+ }
76
130
  });
77
131
  }
78
132
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/api/projects.ts"],"sourcesContent":["import type {\n CreateProjectBodyDto,\n ListProjectsResponseDto,\n ProjectResponseDto,\n} from '@shipfox/api-projects-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {keepPreviousData, useInfiniteQuery, useMutation, useQuery} from '@tanstack/react-query';\n\nexport const projectsQueryKeys = {\n all: ['projects'] as const,\n list: (workspaceId: string, search?: string) =>\n [...projectsQueryKeys.all, 'list', workspaceId, search ?? ''] as const,\n exists: (workspaceId: string) => [...projectsQueryKeys.all, 'exists', workspaceId] as const,\n detail: (projectId: string) => [...projectsQueryKeys.all, 'detail', projectId] as const,\n};\n\nexport async function listProjects({\n workspaceId,\n limit = 50,\n cursor,\n search,\n signal,\n}: {\n workspaceId: string;\n limit?: number;\n cursor?: string | undefined;\n search?: string | undefined;\n signal?: AbortSignal;\n}) {\n const params = new URLSearchParams({workspace_id: workspaceId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n if (search) params.set('search', search);\n\n return await apiRequest<ListProjectsResponseDto>(`/projects?${params.toString()}`, {signal});\n}\n\nexport async function getProject(projectId: string) {\n return await apiRequest<ProjectResponseDto>(`/projects/${projectId}`);\n}\n\nexport async function createProject(body: CreateProjectBodyDto) {\n return await apiRequest<ProjectResponseDto>('/projects', {method: 'POST', body});\n}\n\nexport function useProjectsInfiniteQuery(\n workspaceId: string | undefined,\n search?: string,\n limit = 50,\n) {\n return useInfiniteQuery({\n queryKey: workspaceId\n ? projectsQueryKeys.list(workspaceId, search)\n : [...projectsQueryKeys.all, 'list'],\n enabled: Boolean(workspaceId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}) =>\n listProjects({workspaceId: workspaceId ?? '', limit, cursor: pageParam, search, signal}),\n getNextPageParam: (lastPage) => lastPage.next_cursor ?? undefined,\n placeholderData: keepPreviousData,\n });\n}\n\nexport function useProjectQuery(projectId: string | undefined) {\n return useQuery({\n queryKey: projectId\n ? projectsQueryKeys.detail(projectId)\n : [...projectsQueryKeys.all, 'detail'],\n enabled: Boolean(projectId),\n queryFn: () => getProject(projectId ?? ''),\n });\n}\n\nexport function useCreateProjectMutation() {\n return useMutation({mutationFn: createProject});\n}\n"],"names":["apiRequest","keepPreviousData","useInfiniteQuery","useMutation","useQuery","projectsQueryKeys","all","list","workspaceId","search","exists","detail","projectId","listProjects","limit","cursor","signal","params","URLSearchParams","workspace_id","String","set","toString","getProject","createProject","body","method","useProjectsInfiniteQuery","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","next_cursor","placeholderData","useProjectQuery","useCreateProjectMutation","mutationFn"],"mappings":"AAKA,SAAQA,UAAU,QAAO,sBAAsB;AAC/C,SAAQC,gBAAgB,EAAEC,gBAAgB,EAAEC,WAAW,EAAEC,QAAQ,QAAO,wBAAwB;AAEhG,OAAO,MAAMC,oBAAoB;IAC/BC,KAAK;QAAC;KAAW;IACjBC,MAAM,CAACC,aAAqBC,SAC1B;eAAIJ,kBAAkBC,GAAG;YAAE;YAAQE;YAAaC,UAAU;SAAG;IAC/DC,QAAQ,CAACF,cAAwB;eAAIH,kBAAkBC,GAAG;YAAE;YAAUE;SAAY;IAClFG,QAAQ,CAACC,YAAsB;eAAIP,kBAAkBC,GAAG;YAAE;YAAUM;SAAU;AAChF,EAAE;AAEF,OAAO,eAAeC,aAAa,EACjCL,WAAW,EACXM,QAAQ,EAAE,EACVC,MAAM,EACNN,MAAM,EACNO,MAAM,EAOP;IACC,MAAMC,SAAS,IAAIC,gBAAgB;QAACC,cAAcX;QAAaM,OAAOM,OAAON;IAAM;IACnF,IAAIC,QAAQE,OAAOI,GAAG,CAAC,UAAUN;IACjC,IAAIN,QAAQQ,OAAOI,GAAG,CAAC,UAAUZ;IAEjC,OAAO,MAAMT,WAAoC,CAAC,UAAU,EAAEiB,OAAOK,QAAQ,IAAI,EAAE;QAACN;IAAM;AAC5F;AAEA,OAAO,eAAeO,WAAWX,SAAiB;IAChD,OAAO,MAAMZ,WAA+B,CAAC,UAAU,EAAEY,WAAW;AACtE;AAEA,OAAO,eAAeY,cAAcC,IAA0B;IAC5D,OAAO,MAAMzB,WAA+B,aAAa;QAAC0B,QAAQ;QAAQD;IAAI;AAChF;AAEA,OAAO,SAASE,yBACdnB,WAA+B,EAC/BC,MAAe,EACfK,QAAQ,EAAE;IAEV,OAAOZ,iBAAiB;QACtB0B,UAAUpB,cACNH,kBAAkBE,IAAI,CAACC,aAAaC,UACpC;eAAIJ,kBAAkBC,GAAG;YAAE;SAAO;QACtCuB,SAASC,QAAQtB;QACjBuB,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAElB,MAAM,EAAC,GAC3BH,aAAa;gBAACL,aAAaA,eAAe;gBAAIM;gBAAOC,QAAQmB;gBAAWzB;gBAAQO;YAAM;QACxFmB,kBAAkB,CAACC,WAAaA,SAASC,WAAW,IAAIL;QACxDM,iBAAiBrC;IACnB;AACF;AAEA,OAAO,SAASsC,gBAAgB3B,SAA6B;IAC3D,OAAOR,SAAS;QACdwB,UAAUhB,YACNP,kBAAkBM,MAAM,CAACC,aACzB;eAAIP,kBAAkBC,GAAG;YAAE;SAAS;QACxCuB,SAASC,QAAQlB;QACjBqB,SAAS,IAAMV,WAAWX,aAAa;IACzC;AACF;AAEA,OAAO,SAAS4B;IACd,OAAOrC,YAAY;QAACsC,YAAYjB;IAAa;AAC/C"}
1
+ {"version":3,"sources":["../../../src/hooks/api/projects.ts"],"sourcesContent":["import {\n createProjectBodySchema,\n listProjectsResponseSchema,\n projectResponseSchema,\n} from '@shipfox/api-projects-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n type InfiniteData,\n keepPreviousData,\n queryOptions,\n type UseInfiniteQueryOptions,\n type UseQueryOptions,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport type {CreateProjectCommand, Project, ProjectList} from '#core/project.js';\nimport {toProject, toProjectList} from './mappers.js';\n\nexport const projectsQueryKeys = {\n all: ['projects'] as const,\n list: (workspaceId: string, search = '') =>\n [...projectsQueryKeys.all, 'list', workspaceId, search] as const,\n exists: (workspaceId: string) => [...projectsQueryKeys.all, 'exists', workspaceId] as const,\n detail: (projectId: string) => [...projectsQueryKeys.all, 'detail', projectId] as const,\n};\n\ntype ProjectListQueryKey =\n | ReturnType<typeof projectsQueryKeys.list>\n | readonly ['projects', 'list'];\ntype ProjectExistenceQueryKey =\n | ReturnType<typeof projectsQueryKeys.exists>\n | readonly ['projects', 'exists'];\ntype ProjectDetailQueryKey =\n | ReturnType<typeof projectsQueryKeys.detail>\n | readonly ['projects', 'detail'];\n\ntype ProjectListInfiniteQueryOptions = UseInfiniteQueryOptions<\n ProjectList,\n Error,\n InfiniteData<ProjectList, string | undefined>,\n ProjectListQueryKey,\n string | undefined\n>;\ntype ProjectExistenceQueryOptions = UseQueryOptions<\n ProjectList,\n Error,\n ProjectList,\n ProjectExistenceQueryKey\n>;\ntype ProjectDetailQueryOptions = UseQueryOptions<Project, Error, Project, ProjectDetailQueryKey>;\n\nexport async function listProjects({\n workspaceId,\n limit = 50,\n cursor,\n search,\n signal,\n}: {\n workspaceId: string;\n limit?: number;\n cursor?: string | undefined;\n search?: string | undefined;\n signal?: AbortSignal | undefined;\n}): Promise<ProjectList> {\n const params = new URLSearchParams({workspace_id: workspaceId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n if (search) params.set('search', search);\n return toProjectList(\n await checkedApiRequest(listProjectsResponseSchema, `/projects?${params.toString()}`, {signal}),\n );\n}\n\nexport async function getProject(projectId: string): Promise<Project> {\n return toProject(await checkedApiRequest(projectResponseSchema, `/projects/${projectId}`));\n}\n\nexport async function createProject(command: CreateProjectCommand): Promise<Project> {\n const body = createProjectBodySchema.parse({\n workspace_id: command.workspaceId,\n name: command.name,\n source: {\n connection_id: command.source.connectionId,\n external_repository_id: command.source.externalRepositoryId,\n },\n });\n return toProject(\n await checkedApiRequest(projectResponseSchema, '/projects', {method: 'POST', body}),\n );\n}\n\nexport function projectsInfiniteQueryOptions(\n workspaceId: string | undefined,\n search?: string,\n limit = 50,\n): ProjectListInfiniteQueryOptions {\n const normalizedSearch = search?.trim() ?? '';\n return {\n queryKey: workspaceId\n ? projectsQueryKeys.list(workspaceId, normalizedSearch)\n : ([...projectsQueryKeys.all, 'list'] as const),\n enabled: Boolean(workspaceId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}: {pageParam: string | undefined; signal: AbortSignal}) =>\n listProjects({\n workspaceId: workspaceId ?? '',\n limit,\n cursor: pageParam,\n search: normalizedSearch || undefined,\n signal,\n }),\n getNextPageParam: (lastPage: ProjectList) => lastPage.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n };\n}\n\nexport function projectExistenceQueryOptions(\n workspaceId: string | undefined,\n): ProjectExistenceQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? projectsQueryKeys.exists(workspaceId)\n : ([...projectsQueryKeys.all, 'exists'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listProjects({workspaceId: workspaceId ?? '', limit: 1, signal}),\n staleTime: 30_000,\n });\n}\n\nexport function projectQueryOptions(projectId: string | undefined): ProjectDetailQueryOptions {\n return queryOptions({\n queryKey: projectId\n ? projectsQueryKeys.detail(projectId)\n : ([...projectsQueryKeys.all, 'detail'] as const),\n enabled: Boolean(projectId),\n queryFn: () => getProject(projectId ?? ''),\n });\n}\n\nexport function useProjectsInfiniteQuery(\n workspaceId: string | undefined,\n search?: string,\n limit = 50,\n) {\n return useInfiniteQuery(projectsInfiniteQueryOptions(workspaceId, search, limit));\n}\nexport function useProjectQuery(projectId: string | undefined) {\n return useQuery(projectQueryOptions(projectId));\n}\n\nexport function useCreateProjectMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: createProject,\n onSuccess: async (project) => {\n queryClient.setQueryData(projectsQueryKeys.detail(project.id), project);\n queryClient.setQueryData<ProjectList>(projectsQueryKeys.exists(project.workspaceId), {\n projects: [project],\n nextCursor: null,\n });\n await queryClient.invalidateQueries({queryKey: projectsQueryKeys.list(project.workspaceId)});\n },\n onError: async (_error, command) => {\n await queryClient.invalidateQueries({\n queryKey: projectsQueryKeys.exists(command.workspaceId),\n refetchType: 'active',\n });\n await queryClient.invalidateQueries({queryKey: projectsQueryKeys.list(command.workspaceId)});\n },\n });\n}\n"],"names":["createProjectBodySchema","listProjectsResponseSchema","projectResponseSchema","checkedApiRequest","keepPreviousData","queryOptions","useInfiniteQuery","useMutation","useQuery","useQueryClient","toProject","toProjectList","projectsQueryKeys","all","list","workspaceId","search","exists","detail","projectId","listProjects","limit","cursor","signal","params","URLSearchParams","workspace_id","String","set","toString","getProject","createProject","command","body","parse","name","source","connection_id","connectionId","external_repository_id","externalRepositoryId","method","projectsInfiniteQueryOptions","normalizedSearch","trim","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","nextCursor","placeholderData","projectExistenceQueryOptions","staleTime","projectQueryOptions","useProjectsInfiniteQuery","useProjectQuery","useCreateProjectMutation","queryClient","mutationFn","onSuccess","project","setQueryData","id","projects","invalidateQueries","onError","_error","refetchType"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,0BAA0B,EAC1BC,qBAAqB,QAChB,4BAA4B;AACnC,SAAQC,iBAAiB,QAAO,sBAAsB;AACtD,SAEEC,gBAAgB,EAChBC,YAAY,EAGZC,gBAAgB,EAChBC,WAAW,EACXC,QAAQ,EACRC,cAAc,QACT,wBAAwB;AAE/B,SAAQC,SAAS,EAAEC,aAAa,QAAO,eAAe;AAEtD,OAAO,MAAMC,oBAAoB;IAC/BC,KAAK;QAAC;KAAW;IACjBC,MAAM,CAACC,aAAqBC,SAAS,EAAE,GACrC;eAAIJ,kBAAkBC,GAAG;YAAE;YAAQE;YAAaC;SAAO;IACzDC,QAAQ,CAACF,cAAwB;eAAIH,kBAAkBC,GAAG;YAAE;YAAUE;SAAY;IAClFG,QAAQ,CAACC,YAAsB;eAAIP,kBAAkBC,GAAG;YAAE;YAAUM;SAAU;AAChF,EAAE;AA2BF,OAAO,eAAeC,aAAa,EACjCL,WAAW,EACXM,QAAQ,EAAE,EACVC,MAAM,EACNN,MAAM,EACNO,MAAM,EAOP;IACC,MAAMC,SAAS,IAAIC,gBAAgB;QAACC,cAAcX;QAAaM,OAAOM,OAAON;IAAM;IACnF,IAAIC,QAAQE,OAAOI,GAAG,CAAC,UAAUN;IACjC,IAAIN,QAAQQ,OAAOI,GAAG,CAAC,UAAUZ;IACjC,OAAOL,cACL,MAAMR,kBAAkBF,4BAA4B,CAAC,UAAU,EAAEuB,OAAOK,QAAQ,IAAI,EAAE;QAACN;IAAM;AAEjG;AAEA,OAAO,eAAeO,WAAWX,SAAiB;IAChD,OAAOT,UAAU,MAAMP,kBAAkBD,uBAAuB,CAAC,UAAU,EAAEiB,WAAW;AAC1F;AAEA,OAAO,eAAeY,cAAcC,OAA6B;IAC/D,MAAMC,OAAOjC,wBAAwBkC,KAAK,CAAC;QACzCR,cAAcM,QAAQjB,WAAW;QACjCoB,MAAMH,QAAQG,IAAI;QAClBC,QAAQ;YACNC,eAAeL,QAAQI,MAAM,CAACE,YAAY;YAC1CC,wBAAwBP,QAAQI,MAAM,CAACI,oBAAoB;QAC7D;IACF;IACA,OAAO9B,UACL,MAAMP,kBAAkBD,uBAAuB,aAAa;QAACuC,QAAQ;QAAQR;IAAI;AAErF;AAEA,OAAO,SAASS,6BACd3B,WAA+B,EAC/BC,MAAe,EACfK,QAAQ,EAAE;IAEV,MAAMsB,mBAAmB3B,QAAQ4B,UAAU;IAC3C,OAAO;QACLC,UAAU9B,cACNH,kBAAkBE,IAAI,CAACC,aAAa4B,oBACnC;eAAI/B,kBAAkBC,GAAG;YAAE;SAAO;QACvCiC,SAASC,QAAQhC;QACjBiC,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAE5B,MAAM,EAAuD,GACjFH,aAAa;gBACXL,aAAaA,eAAe;gBAC5BM;gBACAC,QAAQ6B;gBACRnC,QAAQ2B,oBAAoBM;gBAC5B1B;YACF;QACF6B,kBAAkB,CAACC,WAA0BA,SAASC,UAAU,IAAIL;QACpEM,iBAAiBnD;IACnB;AACF;AAEA,OAAO,SAASoD,6BACdzC,WAA+B;IAE/B,OAAOV,aAAa;QAClBwC,UAAU9B,cACNH,kBAAkBK,MAAM,CAACF,eACxB;eAAIH,kBAAkBC,GAAG;YAAE;SAAS;QACzCiC,SAASC,QAAQhC;QACjBmC,SAAS,CAAC,EAAC3B,MAAM,EAAC,GAAKH,aAAa;gBAACL,aAAaA,eAAe;gBAAIM,OAAO;gBAAGE;YAAM;QACrFkC,WAAW;IACb;AACF;AAEA,OAAO,SAASC,oBAAoBvC,SAA6B;IAC/D,OAAOd,aAAa;QAClBwC,UAAU1B,YACNP,kBAAkBM,MAAM,CAACC,aACxB;eAAIP,kBAAkBC,GAAG;YAAE;SAAS;QACzCiC,SAASC,QAAQ5B;QACjB+B,SAAS,IAAMpB,WAAWX,aAAa;IACzC;AACF;AAEA,OAAO,SAASwC,yBACd5C,WAA+B,EAC/BC,MAAe,EACfK,QAAQ,EAAE;IAEV,OAAOf,iBAAiBoC,6BAA6B3B,aAAaC,QAAQK;AAC5E;AACA,OAAO,SAASuC,gBAAgBzC,SAA6B;IAC3D,OAAOX,SAASkD,oBAAoBvC;AACtC;AAEA,OAAO,SAAS0C;IACd,MAAMC,cAAcrD;IACpB,OAAOF,YAAY;QACjBwD,YAAYhC;QACZiC,WAAW,OAAOC;YAChBH,YAAYI,YAAY,CAACtD,kBAAkBM,MAAM,CAAC+C,QAAQE,EAAE,GAAGF;YAC/DH,YAAYI,YAAY,CAActD,kBAAkBK,MAAM,CAACgD,QAAQlD,WAAW,GAAG;gBACnFqD,UAAU;oBAACH;iBAAQ;gBACnBX,YAAY;YACd;YACA,MAAMQ,YAAYO,iBAAiB,CAAC;gBAACxB,UAAUjC,kBAAkBE,IAAI,CAACmD,QAAQlD,WAAW;YAAC;QAC5F;QACAuD,SAAS,OAAOC,QAAQvC;YACtB,MAAM8B,YAAYO,iBAAiB,CAAC;gBAClCxB,UAAUjC,kBAAkBK,MAAM,CAACe,QAAQjB,WAAW;gBACtDyD,aAAa;YACf;YACA,MAAMV,YAAYO,iBAAiB,CAAC;gBAACxB,UAAUjC,kBAAkBE,IAAI,CAACkB,QAAQjB,WAAW;YAAC;QAC5F;IACF;AACF"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export type { WorkspaceSetupState } from '@shipfox/client-shell/runtime';
1
+ export type { Definition, DefinitionList, DefinitionSyncSummary } from '#core/definition.js';
2
+ export { type CreateProjectCommand, type Project, type ProjectList, type ProjectSource, projectNameFromRepository, selectProjectSource, } from '#core/project.js';
2
3
  export { ProjectBreadcrumb, ProjectLayoutGuard } from './chrome.js';
3
4
  export { ProjectCrumb, type ProjectCrumbProps } from './components/project-crumb.js';
4
5
  export { ProjectSwitcher, type ProjectSwitcherProps } from './components/project-switcher.js';
5
- export { loadWorkspaceSetupRoute, type WorkspaceSetupRouteOptions, } from './components/workspace-setup-guard.js';
6
+ export { SourceStrip } from './components/source-strip.js';
6
7
  export * from './hooks/api/definitions.js';
7
8
  export * from './hooks/api/projects.js';
8
9
  export * from './pages/create-project-page.js';
9
10
  export * from './pages/home-router.js';
10
- export * from './pages/project-workflows-page.js';
11
11
  export * from './pages/projects-hub-page.js';
12
12
  export * from './project-error.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAC,eAAe,EAAE,KAAK,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EACL,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAC,eAAe,EAAE,KAAK,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
+ export { projectNameFromRepository, selectProjectSource } from '#core/project.js';
1
2
  export { ProjectBreadcrumb, ProjectLayoutGuard } from './chrome.js';
2
3
  export { ProjectCrumb } from './components/project-crumb.js';
3
4
  export { ProjectSwitcher } from './components/project-switcher.js';
4
- export { loadWorkspaceSetupRoute } from './components/workspace-setup-guard.js';
5
+ export { SourceStrip } from './components/source-strip.js';
5
6
  export * from './hooks/api/definitions.js';
6
7
  export * from './hooks/api/projects.js';
7
8
  export * from './pages/create-project-page.js';
8
9
  export * from './pages/home-router.js';
9
- export * from './pages/project-workflows-page.js';
10
10
  export * from './pages/projects-hub-page.js';
11
11
  export * from './project-error.js';
12
12
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export type {WorkspaceSetupState} from '@shipfox/client-shell/runtime';\nexport {ProjectBreadcrumb, ProjectLayoutGuard} from './chrome.js';\nexport {ProjectCrumb, type ProjectCrumbProps} from './components/project-crumb.js';\nexport {ProjectSwitcher, type ProjectSwitcherProps} from './components/project-switcher.js';\nexport {\n loadWorkspaceSetupRoute,\n type WorkspaceSetupRouteOptions,\n} from './components/workspace-setup-guard.js';\nexport * from './hooks/api/definitions.js';\nexport * from './hooks/api/projects.js';\nexport * from './pages/create-project-page.js';\nexport * from './pages/home-router.js';\nexport * from './pages/project-workflows-page.js';\nexport * from './pages/projects-hub-page.js';\nexport * from './project-error.js';\n"],"names":["ProjectBreadcrumb","ProjectLayoutGuard","ProjectCrumb","ProjectSwitcher","loadWorkspaceSetupRoute"],"mappings":"AACA,SAAQA,iBAAiB,EAAEC,kBAAkB,QAAO,cAAc;AAClE,SAAQC,YAAY,QAA+B,gCAAgC;AACnF,SAAQC,eAAe,QAAkC,mCAAmC;AAC5F,SACEC,uBAAuB,QAElB,wCAAwC;AAC/C,cAAc,6BAA6B;AAC3C,cAAc,0BAA0B;AACxC,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,oCAAoC;AAClD,cAAc,+BAA+B;AAC7C,cAAc,qBAAqB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export type {Definition, DefinitionList, DefinitionSyncSummary} from '#core/definition.js';\nexport {\n type CreateProjectCommand,\n type Project,\n type ProjectList,\n type ProjectSource,\n projectNameFromRepository,\n selectProjectSource,\n} from '#core/project.js';\nexport {ProjectBreadcrumb, ProjectLayoutGuard} from './chrome.js';\nexport {ProjectCrumb, type ProjectCrumbProps} from './components/project-crumb.js';\nexport {ProjectSwitcher, type ProjectSwitcherProps} from './components/project-switcher.js';\nexport {SourceStrip} from './components/source-strip.js';\nexport * from './hooks/api/definitions.js';\nexport * from './hooks/api/projects.js';\nexport * from './pages/create-project-page.js';\nexport * from './pages/home-router.js';\nexport * from './pages/projects-hub-page.js';\nexport * from './project-error.js';\n"],"names":["projectNameFromRepository","selectProjectSource","ProjectBreadcrumb","ProjectLayoutGuard","ProjectCrumb","ProjectSwitcher","SourceStrip"],"mappings":"AACA,SAKEA,yBAAyB,EACzBC,mBAAmB,QACd,mBAAmB;AAC1B,SAAQC,iBAAiB,EAAEC,kBAAkB,QAAO,cAAc;AAClE,SAAQC,YAAY,QAA+B,gCAAgC;AACnF,SAAQC,eAAe,QAAkC,mCAAmC;AAC5F,SAAQC,WAAW,QAAO,+BAA+B;AACzD,cAAc,6BAA6B;AAC3C,cAAc,0BAA0B;AACxC,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,+BAA+B;AAC7C,cAAc,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-project-page.d.ts","sourceRoot":"","sources":["../../src/pages/create-project-page.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,iBAAiB,gCA0ShC"}
1
+ {"version":3,"file":"create-project-page.d.ts","sourceRoot":"","sources":["../../src/pages/create-project-page.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,iBAAiB,gCAiShC"}