wiki-formant 0.31.0 → 0.34.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/README.md +106 -17
- package/bin/fts-ddl.mjs +79 -0
- package/dist/analytics.d.ts +4 -3
- package/dist/analytics.js +60 -17
- package/dist/base.css +58 -4
- package/dist/conformance.d.ts +15 -0
- package/dist/conformance.js +21 -2
- package/dist/crawlers.d.ts +36 -2
- package/dist/crawlers.js +37 -8
- package/dist/headers.d.ts +35 -0
- package/dist/headers.js +78 -0
- package/dist/http.d.ts +38 -0
- package/dist/http.js +57 -1
- package/dist/metadata.d.ts +82 -0
- package/dist/metadata.js +74 -0
- package/dist/passkey-button.d.ts +3 -1
- package/dist/passkey-button.js +8 -6
- package/dist/passkey.d.ts +3 -1
- package/dist/passkey.js +16 -9
- package/dist/react-server.d.ts +1 -1
- package/dist/react-server.js +2 -2
- package/dist/sanitize.d.ts +0 -6
- package/dist/sanitize.js +1 -12
- package/package.json +91 -44
- package/tsconfig.base.json +25 -0
package/dist/react-server.d.ts
CHANGED
|
@@ -277,7 +277,7 @@ export interface StatsProps {
|
|
|
277
277
|
ranges?: readonly number[];
|
|
278
278
|
}
|
|
279
279
|
/** The windows the stats page offers, in days. */
|
|
280
|
-
export declare const STATS_RANGES: readonly [1, 7, 30, 90];
|
|
280
|
+
export declare const STATS_RANGES: readonly [1, 7, 30, 90, 365];
|
|
281
281
|
/** A `?days=` value as one of `ranges`, else `fallback`: the page's only input. */
|
|
282
282
|
export declare const statsDays: (param: unknown, ranges?: readonly number[], fallback?: number) => number;
|
|
283
283
|
/**
|
package/dist/react-server.js
CHANGED
|
@@ -226,7 +226,7 @@ export function RevisionChanges({ changes, label = type => type }) {
|
|
|
226
226
|
return (_jsx("ul", { className: "revision-changes", children: changes.map((c, i) => (_jsxs("li", { className: "revision-change", "data-action": c.action, children: [_jsx("span", { className: "revision-change-action", children: ACTION_LABEL[c.action] }), ` – ${label(c.type)} at ${blockLocation(c.path)}`, c.leafDiff && (_jsx("p", { className: "revision-diff", children: c.leafDiff.map(([op, text], j) => op === -1 ? _jsx("del", { children: text }, j) : op === 1 ? _jsx("ins", { children: text }, j) : _jsx("span", { children: text }, j)) }))] }, i))) }));
|
|
227
227
|
}
|
|
228
228
|
/** The windows the stats page offers, in days. */
|
|
229
|
-
export const STATS_RANGES = [1, 7, 30, 90];
|
|
229
|
+
export const STATS_RANGES = [1, 7, 30, 90, 365];
|
|
230
230
|
/** A `?days=` value as one of `ranges`, else `fallback`: the page's only input. */
|
|
231
231
|
export const statsDays = (param, ranges = STATS_RANGES, fallback = 30) => ranges.find(n => String(n) === param) ?? fallback;
|
|
232
232
|
const count = (n) => n.toLocaleString('en');
|
|
@@ -278,5 +278,5 @@ export function Stats({ digest: d, days, ranges = STATS_RANGES }) {
|
|
|
278
278
|
if (d.follow_clicks)
|
|
279
279
|
figures.push(['Clicks to X', count(d.follow_clicks.events), null]);
|
|
280
280
|
const rows = (list, k, m) => list.map(r => [r[k], r[m]]);
|
|
281
|
-
return (_jsxs("div", { className: "stats", children: [_jsx("nav", { className: "stats-ranges", "aria-label": "Window", children: ranges.map(n => (_jsx("a", { href: `?days=${n}`, "aria-current": n === days ? 'page' : undefined, children: n === 1 ? '24 hours' : `${n} days` }, n))) }), _jsx("dl", { className: "stats-figures", children: figures.map(([label, value, delta]) => (_jsxs("div", { children: [_jsx("dt", { children: label }), _jsxs("dd", { children: [value, delta && _jsx("small", { children: ` ${delta}` })] })] }, label))) }), _jsx("ol", { className: "stats-chart", "aria-label": "Visitors per day", children: series.map(([date, n]) => (_jsx("li", { title: `${date}: ${count(n)}`, style: { '--share': n / peak } }, date))) }), _jsxs("div", { className: "stats-lists", children: [_jsx(StatsList, { title: "Pages", rows: rows(d.top_pages, 'page', 'visitors') }), _jsx(StatsList, { title: "Entry pages", rows: rows(d.entry_pages, 'page', 'visitors') }), _jsx(StatsList, { title: "Sources", rows: rows(d.top_sources, 'source', 'visitors') }), _jsx(StatsList, { title: "From X posts", rows: rows(d.from_posts, 'page', 'visitors') }), _jsx(StatsList, { title: "Sibling sites", rows: rows(d.sibling_referrals, 'source', 'visitors') }), _jsx(StatsList, { title: "Countries", rows: rows(d.countries, 'country', 'visitors'), label: country }), _jsx(StatsList, { title: "Devices", rows: rows(d.devices, 'device', 'visitors') }), _jsx(StatsList, { title: "Agent tool calls", rows: rows(d.agent_tool_calls, 'tool', 'events') }), _jsx(StatsList, { title: "Searches that found nothing", rows: rows(d.gaps, 'query', 'events') })] })] }));
|
|
281
|
+
return (_jsxs("div", { className: "stats", children: [_jsx("nav", { className: "stats-ranges", "aria-label": "Window", children: ranges.map(n => (_jsx("a", { href: `?days=${n}`, "aria-current": n === days ? 'page' : undefined, children: n === 1 ? '24 hours' : `${n} days` }, n))) }), _jsx("dl", { className: "stats-figures", children: figures.map(([label, value, delta]) => (_jsxs("div", { children: [_jsx("dt", { children: label }), _jsxs("dd", { children: [value, delta && _jsx("small", { children: ` ${delta}` })] })] }, label))) }), _jsx("ol", { className: "stats-chart", "aria-label": "Visitors per day", style: { '--bars': series.length }, children: series.map(([date, n]) => (_jsx("li", { title: `${date}: ${count(n)}`, style: { '--share': n / peak } }, date))) }), _jsxs("div", { className: "stats-lists", children: [_jsx(StatsList, { title: "Pages", rows: rows(d.top_pages, 'page', 'visitors') }), _jsx(StatsList, { title: "Entry pages", rows: rows(d.entry_pages, 'page', 'visitors') }), _jsx(StatsList, { title: "Sources", rows: rows(d.top_sources, 'source', 'visitors') }), _jsx(StatsList, { title: "From X posts", rows: rows(d.from_posts, 'page', 'visitors') }), _jsx(StatsList, { title: "Sibling sites", rows: rows(d.sibling_referrals, 'source', 'visitors') }), _jsx(StatsList, { title: "Countries", rows: rows(d.countries, 'country', 'visitors'), label: country }), _jsx(StatsList, { title: "Devices", rows: rows(d.devices, 'device', 'visitors') }), _jsx(StatsList, { title: "Agent tool calls", rows: rows(d.agent_tool_calls, 'tool', 'events') }), _jsx(StatsList, { title: "Searches that found nothing", rows: rows(d.gaps, 'query', 'events') })] })] }));
|
|
282
282
|
}
|
package/dist/sanitize.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The embed hosts the editor's iframe, YouTube, tweet and map nodes produce.
|
|
3
|
-
* This is half of a pair: the CSP `frame-src` in each `next.config.ts` must
|
|
4
|
-
* allow the same hosts, or an iframe survives sanitising and is then blocked.
|
|
5
|
-
*/
|
|
6
|
-
export declare const DEFAULT_IFRAME_HOSTS: readonly string[];
|
|
7
1
|
export interface HtmlSanitizerOptions {
|
|
8
2
|
/** Hosts an `<iframe src>` may point at. Defaults to `DEFAULT_IFRAME_HOSTS`. */
|
|
9
3
|
iframeHosts?: readonly string[];
|
package/dist/sanitize.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// server-side, on the render path, so it covers rows written before it existed
|
|
14
14
|
// and no sanitiser ships to the client. `sanitize-html` is an optional peer.
|
|
15
15
|
import sanitizeHtml from 'sanitize-html';
|
|
16
|
+
import { DEFAULT_IFRAME_HOSTS } from './headers.js';
|
|
16
17
|
// Inline SVG, presentational elements only. The infographics pipeline embeds
|
|
17
18
|
// diagrams as inline SVG in two of the wikis, so a prose-only list would erase
|
|
18
19
|
// them. `foreignObject` (arbitrary HTML), `use`/`image` (external refs),
|
|
@@ -33,18 +34,6 @@ const SVG_ATTRS = [
|
|
|
33
34
|
'dominant-baseline', 'offset', 'stop-color', 'stop-opacity', 'gradientUnits',
|
|
34
35
|
'gradientTransform', 'clip-path', 'mask', 'role', 'aria-label', 'style',
|
|
35
36
|
];
|
|
36
|
-
/**
|
|
37
|
-
* The embed hosts the editor's iframe, YouTube, tweet and map nodes produce.
|
|
38
|
-
* This is half of a pair: the CSP `frame-src` in each `next.config.ts` must
|
|
39
|
-
* allow the same hosts, or an iframe survives sanitising and is then blocked.
|
|
40
|
-
*/
|
|
41
|
-
export const DEFAULT_IFRAME_HOSTS = [
|
|
42
|
-
'www.youtube.com', 'youtube.com',
|
|
43
|
-
'www.youtube-nocookie.com', 'youtube-nocookie.com',
|
|
44
|
-
'platform.twitter.com',
|
|
45
|
-
'www.google.com', 'maps.google.com',
|
|
46
|
-
'embed.apple.com', 'maps.apple.com',
|
|
47
|
-
];
|
|
48
37
|
// Layout and paint only. `position`, `z-index` and friends are left out so a
|
|
49
38
|
// page cannot lay a fake signing prompt over the site's chrome.
|
|
50
39
|
const STYLE_PROPS = [
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wiki-formant",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "The portable half of a wiki: derived taxonomy and facet controls, a version-negotiating MCP transport, markdown twins, block rendering, a rich-text editor engine,
|
|
3
|
+
"version": "0.34.0",
|
|
4
|
+
"description": "The portable half of a wiki: derived taxonomy and facet controls, a version-negotiating MCP transport, markdown twins, block rendering, a rich-text editor engine, conditional-GET plumbing, and the headers and CSP every origin sends.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -24,171 +24,218 @@
|
|
|
24
24
|
"exports": {
|
|
25
25
|
"./taxonomy": {
|
|
26
26
|
"types": "./dist/taxonomy.d.ts",
|
|
27
|
-
"import": "./dist/taxonomy.js"
|
|
27
|
+
"import": "./dist/taxonomy.js",
|
|
28
|
+
"default": "./dist/taxonomy.js"
|
|
28
29
|
},
|
|
29
30
|
"./mcp": {
|
|
30
31
|
"types": "./dist/mcp.d.ts",
|
|
31
|
-
"import": "./dist/mcp.js"
|
|
32
|
+
"import": "./dist/mcp.js",
|
|
33
|
+
"default": "./dist/mcp.js"
|
|
32
34
|
},
|
|
33
35
|
"./headings": {
|
|
34
36
|
"types": "./dist/headings.d.ts",
|
|
35
|
-
"import": "./dist/headings.js"
|
|
37
|
+
"import": "./dist/headings.js",
|
|
38
|
+
"default": "./dist/headings.js"
|
|
36
39
|
},
|
|
37
40
|
"./markdown": {
|
|
38
41
|
"types": "./dist/markdown.d.ts",
|
|
39
|
-
"import": "./dist/markdown.js"
|
|
42
|
+
"import": "./dist/markdown.js",
|
|
43
|
+
"default": "./dist/markdown.js"
|
|
40
44
|
},
|
|
41
45
|
"./http": {
|
|
42
46
|
"types": "./dist/http.d.ts",
|
|
43
|
-
"import": "./dist/http.js"
|
|
47
|
+
"import": "./dist/http.js",
|
|
48
|
+
"default": "./dist/http.js"
|
|
44
49
|
},
|
|
45
50
|
"./pagination": {
|
|
46
51
|
"types": "./dist/pagination.d.ts",
|
|
47
|
-
"import": "./dist/pagination.js"
|
|
52
|
+
"import": "./dist/pagination.js",
|
|
53
|
+
"default": "./dist/pagination.js"
|
|
48
54
|
},
|
|
49
55
|
"./versioning": {
|
|
50
56
|
"types": "./dist/versioning.d.ts",
|
|
51
|
-
"import": "./dist/versioning.js"
|
|
57
|
+
"import": "./dist/versioning.js",
|
|
58
|
+
"default": "./dist/versioning.js"
|
|
52
59
|
},
|
|
53
60
|
"./rate-limit": {
|
|
54
61
|
"types": "./dist/rate-limit.d.ts",
|
|
55
|
-
"import": "./dist/rate-limit.js"
|
|
62
|
+
"import": "./dist/rate-limit.js",
|
|
63
|
+
"default": "./dist/rate-limit.js"
|
|
56
64
|
},
|
|
57
65
|
"./db": {
|
|
58
66
|
"types": "./dist/db.d.ts",
|
|
59
|
-
"import": "./dist/db.js"
|
|
67
|
+
"import": "./dist/db.js",
|
|
68
|
+
"default": "./dist/db.js"
|
|
60
69
|
},
|
|
61
70
|
"./analytics": {
|
|
62
71
|
"types": "./dist/analytics.d.ts",
|
|
63
|
-
"import": "./dist/analytics.js"
|
|
72
|
+
"import": "./dist/analytics.js",
|
|
73
|
+
"default": "./dist/analytics.js"
|
|
64
74
|
},
|
|
65
75
|
"./passkey": {
|
|
66
76
|
"types": "./dist/passkey.d.ts",
|
|
67
|
-
"import": "./dist/passkey.js"
|
|
77
|
+
"import": "./dist/passkey.js",
|
|
78
|
+
"default": "./dist/passkey.js"
|
|
68
79
|
},
|
|
69
80
|
"./passkey-button": {
|
|
70
81
|
"types": "./dist/passkey-button.d.ts",
|
|
71
|
-
"import": "./dist/passkey-button.js"
|
|
82
|
+
"import": "./dist/passkey-button.js",
|
|
83
|
+
"default": "./dist/passkey-button.js"
|
|
72
84
|
},
|
|
73
85
|
"./blocks": {
|
|
74
86
|
"types": "./dist/blocks.d.ts",
|
|
75
|
-
"import": "./dist/blocks.js"
|
|
87
|
+
"import": "./dist/blocks.js",
|
|
88
|
+
"default": "./dist/blocks.js"
|
|
76
89
|
},
|
|
77
90
|
"./combobox": {
|
|
78
91
|
"types": "./dist/combobox.d.ts",
|
|
79
|
-
"import": "./dist/combobox.js"
|
|
92
|
+
"import": "./dist/combobox.js",
|
|
93
|
+
"default": "./dist/combobox.js"
|
|
80
94
|
},
|
|
81
95
|
"./crawlers": {
|
|
82
96
|
"types": "./dist/crawlers.d.ts",
|
|
83
|
-
"import": "./dist/crawlers.js"
|
|
97
|
+
"import": "./dist/crawlers.js",
|
|
98
|
+
"default": "./dist/crawlers.js"
|
|
84
99
|
},
|
|
85
100
|
"./revisions": {
|
|
86
101
|
"types": "./dist/revisions.d.ts",
|
|
87
|
-
"import": "./dist/revisions.js"
|
|
102
|
+
"import": "./dist/revisions.js",
|
|
103
|
+
"default": "./dist/revisions.js"
|
|
88
104
|
},
|
|
89
105
|
"./history": {
|
|
90
106
|
"types": "./dist/history.d.ts",
|
|
91
|
-
"import": "./dist/history.js"
|
|
107
|
+
"import": "./dist/history.js",
|
|
108
|
+
"default": "./dist/history.js"
|
|
92
109
|
},
|
|
93
110
|
"./search": {
|
|
94
111
|
"types": "./dist/search.d.ts",
|
|
95
|
-
"import": "./dist/search.js"
|
|
112
|
+
"import": "./dist/search.js",
|
|
113
|
+
"default": "./dist/search.js"
|
|
96
114
|
},
|
|
97
115
|
"./feed": {
|
|
98
116
|
"types": "./dist/feed.d.ts",
|
|
99
|
-
"import": "./dist/feed.js"
|
|
117
|
+
"import": "./dist/feed.js",
|
|
118
|
+
"default": "./dist/feed.js"
|
|
100
119
|
},
|
|
101
120
|
"./license": {
|
|
102
121
|
"types": "./dist/license.d.ts",
|
|
103
|
-
"import": "./dist/license.js"
|
|
122
|
+
"import": "./dist/license.js",
|
|
123
|
+
"default": "./dist/license.js"
|
|
104
124
|
},
|
|
105
125
|
"./links": {
|
|
106
126
|
"types": "./dist/links.d.ts",
|
|
107
|
-
"import": "./dist/links.js"
|
|
127
|
+
"import": "./dist/links.js",
|
|
128
|
+
"default": "./dist/links.js"
|
|
108
129
|
},
|
|
109
130
|
"./maps": {
|
|
110
131
|
"types": "./dist/maps.d.ts",
|
|
111
|
-
"import": "./dist/maps.js"
|
|
132
|
+
"import": "./dist/maps.js",
|
|
133
|
+
"default": "./dist/maps.js"
|
|
112
134
|
},
|
|
113
135
|
"./freshness": {
|
|
114
136
|
"types": "./dist/freshness.d.ts",
|
|
115
|
-
"import": "./dist/freshness.js"
|
|
137
|
+
"import": "./dist/freshness.js",
|
|
138
|
+
"default": "./dist/freshness.js"
|
|
116
139
|
},
|
|
117
140
|
"./text": {
|
|
118
141
|
"types": "./dist/text.d.ts",
|
|
119
|
-
"import": "./dist/text.js"
|
|
142
|
+
"import": "./dist/text.js",
|
|
143
|
+
"default": "./dist/text.js"
|
|
120
144
|
},
|
|
121
145
|
"./validation": {
|
|
122
146
|
"types": "./dist/validation.d.ts",
|
|
123
|
-
"import": "./dist/validation.js"
|
|
147
|
+
"import": "./dist/validation.js",
|
|
148
|
+
"default": "./dist/validation.js"
|
|
124
149
|
},
|
|
125
150
|
"./well-known": {
|
|
126
151
|
"types": "./dist/well-known.d.ts",
|
|
127
|
-
"import": "./dist/well-known.js"
|
|
152
|
+
"import": "./dist/well-known.js",
|
|
153
|
+
"default": "./dist/well-known.js"
|
|
128
154
|
},
|
|
129
155
|
"./conformance": {
|
|
130
156
|
"types": "./dist/conformance.d.ts",
|
|
131
|
-
"import": "./dist/conformance.js"
|
|
157
|
+
"import": "./dist/conformance.js",
|
|
158
|
+
"default": "./dist/conformance.js"
|
|
132
159
|
},
|
|
133
160
|
"./sidebar": {
|
|
134
161
|
"types": "./dist/sidebar.d.ts",
|
|
135
|
-
"import": "./dist/sidebar.js"
|
|
162
|
+
"import": "./dist/sidebar.js",
|
|
163
|
+
"default": "./dist/sidebar.js"
|
|
136
164
|
},
|
|
137
165
|
"./react": {
|
|
138
166
|
"types": "./dist/react.d.ts",
|
|
139
|
-
"import": "./dist/react.js"
|
|
167
|
+
"import": "./dist/react.js",
|
|
168
|
+
"default": "./dist/react.js"
|
|
140
169
|
},
|
|
141
170
|
"./react-server": {
|
|
142
171
|
"types": "./dist/react-server.d.ts",
|
|
143
|
-
"import": "./dist/react-server.js"
|
|
172
|
+
"import": "./dist/react-server.js",
|
|
173
|
+
"default": "./dist/react-server.js"
|
|
144
174
|
},
|
|
145
175
|
"./dom": {
|
|
146
176
|
"types": "./dist/dom.d.ts",
|
|
147
|
-
"import": "./dist/dom.js"
|
|
177
|
+
"import": "./dist/dom.js",
|
|
178
|
+
"default": "./dist/dom.js"
|
|
148
179
|
},
|
|
149
180
|
"./tiptap": {
|
|
150
181
|
"types": "./dist/tiptap.d.ts",
|
|
151
|
-
"import": "./dist/tiptap.js"
|
|
182
|
+
"import": "./dist/tiptap.js",
|
|
183
|
+
"default": "./dist/tiptap.js"
|
|
152
184
|
},
|
|
153
185
|
"./base.css": "./dist/base.css",
|
|
154
186
|
"./block-views": {
|
|
155
187
|
"types": "./dist/block-views.d.ts",
|
|
156
|
-
"import": "./dist/block-views.js"
|
|
188
|
+
"import": "./dist/block-views.js",
|
|
189
|
+
"default": "./dist/block-views.js"
|
|
157
190
|
},
|
|
158
191
|
"./editor": {
|
|
159
192
|
"types": "./dist/editor.d.ts",
|
|
160
|
-
"import": "./dist/editor.js"
|
|
193
|
+
"import": "./dist/editor.js",
|
|
194
|
+
"default": "./dist/editor.js"
|
|
161
195
|
},
|
|
162
196
|
"./link-check": {
|
|
163
197
|
"types": "./dist/link-check.d.ts",
|
|
164
|
-
"import": "./dist/link-check.js"
|
|
198
|
+
"import": "./dist/link-check.js",
|
|
199
|
+
"default": "./dist/link-check.js"
|
|
165
200
|
},
|
|
166
201
|
"./seeded": {
|
|
167
202
|
"types": "./dist/seeded.d.ts",
|
|
168
|
-
"import": "./dist/seeded.js"
|
|
203
|
+
"import": "./dist/seeded.js",
|
|
204
|
+
"default": "./dist/seeded.js"
|
|
169
205
|
},
|
|
170
206
|
"./sanitize": {
|
|
171
207
|
"types": "./dist/sanitize.d.ts",
|
|
172
|
-
"import": "./dist/sanitize.js"
|
|
208
|
+
"import": "./dist/sanitize.js",
|
|
209
|
+
"default": "./dist/sanitize.js"
|
|
173
210
|
},
|
|
174
211
|
"./corpus": {
|
|
175
212
|
"types": "./dist/corpus.d.ts",
|
|
176
|
-
"import": "./dist/corpus.js"
|
|
213
|
+
"import": "./dist/corpus.js",
|
|
214
|
+
"default": "./dist/corpus.js"
|
|
177
215
|
},
|
|
178
216
|
"./metadata": {
|
|
179
217
|
"types": "./dist/metadata.d.ts",
|
|
180
|
-
"import": "./dist/metadata.js"
|
|
181
|
-
|
|
218
|
+
"import": "./dist/metadata.js",
|
|
219
|
+
"default": "./dist/metadata.js"
|
|
220
|
+
},
|
|
221
|
+
"./headers": {
|
|
222
|
+
"types": "./dist/headers.d.ts",
|
|
223
|
+
"import": "./dist/headers.js",
|
|
224
|
+
"default": "./dist/headers.js"
|
|
225
|
+
},
|
|
226
|
+
"./tsconfig.base.json": "./tsconfig.base.json"
|
|
182
227
|
},
|
|
183
228
|
"bin": {
|
|
184
229
|
"check-classes": "bin/check-classes.mjs",
|
|
185
230
|
"check-pages": "bin/check-pages.mjs",
|
|
186
231
|
"analytics-digest": "bin/analytics-digest.mjs",
|
|
187
|
-
"passkey-invite": "bin/passkey-invite.mjs"
|
|
232
|
+
"passkey-invite": "bin/passkey-invite.mjs",
|
|
233
|
+
"fts-ddl": "bin/fts-ddl.mjs"
|
|
188
234
|
},
|
|
189
235
|
"files": [
|
|
190
236
|
"dist",
|
|
191
|
-
"bin"
|
|
237
|
+
"bin",
|
|
238
|
+
"tsconfig.base.json"
|
|
192
239
|
],
|
|
193
240
|
"engines": {
|
|
194
241
|
"node": ">=20"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// The compiler floor every app here shares (STRUCTURE.md S1).
|
|
2
|
+
// An app extends it and keeps only what is its own: paths, include, exclude, and a licensed extra such as allowImportingTsExtensions.
|
|
3
|
+
// paths and include stay local because tsconfig resolves them against the file that declares them.
|
|
4
|
+
{
|
|
5
|
+
"compilerOptions": {
|
|
6
|
+
"target": "ES2022",
|
|
7
|
+
"lib": ["dom", "dom.iterable", "ES2022"],
|
|
8
|
+
"module": "ESNext",
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
|
+
"jsx": "react-jsx",
|
|
11
|
+
"strict": true,
|
|
12
|
+
"noUncheckedIndexedAccess": true,
|
|
13
|
+
"noUnusedLocals": true,
|
|
14
|
+
"noUnusedParameters": true,
|
|
15
|
+
"noImplicitReturns": true,
|
|
16
|
+
"allowJs": true,
|
|
17
|
+
"skipLibCheck": true,
|
|
18
|
+
"noEmit": true,
|
|
19
|
+
"esModuleInterop": true,
|
|
20
|
+
"resolveJsonModule": true,
|
|
21
|
+
"isolatedModules": true,
|
|
22
|
+
"incremental": true,
|
|
23
|
+
"plugins": [{ "name": "next" }]
|
|
24
|
+
}
|
|
25
|
+
}
|