@mannyc1/ts-release 0.0.5 → 0.0.7
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/ARCHITECTURE.md +13 -8
- package/README.md +226 -447
- package/SPEC.md +48 -43
- package/dist/artifacts/adapter.d.ts +39 -0
- package/dist/artifacts/adapter.d.ts.map +1 -0
- package/dist/artifacts/adapter.js +23 -0
- package/dist/artifacts/adapter.js.map +1 -0
- package/dist/artifacts/registry.d.ts +21 -0
- package/dist/artifacts/registry.d.ts.map +1 -0
- package/dist/artifacts/registry.js +21 -0
- package/dist/artifacts/registry.js.map +1 -0
- package/dist/config/schema.js +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/domain/artifact.d.ts +85 -3
- package/dist/domain/artifact.d.ts.map +1 -1
- package/dist/domain/artifact.js +171 -3
- package/dist/domain/artifact.js.map +1 -1
- package/dist/domain/evidence.d.ts +16 -65
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +15 -60
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/operation.d.ts +7 -17
- package/dist/domain/operation.d.ts.map +1 -1
- package/dist/domain/operation.js +27 -154
- package/dist/domain/operation.js.map +1 -1
- package/dist/domain/release.d.ts +1 -49
- package/dist/domain/release.d.ts.map +1 -1
- package/dist/domain/release.js +2 -47
- package/dist/domain/release.js.map +1 -1
- package/dist/domain/remote-state.d.ts +1 -38
- package/dist/domain/remote-state.d.ts.map +1 -1
- package/dist/domain/remote-state.js +2 -38
- package/dist/domain/remote-state.js.map +1 -1
- package/dist/domain/target.d.ts +14 -1
- package/dist/domain/target.d.ts.map +1 -1
- package/dist/domain/target.js +17 -3
- package/dist/domain/target.js.map +1 -1
- package/dist/host/platform.d.ts.map +1 -1
- package/dist/host/platform.js +4 -11
- package/dist/host/platform.js.map +1 -1
- package/dist/internal/workspace-path.d.ts +4 -5
- package/dist/internal/workspace-path.d.ts.map +1 -1
- package/dist/internal/workspace-path.js +3 -0
- package/dist/internal/workspace-path.js.map +1 -1
- package/dist/planner/artifact-inventory.d.ts.map +1 -1
- package/dist/planner/artifact-inventory.js +4 -3
- package/dist/planner/artifact-inventory.js.map +1 -1
- package/dist/planner/errors.d.ts +2 -16
- package/dist/planner/errors.d.ts.map +1 -1
- package/dist/planner/errors.js +2 -14
- package/dist/planner/errors.js.map +1 -1
- package/dist/planner/evidence-recorder.d.ts +8 -6
- package/dist/planner/evidence-recorder.d.ts.map +1 -1
- package/dist/planner/evidence-recorder.js +72 -54
- package/dist/planner/evidence-recorder.js.map +1 -1
- package/dist/planner/executor.d.ts +12 -12
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +45 -68
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/normalize-release.d.ts +3 -0
- package/dist/planner/normalize-release.d.ts.map +1 -1
- package/dist/planner/normalize-release.js +128 -4
- package/dist/planner/normalize-release.js.map +1 -1
- package/dist/planner/reconcile.d.ts.map +1 -1
- package/dist/planner/reconcile.js +2 -6
- package/dist/planner/reconcile.js.map +1 -1
- package/dist/planner/render-plan.d.ts.map +1 -1
- package/dist/planner/render-plan.js +12 -19
- package/dist/planner/render-plan.js.map +1 -1
- package/dist/targets/adapter-helpers.d.ts +36 -6
- package/dist/targets/adapter-helpers.d.ts.map +1 -1
- package/dist/targets/adapter-helpers.js +103 -7
- package/dist/targets/adapter-helpers.js.map +1 -1
- package/dist/targets/github.d.ts +2 -2
- package/dist/targets/github.d.ts.map +1 -1
- package/dist/targets/github.js +4 -14
- package/dist/targets/github.js.map +1 -1
- package/dist/targets/homebrew.d.ts +2 -2
- package/dist/targets/homebrew.d.ts.map +1 -1
- package/dist/targets/homebrew.js +143 -40
- package/dist/targets/homebrew.js.map +1 -1
- package/dist/targets/live.d.ts.map +1 -1
- package/dist/targets/live.js +29 -20
- package/dist/targets/live.js.map +1 -1
- package/dist/targets/npm.d.ts +2 -2
- package/dist/targets/npm.d.ts.map +1 -1
- package/dist/targets/npm.js +33 -61
- package/dist/targets/npm.js.map +1 -1
- package/dist/targets/pypi.d.ts +2 -2
- package/dist/targets/pypi.d.ts.map +1 -1
- package/dist/targets/pypi.js +67 -41
- package/dist/targets/pypi.js.map +1 -1
- package/dist/targets/scoop.d.ts.map +1 -1
- package/dist/targets/scoop.js +18 -8
- package/dist/targets/scoop.js.map +1 -1
- package/dist/workflows/config.d.ts +69 -121
- package/dist/workflows/config.d.ts.map +1 -1
- package/dist/workflows/config.js +80 -129
- package/dist/workflows/config.js.map +1 -1
- package/dist/workflows/diagnostics.d.ts +2 -2
- package/dist/workflows/diagnostics.d.ts.map +1 -1
- package/dist/workflows/diagnostics.js +14 -20
- package/dist/workflows/diagnostics.js.map +1 -1
- package/dist/workflows/distribution.d.ts +25 -0
- package/dist/workflows/distribution.d.ts.map +1 -0
- package/dist/workflows/distribution.js +24 -0
- package/dist/workflows/distribution.js.map +1 -0
- package/dist/workflows/evidence.d.ts +4 -13
- package/dist/workflows/evidence.d.ts.map +1 -1
- package/dist/workflows/evidence.js +15 -37
- package/dist/workflows/evidence.js.map +1 -1
- package/dist/workflows/index.d.ts +1 -0
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +1 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/init.d.ts +3 -3
- package/dist/workflows/init.d.ts.map +1 -1
- package/dist/workflows/init.js +49 -13
- package/dist/workflows/init.js.map +1 -1
- package/examples/README.md +4 -4
- package/package.json +18 -15
- package/templates/README.md +15 -2
- package/templates/bun-cli-github/README.md +14 -0
- package/templates/bun-cli-github/release.config.json +89 -0
- package/dist/domain/status.d.ts +0 -43
- package/dist/domain/status.d.ts.map +0 -1
- package/dist/domain/status.js +0 -51
- package/dist/domain/status.js.map +0 -1
- package/dist/planner/release-eligibility.d.ts +0 -39
- package/dist/planner/release-eligibility.d.ts.map +0 -1
- package/dist/planner/release-eligibility.js +0 -578
- package/dist/planner/release-eligibility.js.map +0 -1
- package/dist/planner/status.d.ts +0 -40
- package/dist/planner/status.d.ts.map +0 -1
- package/dist/planner/status.js +0 -342
- package/dist/planner/status.js.map +0 -1
package/dist/targets/pypi.js
CHANGED
|
@@ -1,49 +1,79 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { CommandSpec,
|
|
2
|
+
import { CommandSpec, PublishCommandOperation } from "../domain/operation.js";
|
|
3
|
+
import { TargetAuthSetup, TargetRequiredPermission } from "../domain/target.js";
|
|
3
4
|
import { PlanConstructionError } from "../planner/errors.js";
|
|
4
|
-
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
|
+
import { dryRunValidationOperation, noAuthCommand, readOnlyCommandValidationOperation, rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
6
|
const twineUsernameEnv = "TWINE_USERNAME";
|
|
6
7
|
const twinePasswordEnv = "TWINE_PASSWORD";
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
const trustedPublishingAuthEnvNames = [
|
|
9
|
+
"ACTIONS_ID_TOKEN_REQUEST_URL",
|
|
10
|
+
"ACTIONS_ID_TOKEN_REQUEST_TOKEN"
|
|
11
|
+
];
|
|
12
|
+
const envNames = (target) => target.trustedPublishing !== undefined
|
|
13
|
+
? trustedPublishingAuthEnvNames
|
|
14
|
+
: target.usernameEnv === undefined || target.passwordEnv === undefined
|
|
15
|
+
? []
|
|
16
|
+
: [target.usernameEnv, target.passwordEnv];
|
|
17
|
+
const pythonExecutable = (target) => target.pythonExecutable ?? "python";
|
|
18
|
+
const twineAuthCommand = (target, args) => CommandSpec.make({
|
|
19
|
+
executable: pythonExecutable(target),
|
|
20
|
+
args: ["-m", "twine", ...args],
|
|
21
|
+
requiredEnv: envNames(target),
|
|
22
|
+
redactedEnv: envNames(target)
|
|
23
|
+
});
|
|
24
|
+
const trustedPublishingAuthSetup = (workflow) => TargetAuthSetup.make({
|
|
25
|
+
runsIn: "ci",
|
|
26
|
+
provider: "github-actions",
|
|
27
|
+
workflow,
|
|
28
|
+
requiredPermissions: [
|
|
29
|
+
TargetRequiredPermission.make({ name: "id-token", value: "write" })
|
|
30
|
+
],
|
|
31
|
+
prerequisites: ["pypi-trusted-publisher-configured"]
|
|
13
32
|
});
|
|
14
|
-
const
|
|
15
|
-
|
|
33
|
+
export const pypiTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport), target.trustedPublishing === undefined
|
|
34
|
+
? undefined
|
|
35
|
+
: trustedPublishingAuthSetup(target.trustedPublishing.workflow));
|
|
16
36
|
const targetArtifacts = (target, model) => model.artifacts.filter((artifact) => artifact.consumers.includes(target.id));
|
|
17
|
-
const pypiDryRunOperation = (target, artifactPaths) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
: validationNoteOperation({
|
|
29
|
-
id: `${target.id}:twine-check`,
|
|
30
|
-
targetId: target.id,
|
|
31
|
-
dryRunSupport,
|
|
32
|
-
simulatedDescription: "Record simulated PyPI distribution validation.",
|
|
33
|
-
skippedDescription: "Record skipped PyPI distribution validation.",
|
|
34
|
-
simulatedMessage: "PyPI distribution validation is simulated by the deterministic release plan; no twine check command was planned.",
|
|
35
|
-
skippedMessage: "PyPI distribution validation was skipped because this target declares no dry-run support."
|
|
36
|
-
});
|
|
37
|
-
};
|
|
37
|
+
const pypiDryRunOperation = (target, artifactPaths) => dryRunValidationOperation({
|
|
38
|
+
id: `${target.id}:twine-check`,
|
|
39
|
+
targetId: target.id,
|
|
40
|
+
dryRunSupport: target.dryRunSupport,
|
|
41
|
+
nativeDescription: "Validate Python distribution metadata with twine check.",
|
|
42
|
+
command: noAuthCommand(pythonExecutable(target), ["-m", "twine", "check", ...artifactPaths]),
|
|
43
|
+
simulatedDescription: "Record simulated PyPI distribution validation.",
|
|
44
|
+
skippedDescription: "Record skipped PyPI distribution validation.",
|
|
45
|
+
simulatedMessage: "PyPI distribution validation is simulated by the deterministic release plan; no twine check command was planned.",
|
|
46
|
+
skippedMessage: "PyPI distribution validation was skipped because this target declares no dry-run support."
|
|
47
|
+
});
|
|
38
48
|
const pypiPublishArgs = (target, artifactPaths) => [
|
|
39
49
|
"upload",
|
|
50
|
+
"--non-interactive",
|
|
40
51
|
"--repository-url",
|
|
41
52
|
target.repositoryUrl,
|
|
42
53
|
...artifactPaths
|
|
43
54
|
];
|
|
55
|
+
const pypiAuthOperation = (target) => target.trustedPublishing === undefined
|
|
56
|
+
? []
|
|
57
|
+
: [
|
|
58
|
+
validationNoteOperation({
|
|
59
|
+
id: `${target.id}:twine-trusted-publishing-auth`,
|
|
60
|
+
targetId: target.id,
|
|
61
|
+
dryRunSupport: "simulated",
|
|
62
|
+
simulatedDescription: "Record PyPI trusted publishing authentication mode.",
|
|
63
|
+
skippedDescription: "Record skipped PyPI trusted publishing authentication mode.",
|
|
64
|
+
simulatedMessage: `PyPI trusted publishing authenticates during twine upload with CI OIDC; twine check does not validate this mode. This target expects provider ${target.trustedPublishing.provider}, workflow ${target.trustedPublishing.workflow}, GitHub Actions permission id-token: write, and a trusted publisher configured on PyPI.`,
|
|
65
|
+
skippedMessage: "PyPI trusted publishing authentication validation was skipped."
|
|
66
|
+
})
|
|
67
|
+
];
|
|
44
68
|
const validateAuthConfig = (target) => {
|
|
45
69
|
const hasUsername = target.usernameEnv !== undefined;
|
|
46
70
|
const hasPassword = target.passwordEnv !== undefined;
|
|
71
|
+
if (target.trustedPublishing !== undefined && (hasUsername || hasPassword)) {
|
|
72
|
+
return Effect.fail(PlanConstructionError.make({
|
|
73
|
+
targetId: target.id,
|
|
74
|
+
reason: "PyPI trusted publishing uses CI OIDC and must not also declare usernameEnv or passwordEnv."
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
47
77
|
if (!hasUsername && !hasPassword) {
|
|
48
78
|
return Effect.void;
|
|
49
79
|
}
|
|
@@ -80,30 +110,26 @@ export const planPyPiOperations = Effect.fn("planPyPiOperations")(function* (tar
|
|
|
80
110
|
}
|
|
81
111
|
const artifactPaths = artifacts.map((artifact) => artifact.path);
|
|
82
112
|
return [
|
|
83
|
-
|
|
113
|
+
readOnlyCommandValidationOperation({
|
|
84
114
|
id: `${target.id}:python-version`,
|
|
85
115
|
targetId: target.id,
|
|
86
116
|
description: "Check Python CLI availability.",
|
|
87
|
-
|
|
88
|
-
gate: noApprovalGate("CLI availability validation is read-only."),
|
|
89
|
-
command: pythonCommand(target, ["--version"], false)
|
|
117
|
+
command: noAuthCommand(pythonExecutable(target), ["--version"])
|
|
90
118
|
}),
|
|
91
|
-
|
|
119
|
+
readOnlyCommandValidationOperation({
|
|
92
120
|
id: `${target.id}:twine-version`,
|
|
93
121
|
targetId: target.id,
|
|
94
122
|
description: "Check Twine CLI availability.",
|
|
95
|
-
|
|
96
|
-
gate: noApprovalGate("Twine availability validation is read-only."),
|
|
97
|
-
command: twineCommand(target, ["--version"], false)
|
|
123
|
+
command: noAuthCommand(pythonExecutable(target), ["-m", "twine", "--version"])
|
|
98
124
|
}),
|
|
125
|
+
...pypiAuthOperation(target),
|
|
99
126
|
pypiDryRunOperation(target, artifactPaths),
|
|
100
127
|
PublishCommandOperation.make({
|
|
101
128
|
id: `${target.id}:twine-upload`,
|
|
102
129
|
targetId: target.id,
|
|
103
130
|
description: `Publish ${model.identity.name}@${model.identity.version} to PyPI-compatible registry.`,
|
|
104
131
|
risk: "irreversible",
|
|
105
|
-
|
|
106
|
-
command: twineCommand(target, pypiPublishArgs(target, artifactPaths), true)
|
|
132
|
+
command: twineAuthCommand(target, pypiPublishArgs(target, artifactPaths))
|
|
107
133
|
})
|
|
108
134
|
];
|
|
109
135
|
});
|
package/dist/targets/pypi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoop.d.ts","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"scoop.d.ts","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAEL,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAajD,mBAAmB,6BAA6B,CAAA;AAUhD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,iBAAiB,KAAG,kBACc,CAAA;AAsElF,eAAO,MAAM,mBAAmB,4ZAsC9B,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,kBAI1B,CAAA"}
|
package/dist/targets/scoop.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import {
|
|
2
|
+
import { RenderFileOperation, } from "../domain/operation.js";
|
|
3
3
|
import { PlanConstructionError } from "../planner/errors.js";
|
|
4
|
-
import {
|
|
4
|
+
import { catalogGitPublishOperations, catalogPathBaseName, findRequiredArtifact, requireSha256FileArtifact, rejectNoDryRunInStrictMode, rejectUnsupportedCatalogTokenEnv, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
5
|
const rejectUnsupportedTokenEnv = Effect.fn("rejectUnsupportedScoopTokenEnv")(function* (target) {
|
|
6
6
|
return yield* rejectUnsupportedCatalogTokenEnv({
|
|
7
7
|
targetId: target.id,
|
|
@@ -10,6 +10,16 @@ const rejectUnsupportedTokenEnv = Effect.fn("rejectUnsupportedScoopTokenEnv")(fu
|
|
|
10
10
|
});
|
|
11
11
|
});
|
|
12
12
|
export const scoopTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
13
|
+
const artifactUrl = (artifact, fallbackUrl) => fallbackUrl ?? artifact.downloadUrl ?? artifact.path;
|
|
14
|
+
const artifactBin = (target, artifact) => {
|
|
15
|
+
if (target.bin !== undefined) {
|
|
16
|
+
return target.bin;
|
|
17
|
+
}
|
|
18
|
+
const binaryName = artifact.variant?.binaryName;
|
|
19
|
+
return binaryName === undefined
|
|
20
|
+
? undefined
|
|
21
|
+
: [[catalogPathBaseName(artifact.path), binaryName]];
|
|
22
|
+
};
|
|
13
23
|
const renderManifest = (target, model) => Effect.gen(function* () {
|
|
14
24
|
const artifact = yield* findRequiredArtifact(model, target.id, target.artifactId, `Scoop target references missing artifact ${target.artifactId}.`);
|
|
15
25
|
const validated = yield* requireSha256FileArtifact(artifact, {
|
|
@@ -17,14 +27,15 @@ const renderManifest = (target, model) => Effect.gen(function* () {
|
|
|
17
27
|
directoryReason: "Scoop manifest artifacts must be file-like, not directories.",
|
|
18
28
|
checksumReason: "Scoop manifest rendering requires a sha256 artifact checksum."
|
|
19
29
|
});
|
|
30
|
+
const bin = artifactBin(target, validated.artifact);
|
|
20
31
|
const manifest = {
|
|
21
32
|
version: model.identity.version,
|
|
22
33
|
description: target.description ?? `${model.identity.name} ${model.identity.version} release artifact`,
|
|
23
34
|
homepage: target.homepage ?? `https://github.com/${target.repository}`,
|
|
24
35
|
...(target.license === undefined ? {} : { license: target.license }),
|
|
25
|
-
url:
|
|
36
|
+
url: artifactUrl(validated.artifact, target.url),
|
|
26
37
|
hash: validated.checksum.value,
|
|
27
|
-
...(
|
|
38
|
+
...(bin === undefined ? {} : { bin })
|
|
28
39
|
};
|
|
29
40
|
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
30
41
|
});
|
|
@@ -54,19 +65,18 @@ export const planScoopOperations = Effect.fn("planScoopOperations")(function* (t
|
|
|
54
65
|
targetId: target.id,
|
|
55
66
|
description: `Render Scoop manifest ${catalogPathBaseName(target.manifestPath)}.`,
|
|
56
67
|
risk: "writes-local",
|
|
57
|
-
gate: executeGate("Rendering a Scoop manifest writes a local generated file."),
|
|
58
68
|
path: target.manifestPath,
|
|
59
69
|
contents: manifest
|
|
60
70
|
}),
|
|
61
71
|
dryRunOperation(target, dryRunSupport),
|
|
62
|
-
|
|
72
|
+
...catalogGitPublishOperations({
|
|
63
73
|
id: `${target.id}:scoop-push`,
|
|
64
74
|
targetId: target.id,
|
|
65
75
|
description: `Push Scoop bucket update for ${model.identity.name}@${model.identity.version}.`,
|
|
66
76
|
mutability: target.mutability,
|
|
67
77
|
directory: target.bucketDirectory,
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
filePath: target.manifestPath,
|
|
79
|
+
commitMessage: `Update ${target.manifestName} to ${model.identity.version}`
|
|
70
80
|
})
|
|
71
81
|
];
|
|
72
82
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoop.js","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"scoop.js","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"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"}
|