create-rigline-plugin 1.0.0-alpha.0 → 1.0.0-alpha.2
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/dist/index.js +14 -42
- package/package.json +3 -2
- package/template/.github/workflows/release.yml +105 -0
- package/template/README.md +82 -67
- package/template/gitignore +4 -3
- package/template/package.json +19 -19
- package/template/plugins/__NAME__/README.md +19 -19
- package/template/plugins/__NAME__/package.json +16 -16
- package/template/plugins/__NAME__/rigline.json +14 -14
- package/template/plugins/__NAME__/src/index.test.ts +21 -21
- package/template/plugins/__NAME__/src/index.ts +64 -64
- package/template/plugins/__NAME__/tsconfig.json +5 -5
- package/template/pnpm-workspace.yaml +21 -21
- package/template/tsconfig.base.json +19 -19
- package/template/tsconfig.plugin.json +11 -11
- package/dist/index.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,37 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* `create-rigline-plugin`: scaffolds a workspace holding one plugin (decisions.md, D50).
|
|
4
|
-
*
|
|
5
|
-
* A pnpm workspace with `plugins/*` rather than a single-plugin repository, because the multi-plugin
|
|
6
|
-
* shape is a superset: it scaffolds correctly for one plugin, and a second plugin is then a
|
|
7
|
-
* directory copy rather than a restructure.
|
|
8
|
-
*
|
|
9
|
-
* The template is real files under `template/`, copied and substituted, rather than strings in this
|
|
10
|
-
* module. It stays readable and reviewable that way, and the example plugin's own source is a file
|
|
11
|
-
* an editor can check rather than a string literal with its backticks escaped. Two things that
|
|
12
|
-
* takes care of, both of which have caught people out before: `.gitignore` is shipped as
|
|
13
|
-
* `gitignore`, because npm renames a `.gitignore` inside a published tarball and the scaffolded
|
|
14
|
-
* repository would arrive without one; and `generated.ts` is shipped as a placeholder, so the
|
|
15
|
-
* scaffold typechecks before `rigline codegen` has ever run, which is the promise D40 makes and the
|
|
16
|
-
* one moment it is easiest to break.
|
|
17
|
-
*/
|
|
18
2
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
19
3
|
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
20
4
|
import { fileURLToPath } from "node:url";
|
|
21
|
-
/** The manifest's own rule for a name, which is also npm's for an unscoped package. */
|
|
22
5
|
const NAME_PATTERN = /^[a-z0-9][a-z0-9._-]{0,213}$/;
|
|
23
6
|
export class ScaffoldError extends Error {
|
|
24
7
|
}
|
|
25
|
-
/** The template shipped with this package. */
|
|
26
8
|
export function defaultTemplateDir() {
|
|
27
9
|
return resolve(dirname(fileURLToPath(import.meta.url)), "..", "template");
|
|
28
10
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
11
|
+
export function riglineRange() {
|
|
12
|
+
const path = resolve(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
13
|
+
const { version } = JSON.parse(readFileSync(path, "utf8"));
|
|
14
|
+
if (typeof version !== "string" || version.length === 0) {
|
|
15
|
+
throw new ScaffoldError(`this package's own version is missing from ${path}`);
|
|
16
|
+
}
|
|
17
|
+
return `^${version}`;
|
|
18
|
+
}
|
|
35
19
|
export function scaffold(options) {
|
|
36
20
|
const dir = resolve(options.target);
|
|
37
21
|
const name = options.name ?? basename(dir);
|
|
@@ -49,12 +33,11 @@ export function scaffold(options) {
|
|
|
49
33
|
const substitutions = {
|
|
50
34
|
NAME: name,
|
|
51
35
|
DESCRIPTION: options.description ?? `A Rigline plugin called ${name}.`,
|
|
36
|
+
RIGLINE_RANGE: options.riglineRange ?? riglineRange(),
|
|
52
37
|
};
|
|
53
38
|
const files = [];
|
|
54
39
|
for (const source of walk(templateDir)) {
|
|
55
40
|
const relativePath = substitute(relative(templateDir, source), substitutions);
|
|
56
|
-
// npm renames a `.gitignore` inside a published tarball, so the template ships it undotted and
|
|
57
|
-
// it is put back here. Without this the scaffolded repository arrives with none at all.
|
|
58
41
|
const written = relativePath === "gitignore" ? ".gitignore" : relativePath;
|
|
59
42
|
const target = join(dir, written);
|
|
60
43
|
mkdirSync(dirname(target), { recursive: true });
|
|
@@ -64,7 +47,6 @@ export function scaffold(options) {
|
|
|
64
47
|
files.sort();
|
|
65
48
|
return { dir, name, files };
|
|
66
49
|
}
|
|
67
|
-
/** Every file under `root`, recursively, in a stable order. */
|
|
68
50
|
function walk(root) {
|
|
69
51
|
const found = [];
|
|
70
52
|
for (const entry of readdirSync(root, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
@@ -76,7 +58,6 @@ function walk(root) {
|
|
|
76
58
|
}
|
|
77
59
|
return found;
|
|
78
60
|
}
|
|
79
|
-
/** `__NAME__` and `__DESCRIPTION__`, in a path or in a file's contents. */
|
|
80
61
|
function substitute(text, substitutions) {
|
|
81
62
|
let out = text;
|
|
82
63
|
for (const [key, value] of Object.entries(substitutions)) {
|
|
@@ -84,10 +65,7 @@ function substitute(text, substitutions) {
|
|
|
84
65
|
}
|
|
85
66
|
return out;
|
|
86
67
|
}
|
|
87
|
-
/** Everything this scaffold wants said afterwards, in the order it wants doing. */
|
|
88
68
|
export function nextSteps(result) {
|
|
89
|
-
// The relative path, unless it is the worse of the two: a target several directories up produces
|
|
90
|
-
// a run of `..` nobody wants to read, let alone type.
|
|
91
69
|
const from = relative(process.cwd(), result.dir);
|
|
92
70
|
const here = from === "" ? "." : from.startsWith("..") ? result.dir : from;
|
|
93
71
|
return [
|
|
@@ -105,10 +83,6 @@ export function nextSteps(result) {
|
|
|
105
83
|
`${join(here, "README.md")} has the rest, including the four rules worth reading first.`,
|
|
106
84
|
].join("\n");
|
|
107
85
|
}
|
|
108
|
-
/**
|
|
109
|
-
* The command. One positional, the directory; `--name` where it should differ from the directory's
|
|
110
|
-
* own, and `--description` for the sentence that lands in three files.
|
|
111
|
-
*/
|
|
112
86
|
export function main(argv) {
|
|
113
87
|
const positionals = [];
|
|
114
88
|
let name;
|
|
@@ -146,14 +120,12 @@ export function main(argv) {
|
|
|
146
120
|
throw error;
|
|
147
121
|
}
|
|
148
122
|
}
|
|
149
|
-
const USAGE = `create-rigline-plugin
|
|
150
|
-
|
|
151
|
-
pnpm create rigline-plugin <directory> [--name NAME] [--description TEXT]
|
|
152
|
-
|
|
153
|
-
Scaffolds a pnpm workspace holding one Rigline plugin. The directory's own name is the plugin's
|
|
123
|
+
const USAGE = `create-rigline-plugin
|
|
124
|
+
|
|
125
|
+
pnpm create rigline-plugin <directory> [--name NAME] [--description TEXT]
|
|
126
|
+
|
|
127
|
+
Scaffolds a pnpm workspace holding one Rigline plugin. The directory's own name is the plugin's
|
|
154
128
|
unless --name says otherwise; a second plugin later is a copy of the first.`;
|
|
155
|
-
// Only when run as the command, so that a test may import `scaffold` without scaffolding anything.
|
|
156
|
-
// Compared as resolved paths rather than by suffix, which a directory named after the bin defeats.
|
|
157
129
|
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === resolve(process.argv[1])) {
|
|
158
130
|
process.exitCode = main(process.argv.slice(2));
|
|
159
131
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-rigline-plugin",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.2",
|
|
4
4
|
"description": "Scaffold a workspace for Claude Code VS Code extension plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rigline",
|
|
@@ -22,13 +22,14 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"files": [
|
|
24
24
|
"dist",
|
|
25
|
+
"!dist/**/*.map",
|
|
25
26
|
"template"
|
|
26
27
|
],
|
|
27
28
|
"bin": {
|
|
28
29
|
"create-rigline-plugin": "./dist/index.js"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@rigline/plugin-api": "1.0.0-alpha.
|
|
32
|
+
"@rigline/plugin-api": "1.0.0-alpha.2"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
|
34
35
|
"build": "tsc -p tsconfig.build.json",
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Publish your plugins to npm, without an npm token ever being stored here.
|
|
2
|
+
#
|
|
3
|
+
# GitHub authenticates to npm over OIDC, so the secret this workflow would otherwise need does not
|
|
4
|
+
# exist. What it does is *stage*: a staged version sits in a queue that nobody can install until you
|
|
5
|
+
# approve it from your own machine with 2FA. Approving says you meant to ship it.
|
|
6
|
+
#
|
|
7
|
+
# pnpm stage approve
|
|
8
|
+
#
|
|
9
|
+
# Before this works, once per package, on npmjs.com:
|
|
10
|
+
#
|
|
11
|
+
# 1. Publish the first version by hand. A package that does not exist yet has nothing for a
|
|
12
|
+
# trusted publisher to attach to: `pnpm publish -r --otp <code>` (a one-time password, not a
|
|
13
|
+
# token — there is then nothing to store or revoke).
|
|
14
|
+
# 2. Add a trusted publisher under the package's settings, naming this repository and this file
|
|
15
|
+
# by path. Renaming this file breaks the exchange until the entry is edited to match.
|
|
16
|
+
# Set its permission to stage-only.
|
|
17
|
+
#
|
|
18
|
+
# `-r` stages every package in the workspace whose version is not already on the registry, in
|
|
19
|
+
# dependency order, so bumping one plugin releases one plugin.
|
|
20
|
+
name: Release
|
|
21
|
+
|
|
22
|
+
on:
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
inputs:
|
|
25
|
+
dist_tag:
|
|
26
|
+
description: The tag these versions go to. A prerelease belongs on `next`, not `latest`.
|
|
27
|
+
type: choice
|
|
28
|
+
options: [latest, next]
|
|
29
|
+
default: latest
|
|
30
|
+
dry_run:
|
|
31
|
+
description: Build, test and pack, but stage nothing
|
|
32
|
+
type: boolean
|
|
33
|
+
default: false
|
|
34
|
+
|
|
35
|
+
permissions:
|
|
36
|
+
contents: read
|
|
37
|
+
|
|
38
|
+
concurrency:
|
|
39
|
+
group: release
|
|
40
|
+
cancel-in-progress: false
|
|
41
|
+
|
|
42
|
+
jobs:
|
|
43
|
+
stage:
|
|
44
|
+
name: Stage to npm
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
permissions:
|
|
47
|
+
contents: read
|
|
48
|
+
# What lets the runner ask GitHub for the token npm exchanges for a publishing one. Without
|
|
49
|
+
# it there is nothing to send, and pnpm falls back to looking for a credential that is not
|
|
50
|
+
# here — reporting that as a warning, not an error, so read the log rather than the tick.
|
|
51
|
+
id-token: write
|
|
52
|
+
steps:
|
|
53
|
+
- name: Refuse anything but the default branch
|
|
54
|
+
if: github.ref_name != github.event.repository.default_branch
|
|
55
|
+
run: |
|
|
56
|
+
echo "::error::Releases go from ${{ github.event.repository.default_branch }}."
|
|
57
|
+
exit 1
|
|
58
|
+
|
|
59
|
+
- uses: actions/checkout@v5
|
|
60
|
+
- uses: pnpm/action-setup@v4
|
|
61
|
+
- uses: actions/setup-node@v5
|
|
62
|
+
with:
|
|
63
|
+
node-version: 26
|
|
64
|
+
cache: pnpm
|
|
65
|
+
|
|
66
|
+
- run: pnpm install --frozen-lockfile
|
|
67
|
+
- run: pnpm typecheck
|
|
68
|
+
- run: pnpm build
|
|
69
|
+
- run: pnpm test
|
|
70
|
+
|
|
71
|
+
# `generated.ts` is committed, so this needs no installed extension. `rigline codegen` is
|
|
72
|
+
# something you run locally against your own editor and commit the result of.
|
|
73
|
+
- name: Stage
|
|
74
|
+
if: ${{ !inputs.dry_run }}
|
|
75
|
+
run: pnpm stage publish -r --tag ${{ inputs.dist_tag }} --provenance --report-summary --no-git-checks
|
|
76
|
+
|
|
77
|
+
- name: Pack only
|
|
78
|
+
if: ${{ inputs.dry_run }}
|
|
79
|
+
run: pnpm stage publish -r --tag ${{ inputs.dist_tag }} --dry-run --report-summary --no-git-checks
|
|
80
|
+
|
|
81
|
+
# Nothing notifies you that a stage is waiting, and npm returns no stage id to quote, so the
|
|
82
|
+
# run summary names what went up and the one command that finishes the job.
|
|
83
|
+
- name: Summarise
|
|
84
|
+
if: always()
|
|
85
|
+
run: |
|
|
86
|
+
if [ ! -f pnpm-publish-summary.json ]; then
|
|
87
|
+
echo "## Nothing was staged" >> "$GITHUB_STEP_SUMMARY"
|
|
88
|
+
echo "" >> "$GITHUB_STEP_SUMMARY"
|
|
89
|
+
echo "Either the run stopped before staging, or every version is already on the registry." >> "$GITHUB_STEP_SUMMARY"
|
|
90
|
+
exit 0
|
|
91
|
+
fi
|
|
92
|
+
node -e '
|
|
93
|
+
const s = JSON.parse(require("fs").readFileSync("pnpm-publish-summary.json", "utf8"));
|
|
94
|
+
const out = [];
|
|
95
|
+
const staged = s.publishedPackages ?? [];
|
|
96
|
+
if (staged.length === 0) {
|
|
97
|
+
out.push("## Nothing was staged", "", "Every version is already on the registry. Bump one to release it.");
|
|
98
|
+
} else {
|
|
99
|
+
out.push("## Staged, and awaiting approval", "", "| package | version |", "| --- | --- |");
|
|
100
|
+
for (const p of staged) out.push(`| \`${p.name}\` | \`${p.version}\` |`);
|
|
101
|
+
out.push("", "**Nobody can install these yet.** On a machine with your npm 2FA:", "", "```", "pnpm stage approve", "```", "",
|
|
102
|
+
"It lists what is queued and takes the batch under one one-time password. A version you would rather not ship needs no action — do not approve it, and it expires.");
|
|
103
|
+
}
|
|
104
|
+
require("fs").appendFileSync(process.env.GITHUB_STEP_SUMMARY, out.join("\n") + "\n");
|
|
105
|
+
'
|
package/template/README.md
CHANGED
|
@@ -1,67 +1,82 @@
|
|
|
1
|
-
# __NAME__
|
|
2
|
-
|
|
3
|
-
Plugins for the Claude Code VS Code extension, built with [Rigline](https://github.com/Rigline/Rigline).
|
|
4
|
-
|
|
5
|
-
A plugin is one browser ES module and a `rigline.json` manifest. This workspace holds one to start
|
|
6
|
-
with; adding a second is a directory copy.
|
|
7
|
-
|
|
8
|
-
## First run
|
|
9
|
-
|
|
10
|
-
pnpm install
|
|
11
|
-
pnpm codegen # harvest the installed extension, and commit the result
|
|
12
|
-
pnpm build
|
|
13
|
-
pnpm rigline add plugins/__NAME__
|
|
14
|
-
|
|
15
|
-
Then reload the webview: **Developer: Reload Webviews** in the command palette. The badge appears
|
|
16
|
-
in the composer footer.
|
|
17
|
-
|
|
18
|
-
`pnpm codegen` writes `generated.ts` at this workspace's root: the identifiers the installed
|
|
19
|
-
extension actually has, as types every plugin here compiles against. Commit it. It is replaced when
|
|
20
|
-
you run against a newer extension, and the diff is how you find out what moved.
|
|
21
|
-
|
|
22
|
-
## The loop while you work
|
|
23
|
-
|
|
24
|
-
pnpm rigline dev plugins/__NAME__
|
|
25
|
-
|
|
26
|
-
Rebuilds and re-injects on every save. Reload webviews to see each change.
|
|
27
|
-
|
|
28
|
-
## What a plugin declares
|
|
29
|
-
|
|
30
|
-
Everything in `uses` is a dependency on the installed extension still having something. An update
|
|
31
|
-
that retires one refuses this plugin by name, at install, rather than leaving it subtly broken —
|
|
32
|
-
which is the whole reason to declare rather than to reach.
|
|
33
|
-
|
|
34
|
-
pnpm rigline check # what this extension version would refuse, and why
|
|
35
|
-
pnpm rigline list # every plugin installed, and what each says it can do
|
|
36
|
-
|
|
37
|
-
Put a dependency you can do without under `uses.optional`: it is checked the same way and costs the
|
|
38
|
-
plugin that one decoration rather than the whole plugin.
|
|
39
|
-
|
|
40
|
-
## Testing
|
|
41
|
-
|
|
42
|
-
`pnpm test` runs the pure half — the functions that do not touch the DOM. Whether a decoration
|
|
43
|
-
lands in the right place, survives a re-render, or costs a row a line of height is a question only
|
|
44
|
-
the app can answer: build, add, reload, look.
|
|
45
|
-
|
|
46
|
-
## Publishing
|
|
47
|
-
|
|
48
|
-
A plugin is published as an ordinary npm package carrying `rigline.json` and its built entry, and
|
|
49
|
-
installed with `rigline add <name>`. Nothing about publishing is special: `rigline build` bundles
|
|
50
|
-
everything the entry imports, so a published plugin has no runtime dependency to install, and
|
|
51
|
-
`@rigline/plugin-api` stays a *devDependency*.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
1
|
+
# __NAME__
|
|
2
|
+
|
|
3
|
+
Plugins for the Claude Code VS Code extension, built with [Rigline](https://github.com/Rigline/Rigline).
|
|
4
|
+
|
|
5
|
+
A plugin is one browser ES module and a `rigline.json` manifest. This workspace holds one to start
|
|
6
|
+
with; adding a second is a directory copy.
|
|
7
|
+
|
|
8
|
+
## First run
|
|
9
|
+
|
|
10
|
+
pnpm install
|
|
11
|
+
pnpm codegen # harvest the installed extension, and commit the result
|
|
12
|
+
pnpm build
|
|
13
|
+
pnpm rigline add plugins/__NAME__
|
|
14
|
+
|
|
15
|
+
Then reload the webview: **Developer: Reload Webviews** in the command palette. The badge appears
|
|
16
|
+
in the composer footer.
|
|
17
|
+
|
|
18
|
+
`pnpm codegen` writes `generated.ts` at this workspace's root: the identifiers the installed
|
|
19
|
+
extension actually has, as types every plugin here compiles against. Commit it. It is replaced when
|
|
20
|
+
you run against a newer extension, and the diff is how you find out what moved.
|
|
21
|
+
|
|
22
|
+
## The loop while you work
|
|
23
|
+
|
|
24
|
+
pnpm rigline dev plugins/__NAME__
|
|
25
|
+
|
|
26
|
+
Rebuilds and re-injects on every save. Reload webviews to see each change.
|
|
27
|
+
|
|
28
|
+
## What a plugin declares
|
|
29
|
+
|
|
30
|
+
Everything in `uses` is a dependency on the installed extension still having something. An update
|
|
31
|
+
that retires one refuses this plugin by name, at install, rather than leaving it subtly broken —
|
|
32
|
+
which is the whole reason to declare rather than to reach.
|
|
33
|
+
|
|
34
|
+
pnpm rigline check # what this extension version would refuse, and why
|
|
35
|
+
pnpm rigline list # every plugin installed, and what each says it can do
|
|
36
|
+
|
|
37
|
+
Put a dependency you can do without under `uses.optional`: it is checked the same way and costs the
|
|
38
|
+
plugin that one decoration rather than the whole plugin.
|
|
39
|
+
|
|
40
|
+
## Testing
|
|
41
|
+
|
|
42
|
+
`pnpm test` runs the pure half — the functions that do not touch the DOM. Whether a decoration
|
|
43
|
+
lands in the right place, survives a re-render, or costs a row a line of height is a question only
|
|
44
|
+
the app can answer: build, add, reload, look.
|
|
45
|
+
|
|
46
|
+
## Publishing
|
|
47
|
+
|
|
48
|
+
A plugin is published as an ordinary npm package carrying `rigline.json` and its built entry, and
|
|
49
|
+
installed with `rigline add <name>`. Nothing about publishing is special: `rigline build` bundles
|
|
50
|
+
everything the entry imports, so a published plugin has no runtime dependency to install, and
|
|
51
|
+
`@rigline/plugin-api` stays a *devDependency*.
|
|
52
|
+
|
|
53
|
+
`.github/workflows/release.yml` does it from CI, with no npm token stored anywhere: GitHub
|
|
54
|
+
authenticates to npm over OIDC, and what the workflow does is *stage* — a version nobody can
|
|
55
|
+
install until you approve it from your own machine with 2FA.
|
|
56
|
+
|
|
57
|
+
pnpm stage approve
|
|
58
|
+
|
|
59
|
+
Two things to set up once per package, the first time. Publish version one by hand, because a
|
|
60
|
+
package that does not exist yet has nothing for a trusted publisher to attach to — `pnpm publish -r
|
|
61
|
+
--otp <code>`, supplying a one-time password rather than creating a token, so there is nothing to
|
|
62
|
+
store or to revoke afterwards. Then add a trusted publisher in the package's settings on npmjs.com,
|
|
63
|
+
naming this repository and `release.yml` by path, with its permission set to stage-only. The
|
|
64
|
+
workflow's own header repeats both, where you will be when you need them.
|
|
65
|
+
|
|
66
|
+
Adding a second plugin later means one more of each: npm's exchange is per package, so a trusted
|
|
67
|
+
publisher is too. That is friction on a second plugin, never on a second release — `-r` stages only
|
|
68
|
+
what you bumped.
|
|
69
|
+
|
|
70
|
+
## Rules that will cost you if you break them
|
|
71
|
+
|
|
72
|
+
- **Never name a class from the bundle by hand.** They are minifier output and change every build.
|
|
73
|
+
Use `ctx.anchor("footerSpacer")` for curated names, and `ctx.cls(module, local)` — declared in the
|
|
74
|
+
manifest — for anything not curated yet.
|
|
75
|
+
- **Never scope a stylesheet rule to an anchor's bare class.** One class is applied wherever that
|
|
76
|
+
look is wanted, so a rule written against it lands on every control wearing it. Scope to something
|
|
77
|
+
you placed.
|
|
78
|
+
- **Ask what a container does about its children before decorating it.** The composer footer
|
|
79
|
+
measures its own element children and re-measures on any foreign change inside it; footer
|
|
80
|
+
decorations go beside `footerSpacer`, with `ctx.mountBefore`.
|
|
81
|
+
- **Do not poll for an element.** `ctx.watch(name, …)` hands it over when it appears and again when
|
|
82
|
+
the app replaces it.
|
package/template/gitignore
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
node_modules/
|
|
2
|
-
dist/
|
|
3
|
-
*.log
|
|
1
|
+
node_modules/
|
|
2
|
+
dist/
|
|
3
|
+
*.log
|
|
4
|
+
pnpm-publish-summary.json
|
package/template/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "__NAME__-plugins",
|
|
3
|
-
"private": true,
|
|
4
|
-
"type": "module",
|
|
5
|
-
"packageManager": "pnpm@12.3.4",
|
|
6
|
-
"engines": { "node": ">=26" },
|
|
7
|
-
"scripts": {
|
|
8
|
-
"codegen": "rigline codegen",
|
|
9
|
-
"build": "pnpm -r build",
|
|
10
|
-
"typecheck": "pnpm -r typecheck",
|
|
11
|
-
"test": "vitest run"
|
|
12
|
-
},
|
|
13
|
-
"devDependencies": {
|
|
14
|
-
"@rigline/plugin-api": "
|
|
15
|
-
"rigline": "
|
|
16
|
-
"typescript": "^7.0.2",
|
|
17
|
-
"vitest": "^5.0.0"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__-plugins",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@12.3.4",
|
|
6
|
+
"engines": { "node": ">=26" },
|
|
7
|
+
"scripts": {
|
|
8
|
+
"codegen": "rigline codegen",
|
|
9
|
+
"build": "pnpm -r build",
|
|
10
|
+
"typecheck": "pnpm -r typecheck",
|
|
11
|
+
"test": "vitest run"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@rigline/plugin-api": "__RIGLINE_RANGE__",
|
|
15
|
+
"rigline": "__RIGLINE_RANGE__",
|
|
16
|
+
"typescript": "^7.0.2",
|
|
17
|
+
"vitest": "^5.0.0"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# __NAME__
|
|
2
|
-
|
|
3
|
-
__DESCRIPTION__
|
|
4
|
-
|
|
5
|
-
## Depends on
|
|
6
|
-
|
|
7
|
-
- `uses.anchors: ["footerSpacer"]` — the flexible gap dividing the composer footer's left cluster
|
|
8
|
-
from its right, and the anchor every footer decoration uses. The footer measures the widths of its
|
|
9
|
-
own element children to pick a fit stage; the spacer renders in every stage, so a decoration
|
|
10
|
-
beside it contributes a constant width and the measurement settles.
|
|
11
|
-
- `uses.mount` — `ctx.watch` and `ctx.mountBefore`, which place the badge and keep it placed across
|
|
12
|
-
a re-render.
|
|
13
|
-
- `uses.style` — one stylesheet, scoped to the class this plugin puts on its own element.
|
|
14
|
-
- `uses.tools` — `ctx.onToolUse`, every completed tool call the assistant makes.
|
|
15
|
-
|
|
16
|
-
## Notes
|
|
17
|
-
|
|
18
|
-
`badgeText` is exported and tested because it is the half a plain test run can hold. Everything
|
|
19
|
-
else is a question about the app, and only the app can answer it.
|
|
1
|
+
# __NAME__
|
|
2
|
+
|
|
3
|
+
__DESCRIPTION__
|
|
4
|
+
|
|
5
|
+
## Depends on
|
|
6
|
+
|
|
7
|
+
- `uses.anchors: ["footerSpacer"]` — the flexible gap dividing the composer footer's left cluster
|
|
8
|
+
from its right, and the anchor every footer decoration uses. The footer measures the widths of its
|
|
9
|
+
own element children to pick a fit stage; the spacer renders in every stage, so a decoration
|
|
10
|
+
beside it contributes a constant width and the measurement settles.
|
|
11
|
+
- `uses.mount` — `ctx.watch` and `ctx.mountBefore`, which place the badge and keep it placed across
|
|
12
|
+
a re-render.
|
|
13
|
+
- `uses.style` — one stylesheet, scoped to the class this plugin puts on its own element.
|
|
14
|
+
- `uses.tools` — `ctx.onToolUse`, every completed tool call the assistant makes.
|
|
15
|
+
|
|
16
|
+
## Notes
|
|
17
|
+
|
|
18
|
+
`badgeText` is exported and tested because it is the half a plain test run can hold. Everything
|
|
19
|
+
else is a question about the app, and only the app can answer it.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "rigline-plugin-__NAME__",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "__DESCRIPTION__",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"files": ["dist", "rigline.json"],
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build": "rigline build",
|
|
10
|
-
"typecheck": "tsc -p tsconfig.json"
|
|
11
|
-
},
|
|
12
|
-
"devDependencies": {
|
|
13
|
-
"@rigline/plugin-api": "
|
|
14
|
-
"rigline": "
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "rigline-plugin-__NAME__",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "__DESCRIPTION__",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"files": ["dist", "rigline.json"],
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "rigline build",
|
|
10
|
+
"typecheck": "tsc -p tsconfig.json"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"@rigline/plugin-api": "__RIGLINE_RANGE__",
|
|
14
|
+
"rigline": "__RIGLINE_RANGE__"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../../node_modules/@rigline/plugin-api/schema/manifest.json",
|
|
3
|
-
"api": 1,
|
|
4
|
-
"name": "__NAME__",
|
|
5
|
-
"description": "__DESCRIPTION__",
|
|
6
|
-
"entry": "dist/index.js",
|
|
7
|
-
"surfaces": ["editor", "sidebar"],
|
|
8
|
-
"uses": {
|
|
9
|
-
"anchors": ["footerSpacer"],
|
|
10
|
-
"mount": true,
|
|
11
|
-
"style": true,
|
|
12
|
-
"tools": true
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../node_modules/@rigline/plugin-api/schema/manifest.json",
|
|
3
|
+
"api": 1,
|
|
4
|
+
"name": "__NAME__",
|
|
5
|
+
"description": "__DESCRIPTION__",
|
|
6
|
+
"entry": "dist/index.js",
|
|
7
|
+
"surfaces": ["editor", "sidebar"],
|
|
8
|
+
"uses": {
|
|
9
|
+
"anchors": ["footerSpacer"],
|
|
10
|
+
"mount": true,
|
|
11
|
+
"style": true,
|
|
12
|
+
"tools": true
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The pure half of the plugin, under plain `vitest`.
|
|
3
|
-
*
|
|
4
|
-
* Verification splits three ways, and knowing which tier a question belongs to is most of writing
|
|
5
|
-
* a test that is worth having. A pure function is this tier. Whether a decoration lands in the
|
|
6
|
-
* right place, survives a re-render, or costs the row a line of height is a question about the app,
|
|
7
|
-
* and only the app can answer it: build, `rigline add`, reload the webview, look.
|
|
8
|
-
*/
|
|
9
|
-
import { describe, expect, it } from "vitest";
|
|
10
|
-
import { badgeText } from "./index.ts";
|
|
11
|
-
|
|
12
|
-
describe("badgeText", () => {
|
|
13
|
-
it("says something before anything has happened", () => {
|
|
14
|
-
expect(badgeText(0)).toBe("no tools yet");
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it("does not make a reader read (s)", () => {
|
|
18
|
-
expect(badgeText(1)).toBe("1 tool call");
|
|
19
|
-
expect(badgeText(2)).toBe("2 tool calls");
|
|
20
|
-
});
|
|
21
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* The pure half of the plugin, under plain `vitest`.
|
|
3
|
+
*
|
|
4
|
+
* Verification splits three ways, and knowing which tier a question belongs to is most of writing
|
|
5
|
+
* a test that is worth having. A pure function is this tier. Whether a decoration lands in the
|
|
6
|
+
* right place, survives a re-render, or costs the row a line of height is a question about the app,
|
|
7
|
+
* and only the app can answer it: build, `rigline add`, reload the webview, look.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { badgeText } from "./index.ts";
|
|
11
|
+
|
|
12
|
+
describe("badgeText", () => {
|
|
13
|
+
it("says something before anything has happened", () => {
|
|
14
|
+
expect(badgeText(0)).toBe("no tools yet");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("does not make a reader read (s)", () => {
|
|
18
|
+
expect(badgeText(1)).toBe("1 tool call");
|
|
19
|
+
expect(badgeText(2)).toBe("2 tool calls");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* __DESCRIPTION__
|
|
3
|
-
*
|
|
4
|
-
* A worked example of the loop every plugin is: declare what you depend on in `rigline.json`, wait
|
|
5
|
-
* to be handed the element you decorate, and put something beside it. Replace the body; keep the
|
|
6
|
-
* shape.
|
|
7
|
-
*/
|
|
8
|
-
import { definePlugin, type PluginContext, type Teardown } from "@rigline/plugin-api";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* What the badge reads, for a given number of tool calls.
|
|
12
|
-
*
|
|
13
|
-
* Pure, and exported, because this is the half a plain `vitest` run can hold: anything that touches
|
|
14
|
-
* the DOM wants the app itself, and anything that does not should not need it. See
|
|
15
|
-
* `src/index.test.ts`.
|
|
16
|
-
*/
|
|
17
|
-
export function badgeText(calls: number): string {
|
|
18
|
-
if (calls === 0) return "no tools yet";
|
|
19
|
-
return `${calls} tool ${calls === 1 ? "call" : "calls"}`;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export default definePlugin({
|
|
23
|
-
setup(ctx: PluginContext): Teardown {
|
|
24
|
-
let calls = 0;
|
|
25
|
-
const badge = document.createElement("span");
|
|
26
|
-
badge.className = "example-badge";
|
|
27
|
-
badge.textContent = badgeText(calls);
|
|
28
|
-
|
|
29
|
-
// Scoped to a class this plugin put on its own element. Never scope a rule to an anchor's bare
|
|
30
|
-
// class: one class is applied wherever that look is wanted, so a rule written against it lands
|
|
31
|
-
// on every control wearing it. See the anchors guide.
|
|
32
|
-
const stopStyle = ctx.style(`
|
|
33
|
-
.example-badge {
|
|
34
|
-
font-size: 11px;
|
|
35
|
-
opacity: 0.7;
|
|
36
|
-
padding: 0 6px;
|
|
37
|
-
white-space: nowrap;
|
|
38
|
-
}
|
|
39
|
-
`);
|
|
40
|
-
|
|
41
|
-
// Every completed tool call the assistant makes. `uses.tools` is what makes this fire; without
|
|
42
|
-
// the declaration it throws and disables the plugin, which is the point of declaring.
|
|
43
|
-
const stopTools = ctx.onToolUse(() => {
|
|
44
|
-
calls += 1;
|
|
45
|
-
badge.textContent = badgeText(calls);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// `watch` hands over the element for an anchor whenever one is in the document, and again if
|
|
49
|
-
// the app replaces it. No plugin polls for an element.
|
|
50
|
-
//
|
|
51
|
-
// `footerSpacer` and `mountBefore` together, rather than any other footer anchor: the composer
|
|
52
|
-
// footer measures the widths of its own element children to pick a fit stage, and resets that
|
|
53
|
-
// measurement on any foreign change inside it. A decoration whose membership of the footer
|
|
54
|
-
// changes with the stage fights the ladder that moved it. The spacer renders in every stage, so
|
|
55
|
-
// a decoration beside it contributes a constant width and the ladder settles.
|
|
56
|
-
const stopWatch = ctx.watch("footerSpacer", (spacer) => ctx.mountBefore(spacer, () => badge));
|
|
57
|
-
|
|
58
|
-
return () => {
|
|
59
|
-
stopWatch();
|
|
60
|
-
stopTools();
|
|
61
|
-
stopStyle();
|
|
62
|
-
};
|
|
63
|
-
},
|
|
64
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* __DESCRIPTION__
|
|
3
|
+
*
|
|
4
|
+
* A worked example of the loop every plugin is: declare what you depend on in `rigline.json`, wait
|
|
5
|
+
* to be handed the element you decorate, and put something beside it. Replace the body; keep the
|
|
6
|
+
* shape.
|
|
7
|
+
*/
|
|
8
|
+
import { definePlugin, type PluginContext, type Teardown } from "@rigline/plugin-api";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* What the badge reads, for a given number of tool calls.
|
|
12
|
+
*
|
|
13
|
+
* Pure, and exported, because this is the half a plain `vitest` run can hold: anything that touches
|
|
14
|
+
* the DOM wants the app itself, and anything that does not should not need it. See
|
|
15
|
+
* `src/index.test.ts`.
|
|
16
|
+
*/
|
|
17
|
+
export function badgeText(calls: number): string {
|
|
18
|
+
if (calls === 0) return "no tools yet";
|
|
19
|
+
return `${calls} tool ${calls === 1 ? "call" : "calls"}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default definePlugin({
|
|
23
|
+
setup(ctx: PluginContext): Teardown {
|
|
24
|
+
let calls = 0;
|
|
25
|
+
const badge = document.createElement("span");
|
|
26
|
+
badge.className = "example-badge";
|
|
27
|
+
badge.textContent = badgeText(calls);
|
|
28
|
+
|
|
29
|
+
// Scoped to a class this plugin put on its own element. Never scope a rule to an anchor's bare
|
|
30
|
+
// class: one class is applied wherever that look is wanted, so a rule written against it lands
|
|
31
|
+
// on every control wearing it. See the anchors guide.
|
|
32
|
+
const stopStyle = ctx.style(`
|
|
33
|
+
.example-badge {
|
|
34
|
+
font-size: 11px;
|
|
35
|
+
opacity: 0.7;
|
|
36
|
+
padding: 0 6px;
|
|
37
|
+
white-space: nowrap;
|
|
38
|
+
}
|
|
39
|
+
`);
|
|
40
|
+
|
|
41
|
+
// Every completed tool call the assistant makes. `uses.tools` is what makes this fire; without
|
|
42
|
+
// the declaration it throws and disables the plugin, which is the point of declaring.
|
|
43
|
+
const stopTools = ctx.onToolUse(() => {
|
|
44
|
+
calls += 1;
|
|
45
|
+
badge.textContent = badgeText(calls);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// `watch` hands over the element for an anchor whenever one is in the document, and again if
|
|
49
|
+
// the app replaces it. No plugin polls for an element.
|
|
50
|
+
//
|
|
51
|
+
// `footerSpacer` and `mountBefore` together, rather than any other footer anchor: the composer
|
|
52
|
+
// footer measures the widths of its own element children to pick a fit stage, and resets that
|
|
53
|
+
// measurement on any foreign change inside it. A decoration whose membership of the footer
|
|
54
|
+
// changes with the stage fights the ladder that moved it. The spacer renders in every stage, so
|
|
55
|
+
// a decoration beside it contributes a constant width and the ladder settles.
|
|
56
|
+
const stopWatch = ctx.watch("footerSpacer", (spacer) => ctx.mountBefore(spacer, () => badge));
|
|
57
|
+
|
|
58
|
+
return () => {
|
|
59
|
+
stopWatch();
|
|
60
|
+
stopTools();
|
|
61
|
+
stopStyle();
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.plugin.json",
|
|
3
|
-
"include": ["src/**/*.ts"],
|
|
4
|
-
"exclude": ["src/**/*.test.ts"]
|
|
5
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.plugin.json",
|
|
3
|
+
"include": ["src/**/*.ts"],
|
|
4
|
+
"exclude": ["src/**/*.test.ts"]
|
|
5
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
packages:
|
|
2
|
-
- plugins/*
|
|
3
|
-
|
|
4
|
-
# Supply-chain settings, written down rather than inherited.
|
|
5
|
-
#
|
|
6
|
-
# Three of these are pnpm's own defaults today. They are stated anyway, because a default is not a
|
|
7
|
-
# position: a fresh clone on a different pnpm, or a default that moves, would quietly change what
|
|
8
|
-
# this repository is willing to install without anyone deciding to.
|
|
9
|
-
#
|
|
10
|
-
# minimumReleaseAge is the rule rigline applies to plugins, applied here to your own dependencies:
|
|
11
|
-
# a day is where a compromised publish is usually caught, and a day of latency costs nothing.
|
|
12
|
-
minimumReleaseAge: 1440
|
|
13
|
-
|
|
14
|
-
# Only a direct dependency may come from a git repository or a tarball URL. A transitive dependency
|
|
15
|
-
# that resolves outside the registry is the shape of a supply-chain problem rather than of an
|
|
16
|
-
# ordinary package.
|
|
17
|
-
blockExoticSubdeps: true
|
|
18
|
-
|
|
19
|
-
# No dependency may run an install script. Empty because nothing here needs one; the day something
|
|
20
|
-
# does, a person decides about it by name, here.
|
|
21
|
-
allowBuilds: {}
|
|
1
|
+
packages:
|
|
2
|
+
- plugins/*
|
|
3
|
+
|
|
4
|
+
# Supply-chain settings, written down rather than inherited.
|
|
5
|
+
#
|
|
6
|
+
# Three of these are pnpm's own defaults today. They are stated anyway, because a default is not a
|
|
7
|
+
# position: a fresh clone on a different pnpm, or a default that moves, would quietly change what
|
|
8
|
+
# this repository is willing to install without anyone deciding to.
|
|
9
|
+
#
|
|
10
|
+
# minimumReleaseAge is the rule rigline applies to plugins, applied here to your own dependencies:
|
|
11
|
+
# a day is where a compromised publish is usually caught, and a day of latency costs nothing.
|
|
12
|
+
minimumReleaseAge: 1440
|
|
13
|
+
|
|
14
|
+
# Only a direct dependency may come from a git repository or a tarball URL. A transitive dependency
|
|
15
|
+
# that resolves outside the registry is the shape of a supply-chain problem rather than of an
|
|
16
|
+
# ordinary package.
|
|
17
|
+
blockExoticSubdeps: true
|
|
18
|
+
|
|
19
|
+
# No dependency may run an install script. Empty because nothing here needs one; the day something
|
|
20
|
+
# does, a person decides about it by name, here.
|
|
21
|
+
allowBuilds: {}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "esnext",
|
|
4
|
-
"module": "nodenext",
|
|
5
|
-
"moduleResolution": "nodenext",
|
|
6
|
-
"moduleDetection": "force",
|
|
7
|
-
"strict": true,
|
|
8
|
-
"noUncheckedIndexedAccess": true,
|
|
9
|
-
"noImplicitOverride": true,
|
|
10
|
-
"noUnusedLocals": true,
|
|
11
|
-
"noUnusedParameters": true,
|
|
12
|
-
"noFallthroughCasesInSwitch": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"verbatimModuleSyntax": true,
|
|
15
|
-
"erasableSyntaxOnly": true,
|
|
16
|
-
"skipLibCheck": true,
|
|
17
|
-
"forceConsistentCasingInFileNames": true
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "nodenext",
|
|
5
|
+
"moduleResolution": "nodenext",
|
|
6
|
+
"moduleDetection": "force",
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noUncheckedIndexedAccess": true,
|
|
9
|
+
"noImplicitOverride": true,
|
|
10
|
+
"noUnusedLocals": true,
|
|
11
|
+
"noUnusedParameters": true,
|
|
12
|
+
"noFallthroughCasesInSwitch": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"verbatimModuleSyntax": true,
|
|
15
|
+
"erasableSyntaxOnly": true,
|
|
16
|
+
"skipLibCheck": true,
|
|
17
|
+
"forceConsistentCasingInFileNames": true
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"//": "The base every plugin here extends. `files` names the committed harvest so that its module augmentation is in each plugin's own program: augmentation is per-program, so a plugin whose tsconfig does not pull generated.ts in compiles with every extension identifier widened to `string`. Relative paths in an extended config resolve against the config that declared them, so this one entry serves every plugin however deep it sits. A plugin's own tsconfig overrides `include` and leaves `files` alone. That augmentation resolves `@rigline/plugin-api` from this directory rather than from the plugin's, which is why the workspace root depends on it too.",
|
|
3
|
-
"extends": "./tsconfig.base.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"lib": ["esnext", "dom"],
|
|
6
|
-
"types": [],
|
|
7
|
-
"noEmit": true,
|
|
8
|
-
"allowImportingTsExtensions": true
|
|
9
|
-
},
|
|
10
|
-
"files": ["generated.ts"]
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"//": "The base every plugin here extends. `files` names the committed harvest so that its module augmentation is in each plugin's own program: augmentation is per-program, so a plugin whose tsconfig does not pull generated.ts in compiles with every extension identifier widened to `string`. Relative paths in an extended config resolve against the config that declared them, so this one entry serves every plugin however deep it sits. A plugin's own tsconfig overrides `include` and leaves `files` alone. That augmentation resolves `@rigline/plugin-api` from this directory rather than from the plugin's, which is why the workspace root depends on it too.",
|
|
3
|
+
"extends": "./tsconfig.base.json",
|
|
4
|
+
"compilerOptions": {
|
|
5
|
+
"lib": ["esnext", "dom"],
|
|
6
|
+
"types": [],
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"allowImportingTsExtensions": true
|
|
9
|
+
},
|
|
10
|
+
"files": ["generated.ts"]
|
|
11
|
+
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|