@nonameolsson/nightjar 0.0.0-stage → 0.1.0
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 +21 -0
- package/README.md +341 -2
- package/dist/adapter-module.d.ts +18 -0
- package/dist/adapter-module.js +83 -0
- package/dist/adapter-module.js.map +1 -0
- package/dist/adapters.d.ts +15 -0
- package/dist/adapters.js +160 -0
- package/dist/adapters.js.map +1 -0
- package/dist/args.d.ts +12 -0
- package/dist/args.js +79 -0
- package/dist/args.js.map +1 -0
- package/dist/ask.d.ts +6 -0
- package/dist/ask.js +27 -0
- package/dist/ask.js.map +1 -0
- package/dist/azure-devops/api.d.ts +34 -0
- package/dist/azure-devops/api.js +98 -0
- package/dist/azure-devops/api.js.map +1 -0
- package/dist/azure-devops/code-host.d.ts +36 -0
- package/dist/azure-devops/code-host.js +185 -0
- package/dist/azure-devops/code-host.js.map +1 -0
- package/dist/azure-devops/fake-azure-devops.d.ts +90 -0
- package/dist/azure-devops/fake-azure-devops.js +728 -0
- package/dist/azure-devops/fake-azure-devops.js.map +1 -0
- package/dist/azure-devops/index.d.ts +8 -0
- package/dist/azure-devops/index.js +11 -0
- package/dist/azure-devops/index.js.map +1 -0
- package/dist/azure-devops/sign-in.d.ts +11 -0
- package/dist/azure-devops/sign-in.js +68 -0
- package/dist/azure-devops/sign-in.js.map +1 -0
- package/dist/azure-devops/text.d.ts +1 -0
- package/dist/azure-devops/text.js +41 -0
- package/dist/azure-devops/text.js.map +1 -0
- package/dist/azure-devops/tracker.d.ts +44 -0
- package/dist/azure-devops/tracker.js +333 -0
- package/dist/azure-devops/tracker.js.map +1 -0
- package/dist/build.d.ts +72 -0
- package/dist/build.js +442 -0
- package/dist/build.js.map +1 -0
- package/dist/check.d.ts +8 -0
- package/dist/check.js +25 -0
- package/dist/check.js.map +1 -0
- package/dist/checks.d.ts +38 -0
- package/dist/checks.js +179 -0
- package/dist/checks.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-host.d.ts +19 -0
- package/dist/code-host.js +2 -0
- package/dist/code-host.js.map +1 -0
- package/dist/config.d.ts +65 -0
- package/dist/config.js +215 -0
- package/dist/config.js.map +1 -0
- package/dist/contract/case.d.ts +4 -0
- package/dist/contract/case.js +2 -0
- package/dist/contract/case.js.map +1 -0
- package/dist/contract/code-host.d.ts +24 -0
- package/dist/contract/code-host.js +108 -0
- package/dist/contract/code-host.js.map +1 -0
- package/dist/contract/command.d.ts +2 -0
- package/dist/contract/command.js +36 -0
- package/dist/contract/command.js.map +1 -0
- package/dist/contract/feature-writer.d.ts +3 -0
- package/dist/contract/feature-writer.js +101 -0
- package/dist/contract/feature-writer.js.map +1 -0
- package/dist/contract/run.d.ts +18 -0
- package/dist/contract/run.js +89 -0
- package/dist/contract/run.js.map +1 -0
- package/dist/contract/tracker.d.ts +30 -0
- package/dist/contract/tracker.js +250 -0
- package/dist/contract/tracker.js.map +1 -0
- package/dist/create.d.ts +9 -0
- package/dist/create.js +112 -0
- package/dist/create.js.map +1 -0
- package/dist/doctor.d.ts +4 -0
- package/dist/doctor.js +37 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fakes/code-host.d.ts +21 -0
- package/dist/fakes/code-host.js +42 -0
- package/dist/fakes/code-host.js.map +1 -0
- package/dist/fakes/harness.d.ts +7 -0
- package/dist/fakes/harness.js +68 -0
- package/dist/fakes/harness.js.map +1 -0
- package/dist/fakes/machine.d.ts +10 -0
- package/dist/fakes/machine.js +94 -0
- package/dist/fakes/machine.js.map +1 -0
- package/dist/fakes/tracker.d.ts +40 -0
- package/dist/fakes/tracker.js +116 -0
- package/dist/fakes/tracker.js.map +1 -0
- package/dist/feature-file.d.ts +12 -0
- package/dist/feature-file.js +84 -0
- package/dist/feature-file.js.map +1 -0
- package/dist/git.d.ts +9 -0
- package/dist/git.js +12 -0
- package/dist/git.js.map +1 -0
- package/dist/github/api.d.ts +37 -0
- package/dist/github/api.js +66 -0
- package/dist/github/api.js.map +1 -0
- package/dist/github/code-host.d.ts +19 -0
- package/dist/github/code-host.js +105 -0
- package/dist/github/code-host.js.map +1 -0
- package/dist/github/fake-gh.d.ts +17 -0
- package/dist/github/fake-gh.js +51 -0
- package/dist/github/fake-gh.js.map +1 -0
- package/dist/github/fake-github.d.ts +58 -0
- package/dist/github/fake-github.js +285 -0
- package/dist/github/fake-github.js.map +1 -0
- package/dist/github/labels.d.ts +3 -0
- package/dist/github/labels.js +44 -0
- package/dist/github/labels.js.map +1 -0
- package/dist/github/tracker.d.ts +28 -0
- package/dist/github/tracker.js +208 -0
- package/dist/github/tracker.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +18 -0
- package/dist/init.js +217 -0
- package/dist/init.js.map +1 -0
- package/dist/ledger.d.ts +13 -0
- package/dist/ledger.js +49 -0
- package/dist/ledger.js.map +1 -0
- package/dist/main.d.ts +11 -0
- package/dist/main.js +199 -0
- package/dist/main.js.map +1 -0
- package/dist/person-config.d.ts +8 -0
- package/dist/person-config.js +41 -0
- package/dist/person-config.js.map +1 -0
- package/dist/plan.d.ts +9 -0
- package/dist/plan.js +27 -0
- package/dist/plan.js.map +1 -0
- package/dist/ports.d.ts +16 -0
- package/dist/ports.js +104 -0
- package/dist/ports.js.map +1 -0
- package/dist/prompt.d.ts +103 -0
- package/dist/prompt.js +143 -0
- package/dist/prompt.js.map +1 -0
- package/dist/queue.d.ts +20 -0
- package/dist/queue.js +94 -0
- package/dist/queue.js.map +1 -0
- package/dist/say.d.ts +2 -0
- package/dist/say.js +4 -0
- package/dist/say.js.map +1 -0
- package/dist/session.d.ts +39 -0
- package/dist/session.js +144 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +4 -0
- package/dist/settings.js +83 -0
- package/dist/settings.js.map +1 -0
- package/dist/signals.d.ts +5 -0
- package/dist/signals.js +13 -0
- package/dist/signals.js.map +1 -0
- package/dist/status-shape.d.ts +53 -0
- package/dist/status-shape.js +3 -0
- package/dist/status-shape.js.map +1 -0
- package/dist/status.d.ts +23 -0
- package/dist/status.js +56 -0
- package/dist/status.js.map +1 -0
- package/dist/tracker.d.ts +56 -0
- package/dist/tracker.js +12 -0
- package/dist/tracker.js.map +1 -0
- package/dist/worktree.d.ts +28 -0
- package/dist/worktree.js +144 -0
- package/dist/worktree.js.map +1 -0
- package/docs/ticket-contract.md +85 -0
- package/package.json +74 -5
- package/plugin/nightjar-status/.claude-plugin/plugin.json +5 -0
- package/plugin/nightjar-status/hooks/format.ts +48 -0
- package/plugin/nightjar-status/hooks/hooks.json +1 -0
- package/plugin/nightjar-status/hooks/register.ts +51 -0
- package/schema/factory.schema.json +330 -0
- package/skills/nightjar-feature/SKILL.md +73 -0
- package/src/status-shape.ts +44 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// Azure Repos as a Code host: never completes, abandons or publishes a pull request, nor sets a work item's state (docs/adr/0002).
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { firstLine } from '../git.js';
|
|
4
|
+
import { AzureDevOpsFailure } from './api.js';
|
|
5
|
+
import { workItem } from './tracker.js';
|
|
6
|
+
const API = 'api-version=7.1';
|
|
7
|
+
// Azure Repos keeps no more of a pull request's description than this.
|
|
8
|
+
export const DESCRIPTION_LIMIT = 4000;
|
|
9
|
+
// Everything after it in a body is the references Nightjar placed.
|
|
10
|
+
export const REFERENCES_MARK = '<!-- nightjar:references -->';
|
|
11
|
+
const CUT = '\n\n(Cut short: Azure Repos keeps 4000 characters of a description.)';
|
|
12
|
+
const PullSchema = z.looseObject({
|
|
13
|
+
pullRequestId: z.int(),
|
|
14
|
+
description: z.string().nullish(),
|
|
15
|
+
artifactId: z.string().nullish(),
|
|
16
|
+
repository: z.looseObject({
|
|
17
|
+
id: z.string(),
|
|
18
|
+
project: z.looseObject({ id: z.string() }).nullish()
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
const PullsSchema = z.looseObject({ value: z.array(PullSchema) });
|
|
22
|
+
const LinkedSchema = z.looseObject({ value: z.array(z.looseObject({ id: z.coerce.string() })) });
|
|
23
|
+
function split(body) {
|
|
24
|
+
const at = body.indexOf(REFERENCES_MARK);
|
|
25
|
+
if (at < 0)
|
|
26
|
+
return { text: body.trimEnd(), lines: [] };
|
|
27
|
+
const lines = body
|
|
28
|
+
.slice(at + REFERENCES_MARK.length)
|
|
29
|
+
.split('\n')
|
|
30
|
+
.map((l) => l.trim())
|
|
31
|
+
.filter((l) => l !== '');
|
|
32
|
+
return { text: body.slice(0, at).trimEnd(), lines };
|
|
33
|
+
}
|
|
34
|
+
// The body with its references, cut to what Azure Repos keeps; the references are never cut.
|
|
35
|
+
function join(text, lines) {
|
|
36
|
+
const tail = lines.length === 0 ? '' : `\n\n${REFERENCES_MARK}\n${lines.join('\n')}`;
|
|
37
|
+
if (text.length + tail.length <= DESCRIPTION_LIMIT)
|
|
38
|
+
return `${text}${tail}`;
|
|
39
|
+
return `${text.slice(0, Math.max(0, DESCRIPTION_LIMIT - tail.length - CUT.length)).trimEnd()}${CUT}${tail}`;
|
|
40
|
+
}
|
|
41
|
+
export class AzureReposCodeHost {
|
|
42
|
+
api;
|
|
43
|
+
settings;
|
|
44
|
+
git;
|
|
45
|
+
project;
|
|
46
|
+
repo;
|
|
47
|
+
// where git pushes: the repo on Azure DevOps
|
|
48
|
+
remote;
|
|
49
|
+
constructor(api, settings, git,
|
|
50
|
+
// a spec pushes to a folder instead
|
|
51
|
+
remote) {
|
|
52
|
+
this.api = api;
|
|
53
|
+
this.settings = settings;
|
|
54
|
+
this.git = git;
|
|
55
|
+
this.project = encodeURIComponent(settings.project);
|
|
56
|
+
this.repo = encodeURIComponent(settings.repo);
|
|
57
|
+
this.remote = remote ?? api.at(`${this.project}/_git/${this.repo}`);
|
|
58
|
+
}
|
|
59
|
+
at(path) {
|
|
60
|
+
return this.api.at(`${this.project}/_apis/git/repositories/${this.repo}/${path}`);
|
|
61
|
+
}
|
|
62
|
+
pullUrl(id) {
|
|
63
|
+
return this.api.at(`${this.project}/_git/${this.repo}/pullrequest/${String(id)}`);
|
|
64
|
+
}
|
|
65
|
+
toPull = (raw) => ({
|
|
66
|
+
id: raw.pullRequestId,
|
|
67
|
+
url: this.pullUrl(raw.pullRequestId)
|
|
68
|
+
});
|
|
69
|
+
// Reads the repo, so a run that cannot reach it stops before it builds anything.
|
|
70
|
+
async check() {
|
|
71
|
+
await this.api.call(`read the repo ${this.settings.repo}`, {
|
|
72
|
+
method: 'GET',
|
|
73
|
+
url: this.api.at(`${this.project}/_apis/git/repositories/${this.repo}?${API}`)
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// The sign-in rides in git's environment as a header for Azure DevOps alone, never in a URL or a config file.
|
|
77
|
+
async signedIn() {
|
|
78
|
+
return {
|
|
79
|
+
GIT_TERMINAL_PROMPT: '0',
|
|
80
|
+
GIT_CONFIG_COUNT: '2',
|
|
81
|
+
GIT_CONFIG_KEY_0: 'http.https://dev.azure.com/.extraHeader',
|
|
82
|
+
GIT_CONFIG_VALUE_0: `Authorization: ${await this.api.signIn.authorization()}`,
|
|
83
|
+
// no credential helper asks a person for a password, or stores one
|
|
84
|
+
GIT_CONFIG_KEY_1: 'credential.helper',
|
|
85
|
+
GIT_CONFIG_VALUE_1: ''
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async push(folder, branch) {
|
|
89
|
+
const args = ['push', '-q', this.remote, `HEAD:refs/heads/${branch}`];
|
|
90
|
+
let got = await this.git(args, folder, await this.signedIn());
|
|
91
|
+
if (got.missing)
|
|
92
|
+
throw new AzureDevOpsFailure('git is not on the PATH.');
|
|
93
|
+
if (!got.ok) {
|
|
94
|
+
// a token from az lasts an hour, and a run may outlast it
|
|
95
|
+
await this.api.signIn.refresh();
|
|
96
|
+
got = await this.git(args, folder, await this.signedIn());
|
|
97
|
+
}
|
|
98
|
+
if (!got.ok) {
|
|
99
|
+
throw new AzureDevOpsFailure(`git could not push ${branch} to Azure Repos: ${firstLine(got.err)}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async openPull(branch) {
|
|
103
|
+
const query = new URLSearchParams({
|
|
104
|
+
'searchCriteria.sourceRefName': `refs/heads/${branch}`,
|
|
105
|
+
'searchCriteria.status': 'active'
|
|
106
|
+
});
|
|
107
|
+
const got = await this.api.parse(`find the pull request of ${branch}`, { method: 'GET', url: this.at(`pullrequests?${query.toString()}&${API}`) }, PullsSchema);
|
|
108
|
+
const first = got.value[0];
|
|
109
|
+
return first ? this.toPull(first) : null;
|
|
110
|
+
}
|
|
111
|
+
async createDraft(request) {
|
|
112
|
+
const made = await this.api.parse(`open a pull request for ${request.head}`, {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
url: this.at(`pullrequests?${API}`),
|
|
115
|
+
body: {
|
|
116
|
+
sourceRefName: `refs/heads/${request.head}`,
|
|
117
|
+
targetRefName: `refs/heads/${request.base}`,
|
|
118
|
+
title: request.title,
|
|
119
|
+
description: join(request.body.trimEnd(), []),
|
|
120
|
+
isDraft: true
|
|
121
|
+
}
|
|
122
|
+
}, PullSchema);
|
|
123
|
+
return this.toPull(made);
|
|
124
|
+
}
|
|
125
|
+
read(pull) {
|
|
126
|
+
return this.api.parse(`read pull request ${String(pull.id)}`, { method: 'GET', url: this.at(`pullrequests/${String(pull.id)}?${API}`) }, PullSchema);
|
|
127
|
+
}
|
|
128
|
+
async setBody(pull, description) {
|
|
129
|
+
await this.api.call(`update pull request ${String(pull.id)}`, {
|
|
130
|
+
method: 'PATCH',
|
|
131
|
+
url: this.at(`pullrequests/${String(pull.id)}?${API}`),
|
|
132
|
+
body: { description }
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
async editBody(pull, body) {
|
|
136
|
+
const { lines } = split((await this.read(pull)).description ?? '');
|
|
137
|
+
await this.setBody(pull, join(body.trimEnd(), lines));
|
|
138
|
+
}
|
|
139
|
+
async placeReferences(pull, references) {
|
|
140
|
+
if (this.settings.referencesAs === 'work items') {
|
|
141
|
+
await this.linkWorkItems(pull, references);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const { text, lines } = split((await this.read(pull)).description ?? '');
|
|
145
|
+
const added = references.map((r) => `- ${r.text}`).filter((l) => !lines.includes(l));
|
|
146
|
+
if (added.length === 0)
|
|
147
|
+
return;
|
|
148
|
+
await this.setBody(pull, join(text, [...new Set([...lines, ...added])]));
|
|
149
|
+
}
|
|
150
|
+
// Links each work item not linked yet, through an artifact link on the work item, as Azure Repos does itself.
|
|
151
|
+
async linkWorkItems(pull, references) {
|
|
152
|
+
if (references.length === 0)
|
|
153
|
+
return;
|
|
154
|
+
const raw = await this.read(pull);
|
|
155
|
+
const artifact = raw.artifactId ??
|
|
156
|
+
`vstfs:///Git/PullRequestId/${raw.repository.project?.id ?? ''}%2F${raw.repository.id}%2F${String(raw.pullRequestId)}`;
|
|
157
|
+
const linked = await this.api.parse(`read the work items of pull request ${String(pull.id)}`, { method: 'GET', url: this.at(`pullRequests/${String(pull.id)}/workitems?${API}`) }, LinkedSchema);
|
|
158
|
+
const done = new Set(linked.value.map((w) => w.id));
|
|
159
|
+
for (const { id } of references) {
|
|
160
|
+
if (done.has(id))
|
|
161
|
+
continue;
|
|
162
|
+
done.add(id);
|
|
163
|
+
await this.api.call(`link work item ${id} to pull request ${String(pull.id)}`, {
|
|
164
|
+
method: 'PATCH',
|
|
165
|
+
url: this.api.at(`_apis/wit/workitems/${String(workItem(id))}?${API}`),
|
|
166
|
+
contentType: 'application/json-patch+json',
|
|
167
|
+
body: [
|
|
168
|
+
{
|
|
169
|
+
op: 'add',
|
|
170
|
+
path: '/relations/-',
|
|
171
|
+
value: { rel: 'ArtifactLink', url: artifact, attributes: { name: 'Pull Request' } }
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async comment(pull, body) {
|
|
178
|
+
await this.api.call(`comment on pull request ${String(pull.id)}`, {
|
|
179
|
+
method: 'POST',
|
|
180
|
+
url: this.at(`pullRequests/${String(pull.id)}/threads?${API}`),
|
|
181
|
+
body: { comments: [{ parentCommentId: 0, content: body, commentType: 1 }] }
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=code-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-host.js","sourceRoot":"","sources":["../../src/azure-devops/code-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { AzureDevOpsCall, AzureDevOpsRequest } from './api.js';
|
|
2
|
+
import type { AzureDevOpsSignIn } from './sign-in.js';
|
|
3
|
+
export interface NewWorkItem {
|
|
4
|
+
readonly type: string;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly description?: string;
|
|
7
|
+
readonly html?: boolean;
|
|
8
|
+
readonly assignedTo?: string;
|
|
9
|
+
readonly tags?: readonly string[];
|
|
10
|
+
readonly closed?: boolean;
|
|
11
|
+
readonly state?: string;
|
|
12
|
+
readonly rank?: {
|
|
13
|
+
readonly field: string;
|
|
14
|
+
readonly value: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface FakePullRequest {
|
|
18
|
+
readonly pullRequestId: number;
|
|
19
|
+
readonly repository: string;
|
|
20
|
+
readonly sourceRefName: string;
|
|
21
|
+
readonly targetRefName: string;
|
|
22
|
+
readonly title: string;
|
|
23
|
+
readonly description: string;
|
|
24
|
+
readonly isDraft: boolean;
|
|
25
|
+
readonly status: 'active';
|
|
26
|
+
readonly comments: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export interface Asked {
|
|
29
|
+
readonly method: AzureDevOpsCall['method'];
|
|
30
|
+
readonly url: string;
|
|
31
|
+
readonly body: unknown;
|
|
32
|
+
}
|
|
33
|
+
export declare class FakeAzureDevOps {
|
|
34
|
+
readonly organization: string;
|
|
35
|
+
readonly project: string;
|
|
36
|
+
readonly person: string;
|
|
37
|
+
private readonly items;
|
|
38
|
+
private readonly people;
|
|
39
|
+
private readonly discussion;
|
|
40
|
+
private clock;
|
|
41
|
+
readonly asked: Asked[];
|
|
42
|
+
private readonly faults;
|
|
43
|
+
private readonly repositories;
|
|
44
|
+
private readonly pulls;
|
|
45
|
+
private readonly artifacts;
|
|
46
|
+
constructor(organization: string, project: string, person: string);
|
|
47
|
+
join(uniqueName: string, { contributor }: {
|
|
48
|
+
contributor: boolean;
|
|
49
|
+
}): void;
|
|
50
|
+
workItem(item: NewWorkItem): number;
|
|
51
|
+
addChild(parent: number, child: number): void;
|
|
52
|
+
precede(predecessor: number, successor: number): void;
|
|
53
|
+
say(id: number, author: string, text: string, { html }?: {
|
|
54
|
+
html?: boolean | undefined;
|
|
55
|
+
}): void;
|
|
56
|
+
tagsOf(id: number): string[];
|
|
57
|
+
repository(name: string): void;
|
|
58
|
+
pullRequestAt(id: number): FakePullRequest;
|
|
59
|
+
linkedWorkItems(pullId: number): number[];
|
|
60
|
+
failNext(match: RegExp, status: number): void;
|
|
61
|
+
signIn(): AzureDevOpsSignIn;
|
|
62
|
+
readonly request: AzureDevOpsRequest;
|
|
63
|
+
private answer;
|
|
64
|
+
private reposAnswer;
|
|
65
|
+
private listPulls;
|
|
66
|
+
private createPull;
|
|
67
|
+
private updatePull;
|
|
68
|
+
private linkArtifact;
|
|
69
|
+
private replacePull;
|
|
70
|
+
private artifactOf;
|
|
71
|
+
private renderRepository;
|
|
72
|
+
private renderPull;
|
|
73
|
+
private query;
|
|
74
|
+
private wiql;
|
|
75
|
+
private clause;
|
|
76
|
+
private batch;
|
|
77
|
+
private patch;
|
|
78
|
+
private create;
|
|
79
|
+
private comments;
|
|
80
|
+
private addComment;
|
|
81
|
+
private identities;
|
|
82
|
+
private render;
|
|
83
|
+
private renderComment;
|
|
84
|
+
private identity;
|
|
85
|
+
private who;
|
|
86
|
+
private link;
|
|
87
|
+
private itemUrl;
|
|
88
|
+
private get;
|
|
89
|
+
private tick;
|
|
90
|
+
}
|