@shiplane/changesets 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 +89 -2
- package/dist/index.d.ts +13 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Arnaud Zheng
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,90 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ๐ @shiplane/changesets
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Versions from `.changeset` files, through the changesets CLI: fills
|
|
4
|
+
[shiplane](../shiplane/README.md)'s **versioning** port. A changeset is the intent to release;
|
|
5
|
+
shiplane turns the pending ones into versions and changelogs on the release PR.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart LR
|
|
9
|
+
CS[".changeset/*.md"] --> AD["changesetsVersioning()"]
|
|
10
|
+
AD --> STATUS["changeset status: what moves"]
|
|
11
|
+
AD --> VERSION["changeset version: on the release PR"]
|
|
12
|
+
VERSION --> OUT["versions and CHANGELOG.md"]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
pnpm add -D shiplane @shiplane/changesets @changesets/cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Configure
|
|
22
|
+
|
|
23
|
+
Give the adapter to `releaseFlow`. From
|
|
24
|
+
[`examples/shiplane.config.ts`](./examples/shiplane.config.ts):
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { changesetsVersioning } from "@shiplane/changesets";
|
|
28
|
+
import { gitSourceControl } from "@shiplane/git";
|
|
29
|
+
import { gitHubActionsCiPipeline, gitHubCodeHost } from "@shiplane/github";
|
|
30
|
+
import { defineRelease, internalTool, releaseFlow } from "shiplane";
|
|
31
|
+
|
|
32
|
+
export default defineRelease({
|
|
33
|
+
flow: releaseFlow({
|
|
34
|
+
sourceControl: gitSourceControl(),
|
|
35
|
+
codeHost: gitHubCodeHost(),
|
|
36
|
+
ciPipeline: gitHubActionsCiPipeline(),
|
|
37
|
+
// The root script versions, then refreshes the lockfile.
|
|
38
|
+
versioning: changesetsVersioning({ version: ["pnpm", "-s", "changeset:version"] }),
|
|
39
|
+
}),
|
|
40
|
+
modules: [internalTool()],
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Options
|
|
45
|
+
|
|
46
|
+
It fills a flow port, so unit files take no key from it. Its factory takes:
|
|
47
|
+
|
|
48
|
+
| Option | Default | Means |
|
|
49
|
+
| --------- | ------------------------------------------ | ------------------------------------- |
|
|
50
|
+
| `version` | `["pnpm", "exec", "changeset", "version"]` | The command that versions the release |
|
|
51
|
+
|
|
52
|
+
Source: `ChangesetsOptions` in `src/changesets-versioning.adapter.ts`.
|
|
53
|
+
|
|
54
|
+
## Example
|
|
55
|
+
|
|
56
|
+
[`examples/`](./examples) holds one pending changeset,
|
|
57
|
+
[`.changeset/quiet-seeds-wait.md`](./examples/.changeset/quiet-seeds-wait.md):
|
|
58
|
+
|
|
59
|
+
```md
|
|
60
|
+
---
|
|
61
|
+
"@acme/scripts": patch
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
The seed script skips rows it already wrote.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`pnpm shiplane status` in that repository counts it:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Release status ยท preview
|
|
71
|
+
|
|
72
|
+
Unit Version Target Where it stands
|
|
73
|
+
scripts 1.0.0 release-only โ 1 changeset
|
|
74
|
+
|
|
75
|
+
โ Next: open the release PR: shiplane
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
What moves is read with `changeset status`, which writes nothing. Changesets held back for a later
|
|
79
|
+
release are set aside only while it versions. A GitHub changelog asks GitHub who wrote each change:
|
|
80
|
+
`GITHUB_TOKEN` when set, your `gh` sign-in otherwise.
|
|
81
|
+
|
|
82
|
+
## Tools and sign-ins
|
|
83
|
+
|
|
84
|
+
| Tool | Needed for |
|
|
85
|
+
| ---------------------------------- | ------------------------------------------------ |
|
|
86
|
+
| `@changesets/cli` in the workspace | `changeset status` and `changeset version` |
|
|
87
|
+
| `gh`, signed in | A GitHub changelog, when `GITHUB_TOKEN` is unset |
|
|
88
|
+
|
|
89
|
+
The adapter declares no `requirements`, so `doctor` checks neither. Source:
|
|
90
|
+
`src/changesets-versioning.adapter.ts`.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ServiceAdapter, VersioningPort } from "shiplane/plugin";
|
|
2
|
+
|
|
3
|
+
//#region src/changesets-versioning.adapter.d.ts
|
|
4
|
+
interface ChangesetsOptions {
|
|
5
|
+
/** What versions the repository: `changeset version` by default. */
|
|
6
|
+
version?: string[];
|
|
7
|
+
}
|
|
8
|
+
type ChangesetsVersioningAdapter = ServiceAdapter<VersioningPort>;
|
|
9
|
+
/** Versioning from `.changeset` files, through the changesets CLI. */
|
|
10
|
+
declare const changesetsVersioning: (options?: ChangesetsOptions) => ChangesetsVersioningAdapter;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { type ChangesetsOptions, type ChangesetsVersioningAdapter, changesetsVersioning };
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { expandPatterns, workspacePatterns, z } from "shiplane/plugin";
|
|
5
|
+
//#region src/changesets-versioning.adapter.ts
|
|
6
|
+
const BumpSchema = z.enum([
|
|
7
|
+
"major",
|
|
8
|
+
"minor",
|
|
9
|
+
"patch",
|
|
10
|
+
"none"
|
|
11
|
+
]);
|
|
12
|
+
const StatusPlanSchema = z.object({
|
|
13
|
+
changesets: z.array(z.object({
|
|
14
|
+
id: z.string(),
|
|
15
|
+
summary: z.string(),
|
|
16
|
+
releases: z.array(z.object({
|
|
17
|
+
name: z.string(),
|
|
18
|
+
type: BumpSchema
|
|
19
|
+
}))
|
|
20
|
+
})),
|
|
21
|
+
releases: z.array(z.object({
|
|
22
|
+
name: z.string(),
|
|
23
|
+
type: BumpSchema,
|
|
24
|
+
oldVersion: z.string(),
|
|
25
|
+
newVersion: z.string(),
|
|
26
|
+
changesets: z.array(z.string())
|
|
27
|
+
}))
|
|
28
|
+
});
|
|
29
|
+
const PackageSchema = z.object({
|
|
30
|
+
name: z.string(),
|
|
31
|
+
dependencies: z.record(z.string(), z.string()).optional(),
|
|
32
|
+
peerDependencies: z.record(z.string(), z.string()).optional()
|
|
33
|
+
});
|
|
34
|
+
const LINE = /^"([^"]+)":\s*(\w+)\s*$/;
|
|
35
|
+
const changesetsFiles = (root, shell, options) => {
|
|
36
|
+
const dir = path.join(root, ".changeset");
|
|
37
|
+
const fileOf = (id) => path.join(dir, `${id}.md`);
|
|
38
|
+
const write = ({ id, releases, summary }) => fs.writeFileSync(fileOf(id), `---\n${releases.map(({ name, type }) => `"${name}": ${type}`).join("\n")}\n---\n\n${summary}\n`);
|
|
39
|
+
const workspacePackages = () => expandPatterns(root, workspacePatterns(root)).flatMap((folder) => {
|
|
40
|
+
const file = path.join(root, folder, "package.json");
|
|
41
|
+
if (!fs.existsSync(file)) return [];
|
|
42
|
+
const parsed = PackageSchema.safeParse(JSON.parse(fs.readFileSync(file, "utf8")));
|
|
43
|
+
return parsed.success ? [{
|
|
44
|
+
folder,
|
|
45
|
+
pkg: parsed.data
|
|
46
|
+
}] : [];
|
|
47
|
+
});
|
|
48
|
+
const pendingIds = () => fs.existsSync(dir) ? fs.readdirSync(dir).filter((file) => file.endsWith(".md") && file !== "README.md").map((file) => file.slice(0, -3)) : [];
|
|
49
|
+
/** Leaves only what ships in `.changeset`; the returned function puts the held files back. */
|
|
50
|
+
const holdBack = (held) => {
|
|
51
|
+
const originals = new Map(held.map(({ id }) => [id, fs.readFileSync(fileOf(id), "utf8")]));
|
|
52
|
+
held.forEach(({ id, releases }) => {
|
|
53
|
+
const [, frontmatter = "", ...rest] = (originals.get(id) ?? "").split("---");
|
|
54
|
+
const waiting = new Set(releases.map(({ name }) => name));
|
|
55
|
+
const shipping = frontmatter.split("\n").filter((line) => {
|
|
56
|
+
const match = LINE.exec(line.trim());
|
|
57
|
+
return match && !waiting.has(match[1] ?? "");
|
|
58
|
+
});
|
|
59
|
+
if (shipping.length === 0) fs.rmSync(fileOf(id));
|
|
60
|
+
else fs.writeFileSync(fileOf(id), `---\n${shipping.join("\n")}\n---${rest.join("---")}`);
|
|
61
|
+
});
|
|
62
|
+
return () => originals.forEach((text, id) => fs.writeFileSync(fileOf(id), text));
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
pending: () => Promise.resolve(pendingIds().map((id) => ({
|
|
66
|
+
id,
|
|
67
|
+
text: fs.readFileSync(fileOf(id), "utf8")
|
|
68
|
+
}))),
|
|
69
|
+
plan: async (added, held) => {
|
|
70
|
+
const output = path.join(os.tmpdir(), `release-status-${process.pid}.json`);
|
|
71
|
+
added.forEach(write);
|
|
72
|
+
const restore = holdBack(held);
|
|
73
|
+
try {
|
|
74
|
+
if (pendingIds().length === 0) return {
|
|
75
|
+
changesets: [],
|
|
76
|
+
releases: []
|
|
77
|
+
};
|
|
78
|
+
await shell.capture("pnpm", [
|
|
79
|
+
"exec",
|
|
80
|
+
"changeset",
|
|
81
|
+
"status",
|
|
82
|
+
`--output=${output}`
|
|
83
|
+
], { cwd: root });
|
|
84
|
+
return StatusPlanSchema.parse(JSON.parse(fs.readFileSync(output, "utf8")));
|
|
85
|
+
} finally {
|
|
86
|
+
restore();
|
|
87
|
+
added.forEach(({ id }) => fs.rmSync(fileOf(id), { force: true }));
|
|
88
|
+
fs.rmSync(output, { force: true });
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
apply: async (added, held) => {
|
|
92
|
+
added.forEach(write);
|
|
93
|
+
const restore = holdBack(held);
|
|
94
|
+
try {
|
|
95
|
+
const [command = "pnpm", ...args] = options.version ?? [
|
|
96
|
+
"pnpm",
|
|
97
|
+
"exec",
|
|
98
|
+
"changeset",
|
|
99
|
+
"version"
|
|
100
|
+
];
|
|
101
|
+
const token = shell.env("GITHUB_TOKEN") ? void 0 : (await shell.capture("gh", ["auth", "token"])).stdout.trim();
|
|
102
|
+
const status = await shell.attach(command, args, {
|
|
103
|
+
cwd: root,
|
|
104
|
+
...token ? { env: { GITHUB_TOKEN: token } } : {}
|
|
105
|
+
});
|
|
106
|
+
if (status !== 0) throw new Error(`${command} ${args.join(" ")} exited with ${status}`);
|
|
107
|
+
} finally {
|
|
108
|
+
restore();
|
|
109
|
+
}
|
|
110
|
+
held.forEach(write);
|
|
111
|
+
},
|
|
112
|
+
write: (changeset) => {
|
|
113
|
+
write(changeset);
|
|
114
|
+
return Promise.resolve();
|
|
115
|
+
},
|
|
116
|
+
dependencies: () => {
|
|
117
|
+
const packages = workspacePackages().map(({ pkg }) => pkg);
|
|
118
|
+
const names = new Set(packages.map(({ name }) => name));
|
|
119
|
+
return Promise.resolve(Object.fromEntries(packages.map((pkg) => [pkg.name, Object.keys({
|
|
120
|
+
...pkg.dependencies,
|
|
121
|
+
...pkg.peerDependencies
|
|
122
|
+
}).filter((dep) => names.has(dep))])));
|
|
123
|
+
},
|
|
124
|
+
folders: () => Promise.resolve(Object.fromEntries(workspacePackages().map(({ folder, pkg }) => [pkg.name, folder]))),
|
|
125
|
+
changesetFile: (id) => path.posix.join(".changeset", `${id}.md`),
|
|
126
|
+
changelogFile: (folder) => path.posix.join(folder, "CHANGELOG.md")
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
/** Versioning from `.changeset` files, through the changesets CLI. */
|
|
130
|
+
const changesetsVersioning = (options = {}) => ({
|
|
131
|
+
name: "changesets",
|
|
132
|
+
create: ({ root, shell }) => changesetsFiles(root, shell, options)
|
|
133
|
+
});
|
|
134
|
+
//#endregion
|
|
135
|
+
export { changesetsVersioning };
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/changesets-versioning.adapter.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { PlannedChangeset, ServiceAdapter, Shell, VersioningPort } from \"shiplane/plugin\";\nimport { expandPatterns, workspacePatterns, z } from \"shiplane/plugin\";\n\nexport interface ChangesetsOptions {\n /** What versions the repository: `changeset version` by default. */\n version?: string[];\n}\n\nconst BumpSchema = z.enum([\"major\", \"minor\", \"patch\", \"none\"]);\nconst StatusPlanSchema = z.object({\n changesets: z.array(\n z.object({\n id: z.string(),\n summary: z.string(),\n releases: z.array(z.object({ name: z.string(), type: BumpSchema })),\n }),\n ),\n releases: z.array(\n z.object({\n name: z.string(),\n type: BumpSchema,\n oldVersion: z.string(),\n newVersion: z.string(),\n changesets: z.array(z.string()),\n }),\n ),\n});\nconst PackageSchema = z.object({\n name: z.string(),\n dependencies: z.record(z.string(), z.string()).optional(),\n peerDependencies: z.record(z.string(), z.string()).optional(),\n});\n\nconst LINE = /^\"([^\"]+)\":\\s*(\\w+)\\s*$/;\n\nconst changesetsFiles = (\n root: string,\n shell: Shell,\n options: ChangesetsOptions,\n): VersioningPort => {\n const dir = path.join(root, \".changeset\");\n const fileOf = (id: string) => path.join(dir, `${id}.md`);\n const write = ({ id, releases, summary }: PlannedChangeset) =>\n fs.writeFileSync(\n fileOf(id),\n `---\\n${releases.map(({ name, type }) => `\"${name}\": ${type}`).join(\"\\n\")}\\n---\\n\\n${summary}\\n`,\n );\n const workspacePackages = () =>\n expandPatterns(root, workspacePatterns(root)).flatMap((folder) => {\n const file = path.join(root, folder, \"package.json\");\n if (!fs.existsSync(file)) return [];\n const parsed = PackageSchema.safeParse(JSON.parse(fs.readFileSync(file, \"utf8\")));\n return parsed.success ? [{ folder, pkg: parsed.data }] : [];\n });\n const pendingIds = () =>\n fs.existsSync(dir)\n ? fs\n .readdirSync(dir)\n .filter((file) => file.endsWith(\".md\") && file !== \"README.md\")\n .map((file) => file.slice(0, -3))\n : [];\n\n /** Leaves only what ships in `.changeset`; the returned function puts the held files back. */\n const holdBack = (held: readonly PlannedChangeset[]) => {\n const originals = new Map(held.map(({ id }) => [id, fs.readFileSync(fileOf(id), \"utf8\")]));\n held.forEach(({ id, releases }) => {\n const original = originals.get(id) ?? \"\";\n const [, frontmatter = \"\", ...rest] = original.split(\"---\");\n const waiting = new Set(releases.map(({ name }) => name));\n const shipping = frontmatter.split(\"\\n\").filter((line) => {\n const match = LINE.exec(line.trim());\n return match && !waiting.has(match[1] ?? \"\");\n });\n if (shipping.length === 0) fs.rmSync(fileOf(id));\n else fs.writeFileSync(fileOf(id), `---\\n${shipping.join(\"\\n\")}\\n---${rest.join(\"---\")}`);\n });\n return () => originals.forEach((text, id) => fs.writeFileSync(fileOf(id), text));\n };\n\n return {\n pending: () =>\n Promise.resolve(\n pendingIds().map((id) => ({ id, text: fs.readFileSync(fileOf(id), \"utf8\") })),\n ),\n // changeset status computes every move, dependents included, without writing anything. What\n // the release adds and holds back lasts only for the time of the call.\n plan: async (added, held) => {\n const output = path.join(os.tmpdir(), `release-status-${process.pid}.json`);\n added.forEach(write);\n const restore = holdBack(held);\n try {\n // changeset status writes nothing and exits 1 when no changeset is left.\n if (pendingIds().length === 0) return { changesets: [], releases: [] };\n await shell.capture(\"pnpm\", [\"exec\", \"changeset\", \"status\", `--output=${output}`], {\n cwd: root,\n });\n return StatusPlanSchema.parse(JSON.parse(fs.readFileSync(output, \"utf8\")));\n } finally {\n restore();\n added.forEach(({ id }) => fs.rmSync(fileOf(id), { force: true }));\n fs.rmSync(output, { force: true });\n }\n },\n apply: async (added, held) => {\n added.forEach(write);\n const restore = holdBack(held);\n try {\n const [command = \"pnpm\", ...args] = options.version ?? [\n \"pnpm\",\n \"exec\",\n \"changeset\",\n \"version\",\n ];\n // A GitHub changelog asks GitHub who wrote each change: gh's sign-in answers it.\n const token = shell.env(\"GITHUB_TOKEN\")\n ? undefined\n : (await shell.capture(\"gh\", [\"auth\", \"token\"])).stdout.trim();\n const status = await shell.attach(command, args, {\n cwd: root,\n ...(token ? { env: { GITHUB_TOKEN: token } } : {}),\n });\n if (status !== 0) throw new Error(`${command} ${args.join(\" \")} exited with ${status}`);\n } finally {\n restore();\n }\n // A held changeset that also named a released unit keeps only its waiting lines.\n held.forEach(write);\n },\n write: (changeset) => {\n write(changeset);\n return Promise.resolve();\n },\n dependencies: () => {\n const packages = workspacePackages().map(({ pkg }) => pkg);\n const names = new Set(packages.map(({ name }) => name));\n // Only runtime dependencies move a dependent's version.\n return Promise.resolve(\n Object.fromEntries(\n packages.map((pkg) => [\n pkg.name,\n Object.keys({ ...pkg.dependencies, ...pkg.peerDependencies }).filter((dep) =>\n names.has(dep),\n ),\n ]),\n ),\n );\n },\n folders: () =>\n Promise.resolve(\n Object.fromEntries(workspacePackages().map(({ folder, pkg }) => [pkg.name, folder])),\n ),\n changesetFile: (id) => path.posix.join(\".changeset\", `${id}.md`),\n changelogFile: (folder) => path.posix.join(folder, \"CHANGELOG.md\"),\n };\n};\n\nexport type ChangesetsVersioningAdapter = ServiceAdapter<VersioningPort>;\n\n/** Versioning from `.changeset` files, through the changesets CLI. */\nexport const changesetsVersioning = (\n options: ChangesetsOptions = {},\n): ChangesetsVersioningAdapter => ({\n name: \"changesets\",\n create: ({ root, shell }) => changesetsFiles(root, shell, options),\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shiplane/changesets",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Versioning for shiplane: versions and changelogs from changesets.",
|
|
5
|
+
"homepage": "https://github.com/arnaud-zg/packages/tree/main/packages/shiplane-changesets#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/arnaud-zg/packages/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/arnaud-zg/packages.git",
|
|
12
|
+
"directory": "packages/shiplane-changesets"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"author": "Arnaud Zheng <arnaud.zg@gmail.com>",
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"type": "module",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dist/index.js",
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@arnaud-zg/configs": "0.3.0",
|
|
30
|
+
"@types/node": "^22.0.0",
|
|
31
|
+
"eslint": "^9.39.4",
|
|
32
|
+
"prettier": "^3.8.3",
|
|
33
|
+
"typescript": "6.0.3",
|
|
34
|
+
"vitest": "^4.1.11",
|
|
35
|
+
"shiplane": "0.1.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"shiplane": "0.1.0"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsdown",
|
|
42
|
+
"clean": "git clean -xdf .cache .turbo dist node_modules",
|
|
43
|
+
"format": "prettier --write . --cache --cache-location .cache/.prettiercache",
|
|
44
|
+
"lint": "eslint --cache --cache-location .cache/.eslintcache",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"typecheck": "tsc -p tsconfig.typecheck.json"
|
|
47
|
+
}
|
|
6
48
|
}
|