miaoda-expo-devkit 0.1.1-beta.98 → 0.1.1-dev.development-build.1
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 +154 -110
- package/dist/babel/plugin-lucide-react-native.js +184 -184
- package/dist/cli/lint.js +317 -309
- package/dist/index.d.mts +1 -110
- package/dist/index.d.ts +1 -110
- package/dist/index.js +0 -159
- package/dist/index.mjs +0 -132
- package/dist/metro.d.mts +25 -5
- package/dist/metro.d.ts +25 -5
- package/dist/metro.js +49 -18
- package/dist/metro.mjs +50 -20
- package/dist/rules/no-expo-audio-compat.js +2041 -0
- package/dist/rules/no-expo-video-compat.js +90 -90
- package/dist/stubs/entry-inject.js +0 -2
- package/dist/stubs/expo-native-wechat-stub.js +116 -0
- package/dist/stubs/expo-router-entry-native-stub.js +4 -0
- package/dist/stubs/i18n/en.js +16 -1
- package/dist/stubs/i18n/zh.js +16 -1
- package/dist/stubs/logbox-control.js +9 -0
- package/dist/stubs/screenshot-control.js +1 -1
- package/dist/stubs/sentry-react-native-stub.js +15 -180
- package/oxlint-config.json +11 -4
- package/package.json +60 -5
- package/pnpm-patches/@expo__cli@55.0.16-55.0.22.patch +627 -0
- package/pnpm-patches/@expo__cli@55.0.16.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.17.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.18.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.19.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.20.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.21.patch +218 -0
- package/pnpm-patches/@expo__cli@55.0.22.patch +218 -0
- package/pnpm-patches/@shopify__react-native-skia@2.4.18.patch +14 -0
- package/pnpm-patches/expo-modules-core@55.0.15.patch +21 -0
- package/pnpm-patches/expo@55.0.6.patch +235 -0
- package/pnpm-patches/metro-file-map@0.83.3.patch +24 -0
- package/pnpm-patches/metro-runtime@0.83.3.patch +13 -0
- package/pnpm-patches/react-native-css-interop@0.2.6.patch +12 -0
- package/pnpm-patches/react-native-reanimated@4.2.1.patch +53 -0
- package/pnpm-patches/react-native-worklets@0.7.2.patch +91 -0
- package/pnpm-patches/react-native@0.83.2.patch +384 -0
- package/pnpmfile.cjs +168 -0
- package/dist/stubs/preview-control.js +0 -60
package/dist/stubs/i18n/en.js
CHANGED
|
@@ -186,7 +186,22 @@ const en = {
|
|
|
186
186
|
"haptics.webUnsupported": "Haptic feedback is not supported on Web, skipped",
|
|
187
187
|
"haptics.styleMustBeEnum": "style must be one of ImpactFeedbackStyle enum values ({valid}), received: {received}",
|
|
188
188
|
"haptics.typeMustBeEnum": "type must be one of NotificationFeedbackType enum values ({valid}), received: {received}",
|
|
189
|
-
"validation.uriMustStartWithHttp": "uri must start with http:// or https://"
|
|
189
|
+
"validation.uriMustStartWithHttp": "uri must start with http:// or https://",
|
|
190
|
+
// ─── expo-native-wechat-stub ────────────────────────────────────────────────
|
|
191
|
+
"wechat.unavailable": "WeChat Pay is not available in this environment. Export the app and install it on a phone to use it.",
|
|
192
|
+
"wechat.checkUniversalLinkReadyDetail": "Universal Link check is not supported on Web",
|
|
193
|
+
"wechat.sendAuthRequest": "WeChat Auth Login",
|
|
194
|
+
"wechat.shareText": "Share Text",
|
|
195
|
+
"wechat.shareImage": "Share Image",
|
|
196
|
+
"wechat.shareVideo": "Share Video",
|
|
197
|
+
"wechat.shareWebpage": "Share Webpage",
|
|
198
|
+
"wechat.shareMiniProgram": "Share Mini Program",
|
|
199
|
+
"wechat.requestPayment": "Request WeChat Payment",
|
|
200
|
+
"wechat.requestSubscribeMessage": "Request Subscribe Message",
|
|
201
|
+
"wechat.openCustomerService": "Open Customer Service",
|
|
202
|
+
"wechat.launchMiniProgram": "Launch Mini Program",
|
|
203
|
+
"wechat.appPureSignContract": "WeChat Pure Sign Contract",
|
|
204
|
+
"wechat.requestMerchantTransfer": "WeChat Merchant Transfer"
|
|
190
205
|
};
|
|
191
206
|
// Annotate the CommonJS export names for ESM import in node:
|
|
192
207
|
0 && (module.exports = {
|
package/dist/stubs/i18n/zh.js
CHANGED
|
@@ -189,7 +189,22 @@ const zh = {
|
|
|
189
189
|
"haptics.webUnsupported": "Web \u5E73\u53F0\u4E0D\u652F\u6301\u89E6\u89C9\u53CD\u9988\uFF0C\u5DF2\u8DF3\u8FC7",
|
|
190
190
|
"haptics.styleMustBeEnum": "style \u5FC5\u987B\u662F ImpactFeedbackStyle \u679A\u4E3E\u503C\u4E4B\u4E00\uFF08{valid}\uFF09\uFF0C\u6536\u5230: {received}",
|
|
191
191
|
"haptics.typeMustBeEnum": "type \u5FC5\u987B\u662F NotificationFeedbackType \u679A\u4E3E\u503C\u4E4B\u4E00\uFF08{valid}\uFF09\uFF0C\u6536\u5230: {received}",
|
|
192
|
-
"validation.uriMustStartWithHttp": "uri \u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934"
|
|
192
|
+
"validation.uriMustStartWithHttp": "uri \u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934",
|
|
193
|
+
// ─── expo-native-wechat-stub ────────────────────────────────────────────────
|
|
194
|
+
"wechat.unavailable": "\u5FAE\u4FE1\u652F\u4ED8\u65E0\u6CD5\u5728\u5F53\u524D\u73AF\u5883\u4F7F\u7528\uFF0C\u9700\u5C06\u5E94\u7528\u5BFC\u51FA\u5E76\u5B89\u88C5\u5230\u624B\u673A\u540E\u624D\u80FD\u4F7F\u7528",
|
|
195
|
+
"wechat.checkUniversalLinkReadyDetail": "Web \u5E73\u53F0\u4E0D\u652F\u6301 Universal Link \u6821\u9A8C",
|
|
196
|
+
"wechat.sendAuthRequest": "\u5FAE\u4FE1\u6388\u6743\u767B\u5F55",
|
|
197
|
+
"wechat.shareText": "\u5206\u4EAB\u6587\u5B57",
|
|
198
|
+
"wechat.shareImage": "\u5206\u4EAB\u56FE\u7247",
|
|
199
|
+
"wechat.shareVideo": "\u5206\u4EAB\u89C6\u9891",
|
|
200
|
+
"wechat.shareWebpage": "\u5206\u4EAB\u7F51\u9875",
|
|
201
|
+
"wechat.shareMiniProgram": "\u5206\u4EAB\u5C0F\u7A0B\u5E8F",
|
|
202
|
+
"wechat.requestPayment": "\u53D1\u8D77\u5FAE\u4FE1\u652F\u4ED8",
|
|
203
|
+
"wechat.requestSubscribeMessage": "\u8BF7\u6C42\u8BA2\u9605\u6D88\u606F",
|
|
204
|
+
"wechat.openCustomerService": "\u6253\u5F00\u5FAE\u4FE1\u5BA2\u670D",
|
|
205
|
+
"wechat.launchMiniProgram": "\u8DF3\u8F6C\u5C0F\u7A0B\u5E8F",
|
|
206
|
+
"wechat.appPureSignContract": "\u5FAE\u4FE1\u514D\u5BC6\u7B7E\u7EA6",
|
|
207
|
+
"wechat.requestMerchantTransfer": "\u5FAE\u4FE1\u5546\u5BB6\u8F6C\u8D26"
|
|
193
208
|
};
|
|
194
209
|
// Annotate the CommonJS export names for ESM import in node:
|
|
195
210
|
0 && (module.exports = {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var import_react_native = require("react-native");
|
|
3
|
+
const DISABLED_MARKER = "__MIAODA_DEVKIT_LOGBOX_NOTIFICATIONS_DISABLED__";
|
|
4
|
+
const runtime = globalThis;
|
|
5
|
+
if (!runtime[DISABLED_MARKER]) {
|
|
6
|
+
import_react_native.LogBox.ignoreAllLogs(true);
|
|
7
|
+
runtime[DISABLED_MARKER] = true;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=logbox-control.js.map
|
|
@@ -24,7 +24,7 @@ __export(screenshot_control_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(screenshot_control_exports);
|
|
26
26
|
|
|
27
|
-
// ../../node_modules
|
|
27
|
+
// ../../node_modules/@zumer/snapdom/dist/snapdom.mjs
|
|
28
28
|
var Ho = Object.defineProperty;
|
|
29
29
|
var q = (t, e) => () => (t && (e = t(t = 0)), e);
|
|
30
30
|
var Rt = (t, e) => {
|
|
@@ -24,193 +24,28 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
|
|
25
25
|
// src/stubs/sentry-react-native-stub.ts
|
|
26
26
|
var RealSentry = __toESM(require("@sentry/react-native"));
|
|
27
|
-
|
|
28
|
-
// src/capture.ts
|
|
29
|
-
var import_stacktrace_parser = require("stacktrace-parser");
|
|
27
|
+
var import_core = require("@sentry/core");
|
|
30
28
|
var import_react_native = require("react-native");
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
* 从 NativeModules.SourceCode.scriptURL 推断 Metro server base URL。
|
|
37
|
-
* web 平台使用相对路径;native 回退到 localhost:8081。
|
|
38
|
-
*/
|
|
39
|
-
static _getDefaultBaseUrl() {
|
|
40
|
-
try {
|
|
41
|
-
const scriptURL = import_react_native.NativeModules?.SourceCode?.scriptURL;
|
|
42
|
-
if (scriptURL) {
|
|
43
|
-
const url = new URL(scriptURL);
|
|
44
|
-
return `${url.protocol}//${url.host}`;
|
|
45
|
-
}
|
|
46
|
-
} catch (_) {
|
|
47
|
-
}
|
|
48
|
-
return import_react_native.Platform.OS === "web" ? "" : "http://localhost:8081";
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* 解析 Error.stack 字符串为 Metro 所需的帧数组。
|
|
52
|
-
*
|
|
53
|
-
* 使用 stacktrace-parser 覆盖各 JS 引擎的格式:
|
|
54
|
-
* V8/Node.js/Hermes(新):at methodName (url:line:col)
|
|
55
|
-
* Gecko/Firefox/Hermes(旧):methodName@url:line:col
|
|
56
|
-
* JavaScriptCore(iOS):methodName@url:line:col
|
|
57
|
-
*
|
|
58
|
-
* 无法符号化的帧(file 或 lineNumber 为 null)会被过滤掉。
|
|
59
|
-
*/
|
|
60
|
-
parseErrorStack(stack) {
|
|
61
|
-
return (0, import_stacktrace_parser.parse)(stack).filter(
|
|
62
|
-
(f) => f.file != null && f.lineNumber != null
|
|
63
|
-
).map((f) => ({
|
|
64
|
-
file: f.file,
|
|
65
|
-
lineNumber: f.lineNumber,
|
|
66
|
-
column: f.column != null ? f.column - 1 : 0,
|
|
67
|
-
methodName: f.methodName === "<unknown>" ? "(anonymous)" : f.methodName
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* 将帧列表发送到 Metro /symbolicate,返回符号化后的帧数组。
|
|
72
|
-
*/
|
|
73
|
-
async symbolicate(stack) {
|
|
74
|
-
if (stack.length === 0) return null;
|
|
75
|
-
const endpoint = `${this.baseUrl}/symbolicate`;
|
|
76
|
-
try {
|
|
77
|
-
const res = await fetch(endpoint, {
|
|
78
|
-
method: "POST",
|
|
79
|
-
headers: { "Content-Type": "application/json" },
|
|
80
|
-
body: JSON.stringify({ stack })
|
|
81
|
-
});
|
|
82
|
-
if (!res.ok) {
|
|
83
|
-
console.warn(`[SentryCapture] /symbolicate returned ${res.status}`);
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
const data = await res.json();
|
|
87
|
-
return data.stack ?? null;
|
|
88
|
-
} catch (e) {
|
|
89
|
-
console.warn("[SentryCapture] symbolication failed:", e?.message ?? e);
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
var SentryCapture = class {
|
|
95
|
-
constructor({ onError, onNetwork, symbolicator } = {}) {
|
|
96
|
-
this.onError = onError;
|
|
97
|
-
this.onNetwork = onNetwork;
|
|
98
|
-
this.symbolicator = symbolicator ?? new MetroSymbolicator();
|
|
99
|
-
this.beforeSend = this.beforeSend.bind(this);
|
|
100
|
-
this.beforeBreadcrumb = this.beforeBreadcrumb.bind(this);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Sentry beforeSend hook。
|
|
104
|
-
* 优先使用原始 Error.stack 进行符号化;若无法获取则回退到 Sentry 事件帧。
|
|
105
|
-
* 符号化完成后触发 onError 回调,原样返回 event。
|
|
106
|
-
*/
|
|
107
|
-
async beforeSend(event, hint) {
|
|
108
|
-
globalThis.__SENTRY_LAST_RAW__ = { event, hint };
|
|
109
|
-
const message = event.exception?.values?.[0]?.value ?? event.message ?? "(unknown)";
|
|
110
|
-
let symbolicatedFrames = null;
|
|
111
|
-
const originalException = hint?.originalException;
|
|
112
|
-
const rawStack = originalException instanceof Error && typeof originalException.stack === "string" ? originalException.stack : null;
|
|
113
|
-
if (rawStack !== null) {
|
|
114
|
-
const frames = this.symbolicator.parseErrorStack(rawStack);
|
|
115
|
-
if (frames.length > 0) {
|
|
116
|
-
symbolicatedFrames = await this.symbolicator.symbolicate(frames);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (symbolicatedFrames === null) {
|
|
120
|
-
const sentryFrames = event.exception?.values?.[0]?.stacktrace?.frames ?? [];
|
|
121
|
-
const mapped = sentryFrames.filter(
|
|
122
|
-
(f) => f.filename != null && f.lineno != null
|
|
123
|
-
).map(
|
|
124
|
-
(f) => ({
|
|
125
|
-
file: f.filename,
|
|
126
|
-
lineNumber: f.lineno,
|
|
127
|
-
column: f.colno ?? 0,
|
|
128
|
-
methodName: f.function ?? "(anonymous)"
|
|
129
|
-
})
|
|
130
|
-
);
|
|
131
|
-
if (mapped.length > 0) {
|
|
132
|
-
symbolicatedFrames = await this.symbolicator.symbolicate(mapped);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const componentStack = event.contexts?.react?.componentStack ?? null;
|
|
136
|
-
const mechanismType = event.exception?.values?.[0]?.mechanism?.type ?? null;
|
|
137
|
-
this.onError?.({ message, symbolicatedFrames, componentStack, mechanismType });
|
|
138
|
-
return event;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Sentry beforeBreadcrumb hook。
|
|
142
|
-
* 识别 HTTP 类型的 breadcrumb,触发 onNetwork 回调,原样返回 breadcrumb。
|
|
143
|
-
*/
|
|
144
|
-
beforeBreadcrumb(breadcrumb, _hint) {
|
|
145
|
-
if (breadcrumb.type === "http") {
|
|
146
|
-
const data = breadcrumb.data;
|
|
147
|
-
this.onNetwork?.({
|
|
148
|
-
method: data?.method ?? null,
|
|
149
|
-
url: data?.url ?? null,
|
|
150
|
-
statusCode: data?.status_code ?? null
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
return breadcrumb;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
// src/stubs/sentry-react-native-stub.ts
|
|
158
|
-
function getParentOrigin() {
|
|
159
|
-
try {
|
|
160
|
-
const w = globalThis.window;
|
|
161
|
-
if (!w) return "*";
|
|
162
|
-
return new URLSearchParams(w.location.search).get("parentOrigin") || "*";
|
|
163
|
-
} catch {
|
|
164
|
-
return "*";
|
|
165
|
-
}
|
|
29
|
+
var SANDBOX_MARKER = /* @__PURE__ */ Symbol.for("vite-sandbox.expo-browser-observability.v2");
|
|
30
|
+
var FALLBACK_DSN = process.env["INJECT_SENTRY_DSN"] ?? "https://stubPublicKey@o0.ingest.sentry.io/0";
|
|
31
|
+
function reportVersionMismatch(expected, actual) {
|
|
32
|
+
const message = `Sentry SDK \u7248\u672C\u4E0D\u4E00\u81F4\uFF1Asandbox=${expected}\uFF0C@sentry/react-native core=${actual || "unknown"}\u3002\u89C2\u6D4B\u4E8B\u4EF6\u53EF\u80FD\u9759\u9ED8\u4E22\u5931\u3002`;
|
|
33
|
+
console.error(`[miaoda-expo-devkit] ${message}`);
|
|
166
34
|
}
|
|
167
|
-
var OVERRIDE_DSN = process.env["INJECT_SENTRY_DSN"] ?? "https://stubPublicKey@o0.ingest.sentry.io/0";
|
|
168
|
-
var _capture = new SentryCapture({
|
|
169
|
-
onError(info) {
|
|
170
|
-
console.warn("[SentryStub] \u6355\u83B7\u5230\u9519\u8BEF\uFF1A", info.message);
|
|
171
|
-
if (info.symbolicatedFrames?.length) {
|
|
172
|
-
const top = info.symbolicatedFrames[0];
|
|
173
|
-
console.warn(` at ${top.methodName} (${top.file}:${top.lineNumber}:${top.column})`);
|
|
174
|
-
}
|
|
175
|
-
const w = globalThis.window;
|
|
176
|
-
if (w !== void 0 && w !== w.parent) {
|
|
177
|
-
w.parent.postMessage(
|
|
178
|
-
{
|
|
179
|
-
type: "GLOBAL_ERROR",
|
|
180
|
-
error: {
|
|
181
|
-
message: info.message,
|
|
182
|
-
symbolicatedFrames: info.symbolicatedFrames,
|
|
183
|
-
componentStack: info.componentStack,
|
|
184
|
-
mechanismType: info.mechanismType
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
getParentOrigin()
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
35
|
var stub = {
|
|
193
36
|
...RealSentry,
|
|
194
37
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
38
|
+
* Native 保留应用初始化;独立 Web 使用安全 DSN;sandbox Web 已由前置运行时
|
|
39
|
+
* 初始化,因此这里只校验版本并阻止第二次初始化。
|
|
197
40
|
*/
|
|
198
41
|
init: ((options) => {
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return upstreamBeforeSend ? await upstreamBeforeSend(processed, hint) : processed;
|
|
207
|
-
},
|
|
208
|
-
beforeBreadcrumb(breadcrumb, hint) {
|
|
209
|
-
const processed = _capture.beforeBreadcrumb(breadcrumb, hint);
|
|
210
|
-
return upstreamBeforeBreadcrumb ? upstreamBeforeBreadcrumb(processed, hint) : processed;
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
return RealSentry.init(initOptions);
|
|
42
|
+
if (import_react_native.Platform.OS !== "web") return RealSentry.init(options);
|
|
43
|
+
const sandboxVersion = globalThis[SANDBOX_MARKER];
|
|
44
|
+
if (typeof sandboxVersion === "string") {
|
|
45
|
+
if (sandboxVersion !== import_core.SDK_VERSION) reportVersionMismatch(sandboxVersion, import_core.SDK_VERSION);
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
return RealSentry.init({ ...options, dsn: FALLBACK_DSN });
|
|
214
49
|
})
|
|
215
50
|
};
|
|
216
51
|
module.exports = stub;
|
package/oxlint-config.json
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
{ "name": "expo-router-dynamic-tab", "specifier": "miaoda-expo-devkit/rules/no-unregistered-dynamic-tab-route" },
|
|
12
12
|
{ "name": "rn-pressable", "specifier": "miaoda-expo-devkit/rules/no-pressable-without-on-press" },
|
|
13
13
|
{ "name": "expo-video-compat", "specifier": "miaoda-expo-devkit/rules/no-expo-video-compat" },
|
|
14
|
+
{ "name": "expo-audio-compat", "specifier": "miaoda-expo-devkit/rules/no-expo-audio-compat" },
|
|
14
15
|
{ "name": "rn-pressable-style", "specifier": "miaoda-expo-devkit/rules/no-pressable-function-style" },
|
|
15
16
|
{ "name": "expo-unused-config-plugin", "specifier": "miaoda-expo-devkit/rules/no-unused-expo-plugin" },
|
|
16
17
|
{ "name": "image-import", "specifier": "miaoda-expo-devkit/rules/no-missing-image-import" },
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"expo-router-dynamic-tab/no-unregistered-dynamic-tab-route": "error",
|
|
36
37
|
"rn-pressable/no-pressable-without-on-press": "error",
|
|
37
38
|
"expo-video-compat/no-expo-video-compat": "warn",
|
|
39
|
+
"expo-audio-compat/no-expo-audio-compat": "warn",
|
|
38
40
|
"rn-pressable-style/no-pressable-function-style": "error",
|
|
39
41
|
"expo-unused-config-plugin/no-unused-expo-plugin": "error",
|
|
40
42
|
"image-import/no-missing-image-import": "error",
|
|
@@ -61,10 +63,11 @@
|
|
|
61
63
|
},
|
|
62
64
|
|
|
63
65
|
"ignorePatterns": [
|
|
64
|
-
"metro.config.js",
|
|
65
|
-
"babel.config.js",
|
|
66
|
-
".pnpmfile.cjs",
|
|
67
66
|
"output/**",
|
|
67
|
+
"packages/expo-dev-client/**",
|
|
68
|
+
"packages/expo-dev-launcher/**",
|
|
69
|
+
"packages/expo-dev-menu/**",
|
|
70
|
+
"packages/expo-dev-menu-interface/**",
|
|
68
71
|
"supabase/**",
|
|
69
72
|
"src/components/ui/**",
|
|
70
73
|
".skills/**"
|
|
@@ -72,7 +75,11 @@
|
|
|
72
75
|
|
|
73
76
|
"overrides": [
|
|
74
77
|
{
|
|
75
|
-
"files": [
|
|
78
|
+
"files": [
|
|
79
|
+
"*.config.{js,cjs,mjs,ts,cts,mts}",
|
|
80
|
+
"**/*.config.{js,cjs,mjs,ts,cts,mts}",
|
|
81
|
+
".pnpmfile.cjs"
|
|
82
|
+
],
|
|
76
83
|
"env": {
|
|
77
84
|
"node": true
|
|
78
85
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "miaoda-expo-devkit",
|
|
3
|
-
"version": "0.1.1-
|
|
3
|
+
"version": "0.1.1-dev.development-build.1",
|
|
4
4
|
"description": "Expo 应用开发工具集:Sentry DSN 替换 stub、错误/网络捕获、Metro 符号化",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"bin": {
|
|
10
|
-
"devkit-lint": "
|
|
10
|
+
"devkit-lint": "dist/cli/lint.js"
|
|
11
11
|
},
|
|
12
12
|
"exports": {
|
|
13
13
|
".": {
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"./expo-calendar-stub": "./dist/stubs/expo-calendar-stub.js",
|
|
50
50
|
"./expo-image-picker-stub": "./dist/stubs/expo-image-picker-stub.js",
|
|
51
51
|
"./expo-haptics-stub": "./dist/stubs/expo-haptics-stub.js",
|
|
52
|
+
"./expo-native-wechat-stub": "./dist/stubs/expo-native-wechat-stub.js",
|
|
52
53
|
"./rules/no-undeclared-expo-plugin": "./dist/rules/no-undeclared-expo-plugin.js",
|
|
53
54
|
"./rules/no-unused-expo-plugin": "./dist/rules/no-unused-expo-plugin.js",
|
|
54
55
|
"./rules/no-unstable-expo-router": "./dist/rules/no-unstable-expo-router.js",
|
|
@@ -74,12 +75,20 @@
|
|
|
74
75
|
},
|
|
75
76
|
"files": [
|
|
76
77
|
"dist",
|
|
78
|
+
"pnpmfile.cjs",
|
|
79
|
+
"pnpm-patches",
|
|
77
80
|
"biome-config.json",
|
|
78
81
|
"oxlint-config.json",
|
|
79
82
|
"pnpm-config.json",
|
|
80
83
|
"tsconfig-base.json",
|
|
81
84
|
"!dist/**/*.map"
|
|
82
85
|
],
|
|
86
|
+
"nx": {
|
|
87
|
+
"tags": [
|
|
88
|
+
"type:package",
|
|
89
|
+
"scope:devkit"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
83
92
|
"dependencies": {
|
|
84
93
|
"@zumer/snapdom": "^2.12.9",
|
|
85
94
|
"connect": "^3.7.0",
|
|
@@ -87,8 +96,7 @@
|
|
|
87
96
|
"lodash.throttle": "^4.1.1",
|
|
88
97
|
"metro-minify-esbuild": "^0.2.0",
|
|
89
98
|
"oxc-resolver": "^11.19.1",
|
|
90
|
-
"package-up": "^5.0.0"
|
|
91
|
-
"stacktrace-parser": "^0.1.11"
|
|
99
|
+
"package-up": "^5.0.0"
|
|
92
100
|
},
|
|
93
101
|
"peerDependencies": {
|
|
94
102
|
"@expo/config-plugins": ">=55.0.0",
|
|
@@ -158,5 +166,52 @@
|
|
|
158
166
|
"publishConfig": {
|
|
159
167
|
"registry": "https://registry.npmjs.org/",
|
|
160
168
|
"access": "public"
|
|
169
|
+
},
|
|
170
|
+
"clean-publish": {
|
|
171
|
+
"fields": [
|
|
172
|
+
"devDependencies",
|
|
173
|
+
"scripts"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
"devDependencies": {
|
|
177
|
+
"@babel/core": "^7.26.0",
|
|
178
|
+
"@babel/helper-module-imports": "^7.28.6",
|
|
179
|
+
"@biomejs/biome": "^2.4.12",
|
|
180
|
+
"@sentry/core": "10.49.0",
|
|
181
|
+
"@sentry/react-native": "8.9.2",
|
|
182
|
+
"@types/babel__core": "^7.20.5",
|
|
183
|
+
"@types/babel__helper-module-imports": "^7.18.3",
|
|
184
|
+
"@types/connect": "^3.4.38",
|
|
185
|
+
"@types/lodash.throttle": "^4.1.9",
|
|
186
|
+
"@types/node": "^25.0.0",
|
|
187
|
+
"@types/semver": "^7.7.1",
|
|
188
|
+
"@expo/schemer": "^2.1.4",
|
|
189
|
+
"clean-publish": "^6.0.5",
|
|
190
|
+
"expo-router": "55.0.5",
|
|
191
|
+
"lucide-react-native": "^1.11.0",
|
|
192
|
+
"lucide-react-native-v1-8": "npm:lucide-react-native@~1.8.0",
|
|
193
|
+
"metro": "^0.83.0",
|
|
194
|
+
"metro-cache": "^0.83.0",
|
|
195
|
+
"metro-config": "^0.83.0",
|
|
196
|
+
"metro-core": "^0.83.0",
|
|
197
|
+
"metro-resolver": "^0.83.0",
|
|
198
|
+
"oxlint": "^1.60.0",
|
|
199
|
+
"react-native": "0.83.2",
|
|
200
|
+
"semver": "^7.7.4",
|
|
201
|
+
"tsup": "^8.5.1",
|
|
202
|
+
"typescript": "~5.9.2",
|
|
203
|
+
"vitest": "^4.1.5"
|
|
204
|
+
},
|
|
205
|
+
"scripts": {
|
|
206
|
+
"build": "tsup",
|
|
207
|
+
"typecheck": "tsc --noEmit && tsc -p tsconfig.check.json --noEmit",
|
|
208
|
+
"test": "vitest run",
|
|
209
|
+
"test:patches": "node scripts/test-patches.mjs",
|
|
210
|
+
"patch:workspace": "node scripts/patch-workspace.mjs",
|
|
211
|
+
"release": "pnpm run test && pnpm run build && clean-publish",
|
|
212
|
+
"release:beta": "pnpm run test && pnpm run build && npm version prerelease --preid=beta && clean-publish --tag beta",
|
|
213
|
+
"release:patch": "pnpm run test && pnpm run build && npm version patch && clean-publish",
|
|
214
|
+
"release:minor": "pnpm run test && pnpm run build && npm version minor && clean-publish",
|
|
215
|
+
"release:major": "pnpm run test && pnpm run build && npm version major && clean-publish"
|
|
161
216
|
}
|
|
162
|
-
}
|
|
217
|
+
}
|