@basementstudio/mitt-next-plugin 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 +15 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/git.d.ts +33 -0
- package/dist/git.js +52 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +21 -0
- package/dist/loader.js +71 -0
- package/dist/loader.js.map +1 -0
- package/dist/manifest.d.ts +15 -0
- package/dist/manifest.js +88 -0
- package/dist/manifest.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/setup.d.ts +27 -0
- package/dist/setup.js +441 -0
- package/dist/setup.js.map +1 -0
- package/dist/transform.d.ts +40 -0
- package/dist/transform.js +365 -0
- package/dist/transform.js.map +1 -0
- package/package.json +67 -4
- package/README.md +0 -3
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { createHmac } from 'node:crypto';
|
|
2
|
+
import MagicString, {} from 'magic-string';
|
|
3
|
+
import { parseSync, visitorKeys } from 'oxc-parser';
|
|
4
|
+
// Elements that never render a box (or whose content React manages outside the host markup), so
|
|
5
|
+
// a pin can't land on them. `html` and `body` are tagged: they are valid fallbacks for a pin.
|
|
6
|
+
const SKIPPED_TAGS = new Set([
|
|
7
|
+
'head',
|
|
8
|
+
'script',
|
|
9
|
+
'style',
|
|
10
|
+
'meta',
|
|
11
|
+
'link',
|
|
12
|
+
'title',
|
|
13
|
+
'template',
|
|
14
|
+
'noscript',
|
|
15
|
+
'base',
|
|
16
|
+
]);
|
|
17
|
+
// Only characters a git SHA (plus `-dirty`) or a CI ref can contain, so the value can sit inside a
|
|
18
|
+
// JSX string literal without escaping.
|
|
19
|
+
const SAFE_COMMIT = /^[\w.-]{1,80}$/;
|
|
20
|
+
// Library components whose default export spreads unknown props onto a single DOM element, keyed
|
|
21
|
+
// by module specifier, with that element's tag: the one the widget records as the anchor's `tag`.
|
|
22
|
+
// Checked in Next 16.4: `next/image` and `next/legacy/image` spread `...rest` onto their `<img>`,
|
|
23
|
+
// `next/link` onto its `<a>`. An explicit list on purpose: an arbitrary component may drop the
|
|
24
|
+
// prop, or let it override a `data-fb` its own root already carries.
|
|
25
|
+
const FORWARDING_COMPONENTS = new Map([
|
|
26
|
+
['next/image', 'img'],
|
|
27
|
+
['next/image.js', 'img'],
|
|
28
|
+
['next/legacy/image', 'img'],
|
|
29
|
+
['next/legacy/image.js', 'img'],
|
|
30
|
+
['next/link', 'a'],
|
|
31
|
+
['next/link.js', 'a'],
|
|
32
|
+
]);
|
|
33
|
+
// Cheap pre-filter: a lowercase intrinsic always starts with `<` and a lowercase letter (JSX allows
|
|
34
|
+
// whitespace in between), and a forwarding component needs its import. Files with neither are
|
|
35
|
+
// returned before paying for a parse.
|
|
36
|
+
const MAYBE_TAGGED = /<\s*[a-z]|['"]next\/(?:legacy\/)?(?:image|link)(?:\.js)?['"]/;
|
|
37
|
+
const ID_LENGTH = 12;
|
|
38
|
+
export function createId(secret, relPath, line, column) {
|
|
39
|
+
return createHmac('sha256', secret)
|
|
40
|
+
.update(`${relPath}:${line}:${column}`)
|
|
41
|
+
.digest('hex')
|
|
42
|
+
.slice(0, ID_LENGTH);
|
|
43
|
+
}
|
|
44
|
+
function isNode(value) {
|
|
45
|
+
return typeof value === 'object' && value !== null && typeof value.type === 'string';
|
|
46
|
+
}
|
|
47
|
+
function identifierName(node) {
|
|
48
|
+
return isNode(node) && node.type === 'Identifier' && typeof node.name === 'string'
|
|
49
|
+
? node.name
|
|
50
|
+
: null;
|
|
51
|
+
}
|
|
52
|
+
const FUNCTION_TYPES = new Set([
|
|
53
|
+
'FunctionDeclaration',
|
|
54
|
+
'FunctionExpression',
|
|
55
|
+
'ArrowFunctionExpression',
|
|
56
|
+
]);
|
|
57
|
+
// The name a reader would use for the function at `ancestors[index]`, or null if it has none.
|
|
58
|
+
// Handles `function Foo`, `const Foo = () =>`, `const Foo = memo(() =>)`, class methods and
|
|
59
|
+
// `export default function () {}`.
|
|
60
|
+
function functionName(ancestors, index) {
|
|
61
|
+
const fn = ancestors[index];
|
|
62
|
+
if (!fn)
|
|
63
|
+
return null;
|
|
64
|
+
const own = identifierName(fn.id);
|
|
65
|
+
if (own)
|
|
66
|
+
return own;
|
|
67
|
+
let parentIndex = index - 1;
|
|
68
|
+
let parent = ancestors[parentIndex];
|
|
69
|
+
// Wrappers like `memo(...)` / `forwardRef(...)`: climb to whatever the call is assigned to.
|
|
70
|
+
while (parent?.type === 'CallExpression') {
|
|
71
|
+
parentIndex -= 1;
|
|
72
|
+
parent = ancestors[parentIndex];
|
|
73
|
+
}
|
|
74
|
+
if (!parent)
|
|
75
|
+
return null;
|
|
76
|
+
if (parent.type === 'VariableDeclarator')
|
|
77
|
+
return identifierName(parent.id);
|
|
78
|
+
if (parent.type === 'ExportDefaultDeclaration')
|
|
79
|
+
return 'default';
|
|
80
|
+
if (parent.type === 'MethodDefinition') {
|
|
81
|
+
const method = identifierName(parent.key);
|
|
82
|
+
if (!method)
|
|
83
|
+
return null;
|
|
84
|
+
// MethodDefinition sits in ClassBody, inside the class itself.
|
|
85
|
+
const className = identifierName(ancestors[parentIndex - 2]?.id);
|
|
86
|
+
return className ? `${className}.${method}` : method;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
function nearestComponent(ancestors) {
|
|
91
|
+
for (let index = ancestors.length - 1; index >= 0; index--) {
|
|
92
|
+
const node = ancestors[index];
|
|
93
|
+
if (node && FUNCTION_TYPES.has(node.type)) {
|
|
94
|
+
const name = functionName(ancestors, index);
|
|
95
|
+
if (name)
|
|
96
|
+
return name;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
function stringValue(node) {
|
|
102
|
+
if (!isNode(node))
|
|
103
|
+
return null;
|
|
104
|
+
if (node.type === 'Literal')
|
|
105
|
+
return typeof node.value === 'string' ? node.value : null;
|
|
106
|
+
return identifierName(node);
|
|
107
|
+
}
|
|
108
|
+
/** Local names bound to the default export of a FORWARDING_COMPONENTS module, with their tag. */
|
|
109
|
+
function forwardingImports(program) {
|
|
110
|
+
const found = new Map();
|
|
111
|
+
const body = Array.isArray(program.body) ? program.body : [];
|
|
112
|
+
for (const statement of body) {
|
|
113
|
+
if (!isNode(statement) || statement.type !== 'ImportDeclaration')
|
|
114
|
+
continue;
|
|
115
|
+
if (statement.importKind === 'type')
|
|
116
|
+
continue;
|
|
117
|
+
const tag = FORWARDING_COMPONENTS.get(stringValue(statement.source) ?? '');
|
|
118
|
+
if (!tag || !Array.isArray(statement.specifiers))
|
|
119
|
+
continue;
|
|
120
|
+
for (const specifier of statement.specifiers) {
|
|
121
|
+
if (!isNode(specifier) || specifier.importKind === 'type')
|
|
122
|
+
continue;
|
|
123
|
+
const isDefault = specifier.type === 'ImportDefaultSpecifier' ||
|
|
124
|
+
(specifier.type === 'ImportSpecifier' && stringValue(specifier.imported) === 'default');
|
|
125
|
+
const local = identifierName(specifier.local);
|
|
126
|
+
if (isDefault && local)
|
|
127
|
+
found.set(local, tag);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return found;
|
|
131
|
+
}
|
|
132
|
+
function patternNames(pattern, names) {
|
|
133
|
+
if (!isNode(pattern))
|
|
134
|
+
return;
|
|
135
|
+
switch (pattern.type) {
|
|
136
|
+
case 'Identifier':
|
|
137
|
+
if (typeof pattern.name === 'string')
|
|
138
|
+
names.add(pattern.name);
|
|
139
|
+
return;
|
|
140
|
+
case 'ObjectPattern':
|
|
141
|
+
if (Array.isArray(pattern.properties)) {
|
|
142
|
+
for (const property of pattern.properties) {
|
|
143
|
+
if (isNode(property))
|
|
144
|
+
patternNames(property.type === 'Property' ? property.value : property, names);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
case 'ArrayPattern':
|
|
149
|
+
if (Array.isArray(pattern.elements))
|
|
150
|
+
for (const element of pattern.elements)
|
|
151
|
+
patternNames(element, names);
|
|
152
|
+
return;
|
|
153
|
+
case 'AssignmentPattern':
|
|
154
|
+
patternNames(pattern.left, names);
|
|
155
|
+
return;
|
|
156
|
+
case 'RestElement':
|
|
157
|
+
patternNames(pattern.argument, names);
|
|
158
|
+
return;
|
|
159
|
+
case 'TSParameterProperty':
|
|
160
|
+
patternNames(pattern.parameter, names);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Every value name declared in the file outside its imports. No scope analysis: a name declared
|
|
166
|
+
* anywhere at all counts, which can only make the transform tag less, never the wrong element.
|
|
167
|
+
*/
|
|
168
|
+
function declaredNames(program) {
|
|
169
|
+
const names = new Set();
|
|
170
|
+
const walk = (node) => {
|
|
171
|
+
if (node.type === 'ImportDeclaration')
|
|
172
|
+
return;
|
|
173
|
+
switch (node.type) {
|
|
174
|
+
case 'VariableDeclarator':
|
|
175
|
+
patternNames(node.id, names);
|
|
176
|
+
break;
|
|
177
|
+
case 'FunctionDeclaration':
|
|
178
|
+
case 'FunctionExpression':
|
|
179
|
+
case 'ArrowFunctionExpression':
|
|
180
|
+
patternNames(node.id, names);
|
|
181
|
+
if (Array.isArray(node.params))
|
|
182
|
+
for (const param of node.params)
|
|
183
|
+
patternNames(param, names);
|
|
184
|
+
break;
|
|
185
|
+
case 'ClassDeclaration':
|
|
186
|
+
case 'ClassExpression':
|
|
187
|
+
case 'TSEnumDeclaration':
|
|
188
|
+
case 'TSImportEqualsDeclaration':
|
|
189
|
+
case 'TSModuleDeclaration':
|
|
190
|
+
patternNames(node.id, names);
|
|
191
|
+
break;
|
|
192
|
+
case 'CatchClause':
|
|
193
|
+
patternNames(node.param, names);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
const keys = visitorKeys[node.type];
|
|
197
|
+
if (!keys)
|
|
198
|
+
return;
|
|
199
|
+
for (const key of keys) {
|
|
200
|
+
const child = node[key];
|
|
201
|
+
if (Array.isArray(child)) {
|
|
202
|
+
for (const item of child)
|
|
203
|
+
if (isNode(item))
|
|
204
|
+
walk(item);
|
|
205
|
+
}
|
|
206
|
+
else if (isNode(child))
|
|
207
|
+
walk(child);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
walk(program);
|
|
211
|
+
return names;
|
|
212
|
+
}
|
|
213
|
+
/** The DOM tag `opening` renders, or null when it isn't one the transform tags. */
|
|
214
|
+
function hostTag(opening, forwarding) {
|
|
215
|
+
const name = opening.name;
|
|
216
|
+
if (!isNode(name) || name.type !== 'JSXIdentifier' || typeof name.name !== 'string')
|
|
217
|
+
return null;
|
|
218
|
+
const tag = name.name;
|
|
219
|
+
// Lowercase first letter is React's own rule for host elements; `Foo`, `foo.bar` and `svg:rect`
|
|
220
|
+
// are components or namespaced names and never reach the DOM as-is.
|
|
221
|
+
const first = tag.charCodeAt(0);
|
|
222
|
+
if (first >= 97 && first <= 122)
|
|
223
|
+
return tag;
|
|
224
|
+
const forwarded = forwarding.get(tag);
|
|
225
|
+
if (!forwarded)
|
|
226
|
+
return null;
|
|
227
|
+
// `<Link legacyBehavior>` clones its child instead of rendering an `<a>`, and drops its own
|
|
228
|
+
// props; the child is tagged on its own.
|
|
229
|
+
return hasAttribute(opening, 'legacyBehavior') ? null : forwarded;
|
|
230
|
+
}
|
|
231
|
+
function hasAttribute(opening, attribute) {
|
|
232
|
+
const attributes = opening.attributes;
|
|
233
|
+
if (!Array.isArray(attributes))
|
|
234
|
+
return false;
|
|
235
|
+
return attributes.some((item) => isNode(item) &&
|
|
236
|
+
item.type === 'JSXAttribute' &&
|
|
237
|
+
isNode(item.name) &&
|
|
238
|
+
item.name.type === 'JSXIdentifier' &&
|
|
239
|
+
item.name.name === attribute);
|
|
240
|
+
}
|
|
241
|
+
function lineStarts(source) {
|
|
242
|
+
const starts = [0];
|
|
243
|
+
for (let index = source.indexOf('\n'); index !== -1; index = source.indexOf('\n', index + 1)) {
|
|
244
|
+
starts.push(index + 1);
|
|
245
|
+
}
|
|
246
|
+
return starts;
|
|
247
|
+
}
|
|
248
|
+
function locate(starts, offset) {
|
|
249
|
+
let low = 0;
|
|
250
|
+
let high = starts.length - 1;
|
|
251
|
+
while (low < high) {
|
|
252
|
+
const mid = (low + high + 1) >> 1;
|
|
253
|
+
if ((starts[mid] ?? 0) <= offset)
|
|
254
|
+
low = mid;
|
|
255
|
+
else
|
|
256
|
+
high = mid - 1;
|
|
257
|
+
}
|
|
258
|
+
return { line: low + 1, column: offset - (starts[low] ?? 0) };
|
|
259
|
+
}
|
|
260
|
+
function langFor(relPath) {
|
|
261
|
+
return /\.m?jsx?$/.test(relPath) ? 'jsx' : 'tsx';
|
|
262
|
+
}
|
|
263
|
+
function unchanged(source, warning) {
|
|
264
|
+
return warning === undefined
|
|
265
|
+
? { code: source, map: null, entries: [] }
|
|
266
|
+
: { code: source, map: null, entries: [], warning };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Injects an opaque `data-fb` ID on every lowercase host JSX element, and on the library components
|
|
270
|
+
* of FORWARDING_COMPONENTS (recorded with the tag they render). Pure: the same source and
|
|
271
|
+
* options always give the same output, which is what lets the manifest be rebuilt from git
|
|
272
|
+
* instead of collected from a (cached) build.
|
|
273
|
+
*/
|
|
274
|
+
export function transform(source, options) {
|
|
275
|
+
const { relPath, secret } = options;
|
|
276
|
+
let warning;
|
|
277
|
+
let commit = null;
|
|
278
|
+
if (options.commit) {
|
|
279
|
+
if (SAFE_COMMIT.test(options.commit))
|
|
280
|
+
commit = options.commit;
|
|
281
|
+
else
|
|
282
|
+
warning = `[mitt] ignored an unsafe commit value for ${relPath}`;
|
|
283
|
+
}
|
|
284
|
+
if (!MAYBE_TAGGED.test(source))
|
|
285
|
+
return unchanged(source, warning);
|
|
286
|
+
let program;
|
|
287
|
+
try {
|
|
288
|
+
const result = parseSync(relPath, source, {
|
|
289
|
+
lang: langFor(relPath),
|
|
290
|
+
sourceType: 'module',
|
|
291
|
+
preserveParens: false,
|
|
292
|
+
});
|
|
293
|
+
if (result.errors.length > 0) {
|
|
294
|
+
const first = result.errors[0]?.message ?? 'unknown error';
|
|
295
|
+
return unchanged(source, `[mitt] skipped ${relPath}: could not parse it (${first})`);
|
|
296
|
+
}
|
|
297
|
+
program = result.program;
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
301
|
+
return unchanged(source, `[mitt] skipped ${relPath}: could not parse it (${message})`);
|
|
302
|
+
}
|
|
303
|
+
const s = new MagicString(source);
|
|
304
|
+
const entries = [];
|
|
305
|
+
const starts = lineStarts(source);
|
|
306
|
+
const ancestors = [];
|
|
307
|
+
const forwarding = isNode(program) ? forwardingImports(program) : new Map();
|
|
308
|
+
if (forwarding.size > 0 && isNode(program)) {
|
|
309
|
+
// A local `Image` (a parameter, a nested component) may not be next/image at all.
|
|
310
|
+
for (const name of declaredNames(program))
|
|
311
|
+
forwarding.delete(name);
|
|
312
|
+
}
|
|
313
|
+
const visitOpening = (opening) => {
|
|
314
|
+
const tag = hostTag(opening, forwarding);
|
|
315
|
+
if (!tag || SKIPPED_TAGS.has(tag))
|
|
316
|
+
return;
|
|
317
|
+
// After `<Image<Props>` type arguments, which only a component can carry.
|
|
318
|
+
const nameEnd = isNode(opening.typeArguments)
|
|
319
|
+
? opening.typeArguments.end
|
|
320
|
+
: opening.name.end;
|
|
321
|
+
let insert = '';
|
|
322
|
+
if (!hasAttribute(opening, 'data-fb')) {
|
|
323
|
+
const { line, column } = locate(starts, opening.start);
|
|
324
|
+
const id = createId(secret, relPath, line, column);
|
|
325
|
+
entries.push({ id, file: relPath, line, column, tag, component: nearestComponent(ancestors) });
|
|
326
|
+
insert += ` data-fb="${id}"`;
|
|
327
|
+
}
|
|
328
|
+
if (tag === 'html' && commit && !hasAttribute(opening, 'data-fb-commit')) {
|
|
329
|
+
insert += ` data-fb-commit="${commit}"`;
|
|
330
|
+
}
|
|
331
|
+
if (insert)
|
|
332
|
+
s.appendLeft(nameEnd, insert);
|
|
333
|
+
};
|
|
334
|
+
const walk = (node) => {
|
|
335
|
+
if (node.type === 'JSXOpeningElement')
|
|
336
|
+
visitOpening(node);
|
|
337
|
+
const keys = visitorKeys[node.type];
|
|
338
|
+
if (!keys)
|
|
339
|
+
return;
|
|
340
|
+
ancestors.push(node);
|
|
341
|
+
for (const key of keys) {
|
|
342
|
+
const child = node[key];
|
|
343
|
+
if (Array.isArray(child)) {
|
|
344
|
+
for (const item of child)
|
|
345
|
+
if (isNode(item))
|
|
346
|
+
walk(item);
|
|
347
|
+
}
|
|
348
|
+
else if (isNode(child))
|
|
349
|
+
walk(child);
|
|
350
|
+
}
|
|
351
|
+
ancestors.pop();
|
|
352
|
+
};
|
|
353
|
+
if (isNode(program))
|
|
354
|
+
walk(program);
|
|
355
|
+
if (!s.hasChanged())
|
|
356
|
+
return unchanged(source, warning);
|
|
357
|
+
const map = options.sourceMap === false
|
|
358
|
+
? null
|
|
359
|
+
: s.generateMap({ hires: true, source: options.mapSource ?? relPath, includeContent: true });
|
|
360
|
+
const result = { code: s.toString(), map, entries };
|
|
361
|
+
if (warning !== undefined)
|
|
362
|
+
result.warning = warning;
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basementstudio/mitt-next-plugin",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Next.js plugin for Mitt: opaque data-fb IDs at build time (Turbopack and webpack), the private manifest rebuilt from git, and a dev-only setup page.",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"mitt",
|
|
8
|
+
"feedback",
|
|
9
|
+
"nextjs",
|
|
10
|
+
"next-plugin",
|
|
11
|
+
"turbopack"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/basementstudio/mitt#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/basementstudio/mitt/issues"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/basementstudio/mitt.git",
|
|
20
|
+
"directory": "packages/next-plugin"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./loader": {
|
|
33
|
+
"types": "./dist/loader.d.ts",
|
|
34
|
+
"default": "./dist/loader.js"
|
|
35
|
+
},
|
|
36
|
+
"./manifest": {
|
|
37
|
+
"types": "./dist/manifest.d.ts",
|
|
38
|
+
"default": "./dist/manifest.js"
|
|
39
|
+
},
|
|
40
|
+
"./node": {
|
|
41
|
+
"types": "./dist/node.d.ts",
|
|
42
|
+
"default": "./dist/node.js"
|
|
43
|
+
},
|
|
44
|
+
"./package.json": "./package.json"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
48
|
+
"lint": "biome check .",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"test": "vitest run"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@basementstudio/mitt-shared": "0.0.0",
|
|
54
|
+
"magic-string": "^1.4.3",
|
|
55
|
+
"oxc-parser": "^0.154.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^26.6.5",
|
|
59
|
+
"next": "^16.4.2",
|
|
60
|
+
"typescript": "7.0.2",
|
|
61
|
+
"vitest": "^5.0.5"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"next": ">=16"
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
}
|
|
69
|
+
}
|
package/README.md
DELETED