@package-broker/ui 0.19.8 → 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/api-types.d.ts +9987 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +6 -0
- package/dist/api-types.js.map +1 -0
- package/dist/api.d.ts +88 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +179 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +76 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +239 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/app.0348e5888f99.js +15 -0
- package/dist/assets/app.e8cea8b32d3a.css +2 -0
- package/dist/assets/index.html +13 -0
- package/dist/assets/manifest.json +26 -0
- package/dist/assets/setup.98343039898f.js +1 -0
- package/dist/assets/setup.html +14 -0
- package/dist/auth.d.ts +170 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +551 -0
- package/dist/auth.js.map +1 -0
- package/dist/components/ui/alert.d.ts +10 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +22 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/badge.d.ts +8 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +18 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +27 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +21 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/confirm-action.d.ts +12 -0
- package/dist/components/ui/confirm-action.d.ts.map +1 -0
- package/dist/components/ui/confirm-action.js +19 -0
- package/dist/components/ui/confirm-action.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +180 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +8 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +71 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/id-text.d.ts +11 -0
- package/dist/components/ui/id-text.d.ts.map +1 -0
- package/dist/components/ui/id-text.js +23 -0
- package/dist/components/ui/id-text.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +6 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +7 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-state.d.ts +7 -0
- package/dist/components/ui/list-state.d.ts.map +1 -0
- package/dist/components/ui/list-state.js +5 -0
- package/dist/components/ui/list-state.js.map +1 -0
- package/dist/components/ui/overlay-host.d.ts +6 -0
- package/dist/components/ui/overlay-host.d.ts.map +1 -0
- package/dist/components/ui/overlay-host.js +36 -0
- package/dist/components/ui/overlay-host.js.map +1 -0
- package/dist/components/ui/row-actions.d.ts +17 -0
- package/dist/components/ui/row-actions.d.ts.map +1 -0
- package/dist/components/ui/row-actions.js +21 -0
- package/dist/components/ui/row-actions.js.map +1 -0
- package/dist/components/ui/select.d.ts +3 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +6 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +28 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -0
- package/dist/components/ui/status-badge.js +50 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +27 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +81 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +14 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +14 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/time.d.ts +5 -0
- package/dist/components/ui/time.d.ts.map +1 -0
- package/dist/components/ui/time.js +14 -0
- package/dist/components/ui/time.js.map +1 -0
- package/dist/components/ui/toolbar.d.ts +20 -0
- package/dist/components/ui/toolbar.d.ts.map +1 -0
- package/dist/components/ui/toolbar.js +42 -0
- package/dist/components/ui/toolbar.js.map +1 -0
- package/dist/components/vulnerability-status.d.ts +8 -0
- package/dist/components/vulnerability-status.d.ts.map +1 -0
- package/dist/components/vulnerability-status.js +49 -0
- package/dist/components/vulnerability-status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/use-merged-refs.d.ts +3 -0
- package/dist/lib/use-merged-refs.d.ts.map +1 -0
- package/dist/lib/use-merged-refs.js +22 -0
- package/dist/lib/use-merged-refs.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +21 -0
- package/dist/manifest.js.map +1 -0
- package/dist/page-hash.d.ts +23 -0
- package/dist/page-hash.d.ts.map +1 -0
- package/dist/page-hash.js +45 -0
- package/dist/page-hash.js.map +1 -0
- package/dist/pages/access.d.ts +69 -0
- package/dist/pages/access.d.ts.map +1 -0
- package/dist/pages/access.js +391 -0
- package/dist/pages/access.js.map +1 -0
- package/dist/pages/audit.d.ts +63 -0
- package/dist/pages/audit.d.ts.map +1 -0
- package/dist/pages/audit.js +182 -0
- package/dist/pages/audit.js.map +1 -0
- package/dist/pages/import.d.ts +41 -0
- package/dist/pages/import.d.ts.map +1 -0
- package/dist/pages/import.js +274 -0
- package/dist/pages/import.js.map +1 -0
- package/dist/pages/management.d.ts +47 -0
- package/dist/pages/management.d.ts.map +1 -0
- package/dist/pages/management.js +141 -0
- package/dist/pages/management.js.map +1 -0
- package/dist/pages/packages.d.ts +74 -0
- package/dist/pages/packages.d.ts.map +1 -0
- package/dist/pages/packages.js +505 -0
- package/dist/pages/packages.js.map +1 -0
- package/dist/pages/projects.d.ts +58 -0
- package/dist/pages/projects.d.ts.map +1 -0
- package/dist/pages/projects.js +357 -0
- package/dist/pages/projects.js.map +1 -0
- package/dist/pages/sources/add-package-dialog.d.ts +10 -0
- package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
- package/dist/pages/sources/add-package-dialog.js +19 -0
- package/dist/pages/sources/add-package-dialog.js.map +1 -0
- package/dist/pages/sources/proxy-message.d.ts +2 -0
- package/dist/pages/sources/proxy-message.d.ts.map +1 -0
- package/dist/pages/sources/proxy-message.js +2 -0
- package/dist/pages/sources/proxy-message.js.map +1 -0
- package/dist/pages/sources/source-form.d.ts +29 -0
- package/dist/pages/sources/source-form.d.ts.map +1 -0
- package/dist/pages/sources/source-form.js +463 -0
- package/dist/pages/sources/source-form.js.map +1 -0
- package/dist/pages/sources/sync-poll.d.ts +20 -0
- package/dist/pages/sources/sync-poll.d.ts.map +1 -0
- package/dist/pages/sources/sync-poll.js +71 -0
- package/dist/pages/sources/sync-poll.js.map +1 -0
- package/dist/pages/sources.d.ts +325 -0
- package/dist/pages/sources.d.ts.map +1 -0
- package/dist/pages/sources.js +1132 -0
- package/dist/pages/sources.js.map +1 -0
- package/dist/pages/tokens/client-config.d.ts +5 -0
- package/dist/pages/tokens/client-config.d.ts.map +1 -0
- package/dist/pages/tokens/client-config.js +9 -0
- package/dist/pages/tokens/client-config.js.map +1 -0
- package/dist/pages/tokens.d.ts +127 -0
- package/dist/pages/tokens.d.ts.map +1 -0
- package/dist/pages/tokens.js +744 -0
- package/dist/pages/tokens.js.map +1 -0
- package/dist/pending.d.ts +33 -0
- package/dist/pending.d.ts.map +1 -0
- package/dist/pending.js +156 -0
- package/dist/pending.js.map +1 -0
- package/dist/qr.d.ts +14 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +322 -0
- package/dist/qr.js.map +1 -0
- package/dist/setup.d.ts +49 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +390 -0
- package/dist/setup.js.map +1 -0
- package/dist/test-fixtures/api-types.d.ts +228 -0
- package/dist/test-fixtures/api-types.d.ts.map +1 -0
- package/dist/test-fixtures/api-types.js +6 -0
- package/dist/test-fixtures/api-types.js.map +1 -0
- package/package.json +37 -40
- package/public/index.html +11 -0
- package/README.md +0 -11
- package/dist/assets/main-3NLwl1eV.js +0 -111
- package/dist/assets/main-CsTEYyDl.css +0 -1
- package/dist/config.js +0 -3
- package/dist/index.html +0 -22
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Textarea } from '../../components/ui/textarea.js';
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Button } from '../../components/ui/button.js';
|
|
5
|
+
import { Input } from '../../components/ui/input.js';
|
|
6
|
+
import { Label } from '../../components/ui/label.js';
|
|
7
|
+
import { Select } from '../../components/ui/select.js';
|
|
8
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog.js';
|
|
9
|
+
import { displayUrl } from '../sources.js';
|
|
10
|
+
import { IdText } from '../../components/ui/id-text.js';
|
|
11
|
+
const VCS_PROVIDER_LABELS = {
|
|
12
|
+
github: 'GitHub',
|
|
13
|
+
git: 'Git over HTTP(S)',
|
|
14
|
+
ssh: 'Git over SSH',
|
|
15
|
+
};
|
|
16
|
+
const DEFAULT_VCS_PROVIDERS = ['github'];
|
|
17
|
+
/** The provider choices in display order, limited to those the broker reports it serves. */
|
|
18
|
+
export function vcsProviderOptions(reported) {
|
|
19
|
+
return Object.keys(VCS_PROVIDER_LABELS)
|
|
20
|
+
.filter((provider) => reported.includes(provider))
|
|
21
|
+
.map((provider) => [provider, VCS_PROVIDER_LABELS[provider]]);
|
|
22
|
+
}
|
|
23
|
+
export const SOURCE_TYPES = {
|
|
24
|
+
composer: ['packagist_proxy', 'composer_repository', 'vcs'],
|
|
25
|
+
npm: ['npmjs_proxy', 'npm_registry'],
|
|
26
|
+
};
|
|
27
|
+
const DEFAULT_URL = {
|
|
28
|
+
packagist_proxy: 'https://repo.packagist.org',
|
|
29
|
+
npmjs_proxy: 'https://registry.npmjs.org',
|
|
30
|
+
};
|
|
31
|
+
export const SOURCE_TYPE_LABELS = {
|
|
32
|
+
packagist_proxy: 'Packagist proxy',
|
|
33
|
+
composer_repository: 'Composer repository',
|
|
34
|
+
vcs: 'Git repository',
|
|
35
|
+
npmjs_proxy: 'npmjs proxy',
|
|
36
|
+
npm_registry: 'Private npm registry',
|
|
37
|
+
hosted: 'Hosted repository',
|
|
38
|
+
};
|
|
39
|
+
const TYPE_DESCRIPTIONS = {
|
|
40
|
+
packagist_proxy: 'Fetch public Composer packages on demand.',
|
|
41
|
+
composer_repository: 'Import selected packages from Satis, Private Packagist, or another Composer repository.',
|
|
42
|
+
vcs: 'Import a Composer package from GitHub or another Git repository.',
|
|
43
|
+
npmjs_proxy: 'Fetch public npm packages on demand.',
|
|
44
|
+
npm_registry: 'Fetch packages in selected scopes from another npm registry.',
|
|
45
|
+
};
|
|
46
|
+
const FIELD_LABELS = {
|
|
47
|
+
name: 'Source name',
|
|
48
|
+
ecosystem: 'Ecosystem',
|
|
49
|
+
type: 'Source type',
|
|
50
|
+
url: 'Repository URL',
|
|
51
|
+
userAgent: 'User-Agent override',
|
|
52
|
+
pollIntervalSeconds: 'Sync interval (seconds)',
|
|
53
|
+
removalPolicy: 'When a package disappears upstream',
|
|
54
|
+
defaultVisibleToNewProjects: 'Visible to new projects',
|
|
55
|
+
retentionDaysOverride: 'Archive retention (days)',
|
|
56
|
+
'config/provider': 'Repository provider',
|
|
57
|
+
'config/repository': 'GitHub repository',
|
|
58
|
+
'config/installationId': 'GitHub App installation ID',
|
|
59
|
+
githubAuthentication: 'GitHub authentication',
|
|
60
|
+
'config/packageName': 'Composer package name override',
|
|
61
|
+
'config/refs/branches': 'Branches to import',
|
|
62
|
+
'config/refs/tags': 'Import tags',
|
|
63
|
+
'config/selection/packages': 'Package names (one per line)',
|
|
64
|
+
'config/selection/patterns': 'Package patterns (one per line)',
|
|
65
|
+
'config/selection/expandPatterns': 'Expand patterns',
|
|
66
|
+
'config/distHosts': 'Additional archive hosts',
|
|
67
|
+
'config/mirrorsFallback': 'Try repository mirrors if an archive download fails',
|
|
68
|
+
'config/scopes': 'Package scopes (one per line)',
|
|
69
|
+
'config/githubToken': 'Use GitHub token',
|
|
70
|
+
};
|
|
71
|
+
const FIELD_MESSAGES = {
|
|
72
|
+
name: 'Enter a source name.',
|
|
73
|
+
ecosystem: 'Choose an ecosystem.',
|
|
74
|
+
type: 'Choose a source type.',
|
|
75
|
+
url: 'Enter a valid HTTP or HTTPS URL without credentials, a query, or a fragment.',
|
|
76
|
+
userAgent: 'Enter a valid User-Agent header without line breaks.',
|
|
77
|
+
pollIntervalSeconds: 'Enter a whole number of seconds greater than 0.',
|
|
78
|
+
removalPolicy: 'Choose what happens when a package disappears upstream.',
|
|
79
|
+
defaultVisibleToNewProjects: 'Choose whether this source is visible to new projects.',
|
|
80
|
+
retentionDaysOverride: 'Enter a whole number of days that does not shorten organization retention.',
|
|
81
|
+
'config/provider': 'Choose a repository provider this broker supports.',
|
|
82
|
+
'config/repository': 'Enter a valid repository for the selected provider: owner/repository for GitHub, or a clone URL for Git.',
|
|
83
|
+
'config/installationId': 'Enter a positive whole-number installation ID.',
|
|
84
|
+
githubAuthentication: 'Choose GitHub App or Personal access token.',
|
|
85
|
+
'config/packageName': 'Enter a Composer package name, such as acme/payments.',
|
|
86
|
+
'config/refs/branches': 'Enter valid branch names, one per line, without duplicates.',
|
|
87
|
+
'config/refs/tags': 'Choose whether to import tags.',
|
|
88
|
+
'config/selection/packages': 'Enter valid Composer package names, one per line, without duplicates.',
|
|
89
|
+
'config/selection/patterns': 'Enter valid package patterns, such as acme/*, without duplicates.',
|
|
90
|
+
'config/selection/expandPatterns': 'Choose whether to expand patterns.',
|
|
91
|
+
'config/distHosts': 'Enter hostnames only, one per line, without schemes, paths, or duplicates.',
|
|
92
|
+
'config/mirrorsFallback': 'Choose whether to try repository mirrors.',
|
|
93
|
+
'config/scopes': 'Enter at least one scope, such as @acme, one per line without duplicates.',
|
|
94
|
+
'config/githubToken': 'Save a bearer credential before enabling the GitHub token option.',
|
|
95
|
+
};
|
|
96
|
+
const HELP = {
|
|
97
|
+
pollIntervalSeconds: 'How often to check for upstream changes. 300 seconds = 5 minutes.',
|
|
98
|
+
retentionDaysOverride: 'Leave blank to use the organization setting. An override can only lengthen retention.',
|
|
99
|
+
'config/distHosts': 'One hostname per line. Archive downloads may come from these hosts; the source credential is also sent to them.',
|
|
100
|
+
'config/selection/packages': 'Packages matching either list are selected. Empty lists select no packages.',
|
|
101
|
+
'config/scopes': 'One scope per line, including @. Only these scopes use this registry. Register @scope/* for each scope before enabling the source.',
|
|
102
|
+
'config/packageName': 'Leave blank to use the name in composer.json.',
|
|
103
|
+
'config/refs/branches': 'One branch name per line. Leave blank to import no branches.',
|
|
104
|
+
'config/installationId': 'Enter the numeric installation ID for the account that owns this repository.',
|
|
105
|
+
};
|
|
106
|
+
const PLACEHOLDERS = {
|
|
107
|
+
userAgent: 'Use broker default',
|
|
108
|
+
retentionDaysOverride: 'Use organization default',
|
|
109
|
+
'config/selection/packages': 'acme/payments',
|
|
110
|
+
'config/selection/patterns': 'acme/*',
|
|
111
|
+
'config/scopes': '@acme',
|
|
112
|
+
'config/distHosts': 'downloads.example.com',
|
|
113
|
+
'config/packageName': 'acme/payments',
|
|
114
|
+
'config/refs/branches': 'main',
|
|
115
|
+
'config/installationId': '12345678',
|
|
116
|
+
};
|
|
117
|
+
export function sourceFieldErrors(details) {
|
|
118
|
+
const errors = {};
|
|
119
|
+
for (const detail of details) {
|
|
120
|
+
const path = detail.path.replace(/^\/body\//, '').replace(/^\//, '');
|
|
121
|
+
const field = Object.keys(FIELD_LABELS).find((key) => path === key || path.startsWith(`${key}/`));
|
|
122
|
+
if (field)
|
|
123
|
+
errors[field] = FIELD_MESSAGES[field] ?? 'Review this setting.';
|
|
124
|
+
}
|
|
125
|
+
return errors;
|
|
126
|
+
}
|
|
127
|
+
export function validateSourceForm(data, type, editing, original = null, baseline = original ? sourceFormData(original) : null) {
|
|
128
|
+
const errors = {};
|
|
129
|
+
const value = (name) => String(data.get(name) ?? '').trim();
|
|
130
|
+
const whole = (name, minimum) => {
|
|
131
|
+
const number = Number(value(name));
|
|
132
|
+
if (!value(name) || !Number.isSafeInteger(number) || number < minimum)
|
|
133
|
+
errors[name] = FIELD_MESSAGES[name] ?? 'Review this setting.';
|
|
134
|
+
};
|
|
135
|
+
if (!editing && !value('name'))
|
|
136
|
+
errors.name = FIELD_MESSAGES['name'];
|
|
137
|
+
if ((type === 'composer_repository' || type === 'npm_registry') &&
|
|
138
|
+
(!editing || value('url') !== String(baseline?.get('url') ?? '')) &&
|
|
139
|
+
!value('url'))
|
|
140
|
+
errors.url = FIELD_MESSAGES['url'];
|
|
141
|
+
whole('pollIntervalSeconds', 1);
|
|
142
|
+
if (value('retentionDaysOverride'))
|
|
143
|
+
whole('retentionDaysOverride', 0);
|
|
144
|
+
const configChanged = !baseline ||
|
|
145
|
+
Object.keys(FIELD_LABELS).some((name) => (name.startsWith('config/') || (type === 'vcs' && name === 'githubAuthentication')) &&
|
|
146
|
+
String(data.get(name) ?? '') !== String(baseline.get(name) ?? ''));
|
|
147
|
+
if (configReplacementAllowed(original, data) &&
|
|
148
|
+
(configChanged || data.has('replaceConfig')) &&
|
|
149
|
+
(data.has('config/provider') ||
|
|
150
|
+
data.has('config/scopes') ||
|
|
151
|
+
data.has('config/selection/packages') ||
|
|
152
|
+
!editing)) {
|
|
153
|
+
if (type === 'composer_repository' &&
|
|
154
|
+
!value('config/selection/packages') &&
|
|
155
|
+
!value('config/selection/patterns'))
|
|
156
|
+
errors['config/selection/packages'] = 'Add at least one package name or pattern';
|
|
157
|
+
if (type === 'npm_registry' && !value('config/scopes'))
|
|
158
|
+
errors['config/scopes'] = FIELD_MESSAGES['config/scopes'];
|
|
159
|
+
if (type === 'vcs' && !value('config/repository'))
|
|
160
|
+
errors['config/repository'] = FIELD_MESSAGES['config/repository'];
|
|
161
|
+
if (type === 'vcs' &&
|
|
162
|
+
value('config/provider') === 'github' &&
|
|
163
|
+
value('githubAuthentication') !== 'token')
|
|
164
|
+
whole('config/installationId', 1);
|
|
165
|
+
}
|
|
166
|
+
return errors;
|
|
167
|
+
}
|
|
168
|
+
function integer(value, minimum) {
|
|
169
|
+
const number = Number(value);
|
|
170
|
+
if (!value.trim() || !Number.isSafeInteger(number) || number < minimum)
|
|
171
|
+
throw new Error('Enter valid whole numbers for the numeric fields.');
|
|
172
|
+
return number;
|
|
173
|
+
}
|
|
174
|
+
function sourceChanges(data, type, editing, includeConfig = true) {
|
|
175
|
+
const value = (name) => String(data.get(name) ?? '');
|
|
176
|
+
const checked = (name) => data.has(name);
|
|
177
|
+
const list = (name) => value(name)
|
|
178
|
+
.split(/\r?\n/)
|
|
179
|
+
.map((entry) => entry.trim())
|
|
180
|
+
.filter(Boolean);
|
|
181
|
+
const changes = {
|
|
182
|
+
pollIntervalSeconds: integer(value('pollIntervalSeconds'), 1),
|
|
183
|
+
removalPolicy: value('removalPolicy'),
|
|
184
|
+
};
|
|
185
|
+
changes.defaultVisibleToNewProjects = checked('defaultVisibleToNewProjects');
|
|
186
|
+
changes.retentionDaysOverride =
|
|
187
|
+
value('retentionDaysOverride').trim() === ''
|
|
188
|
+
? null
|
|
189
|
+
: integer(value('retentionDaysOverride'), 0);
|
|
190
|
+
changes.userAgent = value('userAgent') || null;
|
|
191
|
+
if (type !== 'vcs')
|
|
192
|
+
changes.url = value('url') || null;
|
|
193
|
+
if (includeConfig &&
|
|
194
|
+
(!editing ||
|
|
195
|
+
data.has('config/provider') ||
|
|
196
|
+
data.has('config/scopes') ||
|
|
197
|
+
data.has('config/selection/packages') ||
|
|
198
|
+
type === 'packagist_proxy' ||
|
|
199
|
+
type === 'npmjs_proxy')) {
|
|
200
|
+
switch (type) {
|
|
201
|
+
case 'vcs':
|
|
202
|
+
changes.config = {
|
|
203
|
+
provider: value('config/provider'),
|
|
204
|
+
repository: value('config/repository'),
|
|
205
|
+
...(value('config/provider') === 'github' && value('githubAuthentication') !== 'token'
|
|
206
|
+
? { installationId: integer(value('config/installationId'), 1) }
|
|
207
|
+
: {}),
|
|
208
|
+
...(value('config/packageName') ? { packageName: value('config/packageName') } : {}),
|
|
209
|
+
refs: { branches: list('config/refs/branches'), tags: checked('config/refs/tags') },
|
|
210
|
+
};
|
|
211
|
+
break;
|
|
212
|
+
case 'composer_repository':
|
|
213
|
+
changes.config = {
|
|
214
|
+
selection: {
|
|
215
|
+
packages: list('config/selection/packages'),
|
|
216
|
+
patterns: list('config/selection/patterns'),
|
|
217
|
+
expandPatterns: checked('config/selection/expandPatterns'),
|
|
218
|
+
},
|
|
219
|
+
distHosts: list('config/distHosts'),
|
|
220
|
+
mirrorsFallback: checked('config/mirrorsFallback'),
|
|
221
|
+
};
|
|
222
|
+
break;
|
|
223
|
+
case 'npm_registry':
|
|
224
|
+
changes.config = { scopes: list('config/scopes'), distHosts: list('config/distHosts') };
|
|
225
|
+
break;
|
|
226
|
+
case 'packagist_proxy':
|
|
227
|
+
changes.config = { githubToken: editing && checked('config/githubToken') };
|
|
228
|
+
break;
|
|
229
|
+
case 'npmjs_proxy':
|
|
230
|
+
changes.config = {};
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return changes;
|
|
235
|
+
}
|
|
236
|
+
function configReplacementAllowed(source, data) {
|
|
237
|
+
return (source === null ||
|
|
238
|
+
(source.config !== undefined && source.configComplete !== false) ||
|
|
239
|
+
data.has('replaceConfig'));
|
|
240
|
+
}
|
|
241
|
+
export function sourceSubmission(data, ecosystem, type, original, initialData = original ? sourceFormData(original) : null) {
|
|
242
|
+
const changes = sourceChanges(data, type, original !== null, configReplacementAllowed(original, data));
|
|
243
|
+
if (!original)
|
|
244
|
+
return { name: String(data.get('name') ?? ''), ecosystem, type, ...changes };
|
|
245
|
+
const baseline = sourceChanges(initialData ?? sourceFormData(original), type, true, original.config !== undefined && original.configComplete !== false);
|
|
246
|
+
return Object.fromEntries(Object.entries(changes).filter(([key, value]) => JSON.stringify(value) !== JSON.stringify(baseline[key])));
|
|
247
|
+
}
|
|
248
|
+
function sourceConfigValue(source, path) {
|
|
249
|
+
let value = source?.config;
|
|
250
|
+
for (const key of path.split('/')) {
|
|
251
|
+
if (typeof value !== 'object' || value === null)
|
|
252
|
+
return undefined;
|
|
253
|
+
value = value[key];
|
|
254
|
+
}
|
|
255
|
+
return value;
|
|
256
|
+
}
|
|
257
|
+
export function sourceFormData(source) {
|
|
258
|
+
const data = new FormData();
|
|
259
|
+
for (const name of Object.keys(FIELD_LABELS)) {
|
|
260
|
+
const value = name.startsWith('config/')
|
|
261
|
+
? sourceConfigValue(source, name.slice(7))
|
|
262
|
+
: source[name];
|
|
263
|
+
if (typeof value === 'boolean') {
|
|
264
|
+
if (value)
|
|
265
|
+
data.set(name, 'on');
|
|
266
|
+
}
|
|
267
|
+
else if (Array.isArray(value))
|
|
268
|
+
data.set(name, value.join('\n'));
|
|
269
|
+
else if (value != null)
|
|
270
|
+
data.set(name, String(value));
|
|
271
|
+
}
|
|
272
|
+
if (source.type === 'packagist_proxy' || source.type === 'npmjs_proxy')
|
|
273
|
+
data.set('url', DEFAULT_URL[source.type]);
|
|
274
|
+
data.set('pollIntervalSeconds', String(source.pollIntervalSeconds));
|
|
275
|
+
data.set('removalPolicy', source.removalPolicy);
|
|
276
|
+
data.set('githubAuthentication', source.githubAuthentication ?? (sourceConfigValue(source, 'installationId') ? 'app' : 'token'));
|
|
277
|
+
return data;
|
|
278
|
+
}
|
|
279
|
+
export function scopeNamePatterns(scopes) {
|
|
280
|
+
return [
|
|
281
|
+
...new Set(scopes
|
|
282
|
+
.split(/\r?\n/)
|
|
283
|
+
.map((scope) => scope.trim())
|
|
284
|
+
.filter((scope) => /^@[a-z0-9][a-z0-9._~-]*$/.test(scope))),
|
|
285
|
+
].map((scope) => `${scope}/*`);
|
|
286
|
+
}
|
|
287
|
+
export function focusSourceError(form, errors) {
|
|
288
|
+
if (!form)
|
|
289
|
+
return;
|
|
290
|
+
const control = Array.from(form.elements).find((element) => (element.getAttribute('name') ?? '') in errors);
|
|
291
|
+
if (!control)
|
|
292
|
+
return;
|
|
293
|
+
const details = control.closest('details');
|
|
294
|
+
if (details)
|
|
295
|
+
details.open = true;
|
|
296
|
+
control.focus();
|
|
297
|
+
}
|
|
298
|
+
export function SourceForm({ source, busy, errors: serverErrors, alert, onSubmit, onClose, vcsProviders = DEFAULT_VCS_PROVIDERS, }) {
|
|
299
|
+
const [ecosystem, setEcosystem] = useState(source?.ecosystem ?? 'composer');
|
|
300
|
+
const [type, setType] = useState(source?.type ?? 'packagist_proxy');
|
|
301
|
+
const providerOptions = vcsProviderOptions(vcsProviders);
|
|
302
|
+
const firstProvider = providerOptions[0]?.[0] ?? 'github';
|
|
303
|
+
const [provider, setProvider] = useState(sourceConfigValue(source, 'provider') ?? firstProvider);
|
|
304
|
+
const providerOffered = providerOptions.some(([value]) => value === provider);
|
|
305
|
+
const vcsUnserved = type === 'vcs' && (providerOptions.length === 0 || !providerOffered);
|
|
306
|
+
useEffect(() => {
|
|
307
|
+
if (!source && !providerOffered && providerOptions.length > 0)
|
|
308
|
+
setProvider(firstProvider);
|
|
309
|
+
}, [source, providerOffered, providerOptions.length, firstProvider]);
|
|
310
|
+
const [githubAuthentication, setGithubAuthentication] = useState(source?.githubAuthentication ??
|
|
311
|
+
(source ? (sourceConfigValue(source, 'installationId') ? 'app' : 'token') : 'app'));
|
|
312
|
+
const [scopes, setScopes] = useState('');
|
|
313
|
+
const initialData = source ? sourceFormData(source) : null;
|
|
314
|
+
const incompleteConfig = source !== null && (source.configComplete === false || source.config === undefined);
|
|
315
|
+
const [replaceConfig, setReplaceConfig] = useState(false);
|
|
316
|
+
const [localErrors, setLocalErrors] = useState({});
|
|
317
|
+
const formRef = useRef(null);
|
|
318
|
+
const errors = { ...serverErrors, ...localErrors };
|
|
319
|
+
const editing = source !== null;
|
|
320
|
+
const proxy = type === 'packagist_proxy' || type === 'npmjs_proxy';
|
|
321
|
+
const configEnabled = !vcsUnserved && (!incompleteConfig || replaceConfig);
|
|
322
|
+
useEffect(() => {
|
|
323
|
+
focusSourceError(formRef.current, serverErrors);
|
|
324
|
+
}, [serverErrors]);
|
|
325
|
+
function describedBy(name) {
|
|
326
|
+
return ([HELP[name] && `source-${name}-help`, errors[name] && `source-${name}-error`]
|
|
327
|
+
.filter(Boolean)
|
|
328
|
+
.join(' ') || undefined);
|
|
329
|
+
}
|
|
330
|
+
function feedback(name) {
|
|
331
|
+
return (_jsxs(_Fragment, { children: [HELP[name] ? (_jsx("p", { id: `source-${name}-help`, className: "text-sm text-neutral-600", children: HELP[name] })) : null, errors[name] ? (_jsx("p", { id: `source-${name}-error`, className: "text-sm text-red-700", children: errors[name] })) : null] }));
|
|
332
|
+
}
|
|
333
|
+
function field(name, control, label = FIELD_LABELS[name]) {
|
|
334
|
+
return (_jsxs("div", { className: "grid gap-1", children: [_jsx(Label, { htmlFor: `source-${name}`, children: label }), control, feedback(name)] }, name));
|
|
335
|
+
}
|
|
336
|
+
function input(name, options = {}) {
|
|
337
|
+
const props = {
|
|
338
|
+
id: `source-${name}`,
|
|
339
|
+
name,
|
|
340
|
+
required: options.required,
|
|
341
|
+
defaultValue: options.value ?? initialData?.get(name)?.toString(),
|
|
342
|
+
onChange: name === 'config/scopes'
|
|
343
|
+
? (event) => setScopes(event.currentTarget.value)
|
|
344
|
+
: undefined,
|
|
345
|
+
placeholder: options.placeholder ?? PLACEHOLDERS[name],
|
|
346
|
+
'aria-invalid': !!errors[name],
|
|
347
|
+
'aria-describedby': describedBy(name),
|
|
348
|
+
};
|
|
349
|
+
return field(name, options.multiline ? (_jsx(Textarea, { ...props, rows: 3, className: "w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-base sm:text-sm" })) : (_jsx(Input, { ...props, className: "h-11 text-base sm:text-sm", type: options.number ? 'number' : 'text', inputMode: options.number ? 'numeric' : undefined, min: options.minimum, max: options.number ? Number.MAX_SAFE_INTEGER : undefined, step: options.number ? 1 : undefined, maxLength: name === 'url' ? 2048 : undefined })), `${options.label ?? FIELD_LABELS[name]}${options.required ? ' (required)' : ''}`);
|
|
350
|
+
}
|
|
351
|
+
function check(name, label = FIELD_LABELS[name], onChange, defaultChecked) {
|
|
352
|
+
return (_jsxs("div", { className: "grid gap-1", children: [_jsxs(Label, { className: "flex min-h-11 items-center gap-2", htmlFor: `source-${name}`, children: [_jsx("input", { type: "checkbox", id: `source-${name}`, name: name, defaultChecked: source ? initialData?.has(name) : defaultChecked, onChange: onChange ? (event) => onChange(event.currentTarget.checked) : undefined, "aria-invalid": !!errors[name], "aria-describedby": describedBy(name) }), label] }), feedback(name)] }, name));
|
|
353
|
+
}
|
|
354
|
+
function radios(name, value, choices, onChange, horizontal = false) {
|
|
355
|
+
return (_jsxs("fieldset", { className: "grid gap-1", "aria-describedby": describedBy(name), "aria-invalid": !!errors[name], children: [_jsx("legend", { className: "text-sm font-medium", children: FIELD_LABELS[name] }), _jsx("div", { className: horizontal ? 'flex gap-4' : 'grid gap-1', children: choices.map(([key, label, description]) => (_jsxs("label", { className: "flex min-h-11 cursor-pointer items-center gap-2 py-1", children: [_jsx("input", { type: "radio", name: name, value: key, checked: value === key, onChange: () => onChange(key), "aria-invalid": !!errors[name], "aria-describedby": describedBy(name) }), _jsxs("span", { children: [_jsx("span", { className: "text-sm font-medium", children: label }), description ? (_jsx("span", { className: "block text-sm text-neutral-600", children: description })) : null] })] }, key))) }), feedback(name)] }));
|
|
356
|
+
}
|
|
357
|
+
const namePlaceholder = {
|
|
358
|
+
packagist_proxy: 'Packagist',
|
|
359
|
+
npmjs_proxy: 'npmjs',
|
|
360
|
+
composer_repository: 'Acme Composer',
|
|
361
|
+
npm_registry: 'Acme npm',
|
|
362
|
+
vcs: 'Acme payments',
|
|
363
|
+
hosted: '',
|
|
364
|
+
}[type];
|
|
365
|
+
return (_jsx(Dialog, { open: true, onOpenChange: (open) => {
|
|
366
|
+
if (!open && !busy)
|
|
367
|
+
onClose();
|
|
368
|
+
}, children: _jsxs(DialogContent, { variant: "source", onCancel: (event) => {
|
|
369
|
+
if (busy)
|
|
370
|
+
event.preventDefault();
|
|
371
|
+
}, children: [_jsxs(DialogHeader, { className: "shrink-0 p-6 pr-16", children: [_jsx(DialogTitle, { children: editing ? 'Edit source' : 'Add source' }), _jsx(DialogDescription, { children: editing
|
|
372
|
+
? `${source.name} · ${ecosystem === 'composer' ? 'Composer' : 'npm'} · ${SOURCE_TYPE_LABELS[type]}. Name, ecosystem and source type cannot be changed.`
|
|
373
|
+
: 'Add an upstream source for this organization or project.' })] }), _jsxs("form", { noValidate: true, ref: formRef, className: "flex min-h-0 min-w-0 flex-1 flex-col", onSubmit: (event) => {
|
|
374
|
+
event.preventDefault();
|
|
375
|
+
if (busy)
|
|
376
|
+
return;
|
|
377
|
+
const data = new FormData(event.currentTarget);
|
|
378
|
+
const next = validateSourceForm(data, type, editing, source, initialData);
|
|
379
|
+
setLocalErrors(next);
|
|
380
|
+
if (Object.keys(next).length) {
|
|
381
|
+
focusSourceError(formRef.current, next);
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
onSubmit(sourceSubmission(data, ecosystem, type, source, initialData));
|
|
385
|
+
}, onInvalidCapture: (event) => {
|
|
386
|
+
const control = event.target;
|
|
387
|
+
const details = control.closest('details');
|
|
388
|
+
if (details)
|
|
389
|
+
details.open = true;
|
|
390
|
+
}, children: [_jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-6", children: [alert || Object.keys(errors).length ? (_jsx("p", { role: "alert", className: "mb-4 text-sm text-red-700", children: Object.keys(errors).length ? 'Review the highlighted fields.' : alert })) : null, source ? (_jsxs("dl", { className: "detail-list mb-4", "aria-label": "Source identity", children: [_jsx("dt", { children: "Source ID" }), _jsx("dd", { children: _jsx(IdText, { value: source.id, label: "source ID" }) }), _jsx("dt", { children: "Source URL" }), _jsx("dd", { className: "break-all", children: displayUrl(source.url) ?? 'No displayable URL' }), _jsx("dt", { children: "Credential" }), _jsx("dd", { children: source.hasCredential ? 'credential set · write-only' : 'No credential set' }), 'attached' in source ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Attached to this project" }), _jsx("dd", { children: source.attached ? 'Yes' : 'No' })] })) : null] })) : null, _jsxs("fieldset", { disabled: busy, className: "grid min-w-0 gap-4", children: [!editing ? (_jsxs(_Fragment, { children: [radios('ecosystem', ecosystem, [
|
|
391
|
+
['composer', 'Composer'],
|
|
392
|
+
['npm', 'npm'],
|
|
393
|
+
], (value) => {
|
|
394
|
+
const next = value;
|
|
395
|
+
setEcosystem(next);
|
|
396
|
+
setType(SOURCE_TYPES[next][0]);
|
|
397
|
+
setScopes('');
|
|
398
|
+
setLocalErrors({});
|
|
399
|
+
}, true), radios('type', type, SOURCE_TYPES[ecosystem]
|
|
400
|
+
.filter((value) => value !== 'vcs' || providerOptions.length > 0)
|
|
401
|
+
.map((value) => [value, SOURCE_TYPE_LABELS[value], TYPE_DESCRIPTIONS[value]]), (value) => {
|
|
402
|
+
setType(value);
|
|
403
|
+
setScopes('');
|
|
404
|
+
setProvider(firstProvider);
|
|
405
|
+
setGithubAuthentication('app');
|
|
406
|
+
setLocalErrors({});
|
|
407
|
+
}), input('name', { required: true, placeholder: namePlaceholder })] })) : (_jsx(_Fragment, { children: vcsUnserved ? (_jsx("p", { className: "text-sm", children: `Source type: ${SOURCE_TYPE_LABELS[type]}. This broker cannot change its repository settings.` })) : null })), proxy ? (_jsxs("p", { className: "break-words text-sm", children: ["Upstream URL: ", DEFAULT_URL[type]] })) : null, proxy ? (_jsx("input", { type: "hidden", name: "url", value: DEFAULT_URL[type] })) : null, !proxy && type !== 'vcs' ? (_jsx("div", { children: input('url', {
|
|
408
|
+
required: !editing || source.url !== null,
|
|
409
|
+
value: source?.url ?? '',
|
|
410
|
+
label: type === 'npm_registry' ? 'Registry URL' : 'Repository URL',
|
|
411
|
+
placeholder: type === 'npm_registry'
|
|
412
|
+
? 'https://npm.example.com'
|
|
413
|
+
: 'https://composer.example.com',
|
|
414
|
+
}) }, `network:${type}`)) : null, incompleteConfig && !vcsUnserved ? (_jsxs("div", { className: "grid gap-1", children: [_jsx("p", { className: "text-sm text-neutral-600", children: "Some saved settings cannot be displayed. Replace the configuration only if you intend to overwrite all saved type-specific settings." }), check('replaceConfig', 'Replace type-specific configuration', setReplaceConfig)] })) : null, configEnabled ? (_jsxs("div", { className: "grid gap-4", children: [type === 'vcs' ? (_jsxs(_Fragment, { children: [field('config/provider', _jsx(Select, { id: "source-config/provider", name: "config/provider", value: provider, className: "h-11 text-base sm:text-sm", "aria-invalid": !!errors['config/provider'], "aria-describedby": describedBy('config/provider'), onChange: (event) => setProvider(event.currentTarget.value), children: providerOptions.map(([value, label]) => (_jsx("option", { value: value, children: label }, value))) })), _jsx("div", { children: input('config/repository', {
|
|
415
|
+
required: true,
|
|
416
|
+
label: provider === 'github'
|
|
417
|
+
? 'GitHub repository'
|
|
418
|
+
: provider === 'git'
|
|
419
|
+
? 'Git repository URL'
|
|
420
|
+
: 'SSH repository',
|
|
421
|
+
placeholder: provider === 'github'
|
|
422
|
+
? 'acme/payments'
|
|
423
|
+
: provider === 'git'
|
|
424
|
+
? 'https://git.example.com/acme/payments.git'
|
|
425
|
+
: 'git@git.example.com:acme/payments.git',
|
|
426
|
+
}) }, provider), provider === 'github' ? (_jsxs(_Fragment, { children: [editing ? (_jsxs(_Fragment, { children: [field('githubAuthentication', _jsx(Input, { id: "source-githubAuthentication", name: "githubAuthenticationDisplay", className: "h-11 text-base sm:text-sm", value: githubAuthentication === 'app'
|
|
427
|
+
? 'GitHub App'
|
|
428
|
+
: 'Personal access token', readOnly: true })), _jsx("input", { type: "hidden", name: "githubAuthentication", value: githubAuthentication })] })) : (radios('githubAuthentication', githubAuthentication, [
|
|
429
|
+
[
|
|
430
|
+
'app',
|
|
431
|
+
'GitHub App',
|
|
432
|
+
'Use an app installation with access to this repository.',
|
|
433
|
+
],
|
|
434
|
+
[
|
|
435
|
+
'token',
|
|
436
|
+
'Personal access token',
|
|
437
|
+
'Add your token after creating the source.',
|
|
438
|
+
],
|
|
439
|
+
], (value) => setGithubAuthentication(value))), githubAuthentication === 'app'
|
|
440
|
+
? input('config/installationId', {
|
|
441
|
+
required: true,
|
|
442
|
+
number: true,
|
|
443
|
+
minimum: 1,
|
|
444
|
+
})
|
|
445
|
+
: null] })) : null] })) : null, type === 'composer_repository' ? (_jsxs(_Fragment, { children: [input('config/selection/packages', { multiline: true }), input('config/selection/patterns', { multiline: true })] })) : null, type === 'npm_registry' ? (_jsxs(_Fragment, { children: [input('config/scopes', { multiline: true }), !editing
|
|
446
|
+
? field('registeredPatterns', _jsx("textarea", { id: "source-registeredPatterns", name: "registeredPatterns", rows: 3, readOnly: true, value: scopeNamePatterns(scopes).join('\n') }), 'Names to register after adding this source')
|
|
447
|
+
: null] })) : null] }, `primary:${type}`)) : null, !editing ? (_jsx("p", { className: "text-sm text-neutral-600", children: proxy
|
|
448
|
+
? 'No credentials are needed to add this proxy.'
|
|
449
|
+
: type === 'vcs' && provider === 'github'
|
|
450
|
+
? githubAuthentication === 'app'
|
|
451
|
+
? 'After adding this source, save the GitHub App credentials.'
|
|
452
|
+
: 'After adding this source, save your GitHub personal access token as a bearer credential.'
|
|
453
|
+
: type === 'vcs' && provider === 'ssh'
|
|
454
|
+
? 'After adding this source, save an SSH private key and known hosts.'
|
|
455
|
+
: 'After adding this source, save its credentials to finish setup.' })) : null, _jsxs("details", { className: "min-w-0", children: [_jsx("summary", { className: "min-h-11 cursor-pointer py-3 text-sm font-medium", children: "Advanced settings" }), _jsxs("div", { className: "grid gap-4 pt-2", children: [_jsx("p", { className: "text-sm text-neutral-600", children: "Optional sync, visibility, retention, and connection settings." }), configEnabled ? (_jsxs("div", { className: "grid gap-4", children: [type === 'composer_repository' || type === 'npm_registry'
|
|
456
|
+
? input('config/distHosts', { multiline: true })
|
|
457
|
+
: null, type === 'composer_repository' ? (_jsxs(_Fragment, { children: [check('config/mirrorsFallback'), editing ? check('config/selection/expandPatterns') : null] })) : null, type === 'vcs' ? (_jsxs(_Fragment, { children: [input('config/packageName'), input('config/refs/branches', { multiline: true }), check('config/refs/tags', undefined, undefined, true)] })) : null, type === 'packagist_proxy' && editing ? check('config/githubToken') : null] }, `advanced:${type}`)) : null, type === 'packagist_proxy' && editing ? (_jsx("p", { className: "text-sm text-neutral-600", children: "To enable Use GitHub token, save a bearer credential with your GitHub token, then select Use GitHub token and save the source." })) : null, input('pollIntervalSeconds', {
|
|
458
|
+
number: true,
|
|
459
|
+
minimum: 1,
|
|
460
|
+
value: source?.pollIntervalSeconds ?? 300,
|
|
461
|
+
}), field('removalPolicy', _jsxs(Select, { id: "source-removalPolicy", name: "removalPolicy", className: "h-11 text-base sm:text-sm", "aria-invalid": !!errors.removalPolicy, "aria-describedby": describedBy('removalPolicy'), defaultValue: source?.removalPolicy ?? 'flag', children: [_jsx("option", { value: "flag", children: "Keep available and mark removed" }), _jsx("option", { value: "exclude", children: "Exclude from package resolution" })] })), check('defaultVisibleToNewProjects'), input('retentionDaysOverride', { number: true, minimum: 0 }), input('userAgent')] })] })] })] }), _jsxs(DialogFooter, { className: "shrink-0 border-t border-neutral-200 bg-white px-6 pt-4 pb-[max(1rem,env(safe-area-inset-bottom))]", children: [_jsx(Button, { className: "min-h-11", type: "button", variant: "outline", disabled: busy, onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", className: "min-h-11", disabled: busy, children: editing ? 'Save source' : 'Add source' })] })] })] }) }));
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=source-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-form.js","sourceRoot":"","sources":["../../../src/pages/sources/source-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const SYNC_POLL_INTERVAL_MS = 2000;
|
|
2
|
+
export declare const SYNC_POLL_ATTEMPTS = 15;
|
|
3
|
+
type SyncStatus = {
|
|
4
|
+
sync?: {
|
|
5
|
+
generation: string;
|
|
6
|
+
listing: boolean;
|
|
7
|
+
queued: number;
|
|
8
|
+
running: number;
|
|
9
|
+
retrying?: number;
|
|
10
|
+
};
|
|
11
|
+
status: string;
|
|
12
|
+
lastPolledAt: string | null;
|
|
13
|
+
lastSuccessAt: string | null;
|
|
14
|
+
lastError: string | null;
|
|
15
|
+
};
|
|
16
|
+
export declare function syncStatusChanged(before: SyncStatus, after: SyncStatus): boolean;
|
|
17
|
+
export declare function syncPollResult(before: SyncStatus, after: SyncStatus): boolean | 'pending';
|
|
18
|
+
export declare function pollSync(refresh: () => Promise<boolean | 'pending'>, visibility?: Pick<Document, 'hidden' | 'addEventListener' | 'removeEventListener'> | undefined): () => void;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=sync-poll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-poll.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/sync-poll.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,WAQtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAOzF;AAED,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,EAC3C,UAAU,GACN,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,GAAG,qBAAqB,CAAC,GACrE,SAAkE,cAmDvE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export const SYNC_POLL_INTERVAL_MS = 2_000;
|
|
2
|
+
export const SYNC_POLL_ATTEMPTS = 15;
|
|
3
|
+
const PENDING_POLL_MAX_MS = 600_000;
|
|
4
|
+
const PENDING_POLL_MAX_INTERVAL_MS = 30_000;
|
|
5
|
+
export function syncStatusChanged(before, after) {
|
|
6
|
+
return (before.sync?.generation !== after.sync?.generation ||
|
|
7
|
+
before.status !== after.status ||
|
|
8
|
+
before.lastPolledAt !== after.lastPolledAt ||
|
|
9
|
+
before.lastSuccessAt !== after.lastSuccessAt ||
|
|
10
|
+
before.lastError !== after.lastError);
|
|
11
|
+
}
|
|
12
|
+
export function syncPollResult(before, after) {
|
|
13
|
+
if (after.sync &&
|
|
14
|
+
(after.sync.listing || after.sync.queued + after.sync.running + (after.sync.retrying ?? 0) > 0))
|
|
15
|
+
return 'pending';
|
|
16
|
+
return syncStatusChanged(before, after);
|
|
17
|
+
}
|
|
18
|
+
export function pollSync(refresh, visibility = typeof document === 'undefined' ? undefined : document) {
|
|
19
|
+
const expiresAt = Date.now() + PENDING_POLL_MAX_MS;
|
|
20
|
+
let stopped = false;
|
|
21
|
+
let attempts = 0;
|
|
22
|
+
let pending = false;
|
|
23
|
+
let interval = SYNC_POLL_INTERVAL_MS;
|
|
24
|
+
let timer;
|
|
25
|
+
const deadline = setTimeout(() => stop(), PENDING_POLL_MAX_MS);
|
|
26
|
+
const stop = () => {
|
|
27
|
+
stopped = true;
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
clearTimeout(deadline);
|
|
30
|
+
visibility?.removeEventListener('visibilitychange', changed);
|
|
31
|
+
};
|
|
32
|
+
const changed = () => {
|
|
33
|
+
if (visibility?.hidden)
|
|
34
|
+
stop();
|
|
35
|
+
};
|
|
36
|
+
const schedule = () => {
|
|
37
|
+
if (stopped ||
|
|
38
|
+
visibility?.hidden ||
|
|
39
|
+
Date.now() >= expiresAt ||
|
|
40
|
+
(!pending && attempts >= SYNC_POLL_ATTEMPTS)) {
|
|
41
|
+
stop();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
timer = setTimeout(() => {
|
|
45
|
+
if (stopped || visibility?.hidden || Date.now() >= expiresAt) {
|
|
46
|
+
stop();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
attempts++;
|
|
50
|
+
void refresh().then((complete) => {
|
|
51
|
+
if (complete === 'pending') {
|
|
52
|
+
attempts = 0;
|
|
53
|
+
pending = true;
|
|
54
|
+
interval = Math.min(interval * 2, PENDING_POLL_MAX_INTERVAL_MS);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
pending = false;
|
|
58
|
+
interval = SYNC_POLL_INTERVAL_MS;
|
|
59
|
+
}
|
|
60
|
+
if (complete === true)
|
|
61
|
+
stop();
|
|
62
|
+
else
|
|
63
|
+
schedule();
|
|
64
|
+
}, stop);
|
|
65
|
+
}, interval);
|
|
66
|
+
};
|
|
67
|
+
visibility?.addEventListener('visibilitychange', changed);
|
|
68
|
+
schedule();
|
|
69
|
+
return stop;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=sync-poll.js.map
|