crx-monkey-next 0.0.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/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/api.d.ts +3 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/api.js +4 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/api.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/i18n.d.ts +17 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/i18n.js +38 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/i18n.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/main.d.ts +16 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/main.js +8 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/main.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/message.d.ts +30 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/message.js +75 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/message.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/runtime.d.ts +43 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/runtime.js +89 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/client/runtime.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/plugins/tsBundler.d.ts +28 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/plugins/tsBundler.js +151 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/plugins/tsBundler.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/typeDefs.d.ts +200 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/typeDefs.js +2 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/src/node/typeDefs.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/dist/client/tsconfig.client.tsbuildinfo +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/api.d.ts +3 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/api.js +4 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/api.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/i18n.d.ts +17 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/i18n.js +38 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/i18n.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/main.d.ts +17 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/main.js +9 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/main.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/message.d.ts +30 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/message.js +75 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/message.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/runtime.d.ts +32 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/runtime.js +58 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/client/runtime.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/node/typeDefs.d.ts +189 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/node/typeDefs.js +2 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/src/node/typeDefs.js.map +1 -0
- package/.rollup.cache/home/yakisova41/crx-monkey-next/packages/crx-monkey/tsconfig.client.tsbuildinfo +1 -0
- package/README.md +34 -0
- package/bin/crx-monkey +2 -0
- package/bun.lockb +0 -0
- package/dist/client/main.d.ts +187 -0
- package/dist/client/main.js +200 -0
- package/dist/client/tsconfig.client.tsbuildinfo +1 -0
- package/dist/node/exports.d.ts +213 -0
- package/dist/node/exports.js +650 -0
- package/dist/node/main.js +2759 -0
- package/jest.config.js +17 -0
- package/package.json +81 -0
- package/rollup.config.js +101 -0
- package/src/client/i18n.ts +42 -0
- package/src/client/main.ts +20 -0
- package/src/client/message.ts +118 -0
- package/src/client/runtime.ts +109 -0
- package/src/node/BundlerRegisterer.ts +311 -0
- package/src/node/ConfigLoader.ts +127 -0
- package/src/node/CrxmBundler.ts +213 -0
- package/src/node/Distributior.ts +295 -0
- package/src/node/Logger.ts +77 -0
- package/src/node/Watcher.ts +166 -0
- package/src/node/__tests__/config.test.ts +157 -0
- package/src/node/__tests__/manifest.test.ts +380 -0
- package/src/node/build.ts +64 -0
- package/src/node/dev.ts +146 -0
- package/src/node/development/CreateDevClient.ts +168 -0
- package/src/node/development/codes/extension.ts +187 -0
- package/src/node/development/codes/sw.ts +41 -0
- package/src/node/development/codes/userjs.ts +150 -0
- package/src/node/exports.ts +135 -0
- package/src/node/file.ts +45 -0
- package/src/node/inversify.config.ts +53 -0
- package/src/node/main.ts +34 -0
- package/src/node/manifest/ManifestFactory.ts +165 -0
- package/src/node/manifest/ManifestLoader.ts +71 -0
- package/src/node/manifest/ManifestParser.ts +191 -0
- package/src/node/manifest/i18n.ts +93 -0
- package/src/node/plugins/htmlBundler/HTMLTools.ts +332 -0
- package/src/node/plugins/htmlBundler/main.ts +140 -0
- package/src/node/plugins/sassBundler.ts +59 -0
- package/src/node/plugins/tsBundler.ts +197 -0
- package/src/node/server/FileServer.ts +97 -0
- package/src/node/server/SockServer.ts +143 -0
- package/src/node/typeDefs.ts +221 -0
- package/src/node/types.ts +24 -0
- package/src/node/userscript/CodeInjector.ts +164 -0
- package/src/node/userscript/UserscriptBundler.ts +138 -0
- package/src/node/userscript/UserscriptHeader.ts +76 -0
- package/src/node/userscript/UserscriptRegisterer.ts +204 -0
- package/src/node/utils.ts +25 -0
- package/tsconfig.client.json +20 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/client/api.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the localized string for the specified message. If the message is missing, this method returns an empty string (''). If the format of the getMessage() call is wrong — for example, messageName is not a string or the substitutions array has more than 9 elements — this method returns undefined.
|
|
3
|
+
* @param messageName
|
|
4
|
+
* @param substitutions
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
declare function getMessage(messageName: string, substitutions?: string | string[] | undefined): string | undefined;
|
|
8
|
+
declare function detectLanguage(text: string): Promise<chrome.i18n.LanguageDetectionResult | undefined>;
|
|
9
|
+
declare function getAcceptLanguages(): Promise<string[] | undefined>;
|
|
10
|
+
declare function getUILanguage(): string | undefined;
|
|
11
|
+
export declare const i18n: {
|
|
12
|
+
getMessage: typeof getMessage;
|
|
13
|
+
detectLanguage: typeof detectLanguage;
|
|
14
|
+
getAcceptLanguages: typeof getAcceptLanguages;
|
|
15
|
+
getUILanguage: typeof getUILanguage;
|
|
16
|
+
};
|
|
17
|
+
export default i18n;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { runtime } from './runtime';
|
|
2
|
+
/**
|
|
3
|
+
* Gets the localized string for the specified message. If the message is missing, this method returns an empty string (''). If the format of the getMessage() call is wrong — for example, messageName is not a string or the substitutions array has more than 9 elements — this method returns undefined.
|
|
4
|
+
* @param messageName
|
|
5
|
+
* @param substitutions
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
function getMessage(messageName, substitutions) {
|
|
9
|
+
if (runtime.getRunningRuntime() === 'Extension') {
|
|
10
|
+
if (runtime.getRunningWorld() === 'ISOLATED') {
|
|
11
|
+
return chrome.i18n.getMessage(messageName, substitutions);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function detectLanguage(text) {
|
|
16
|
+
if (runtime.getRunningRuntime() === 'Extension') {
|
|
17
|
+
if (runtime.getRunningWorld() === 'ISOLATED') {
|
|
18
|
+
return chrome.i18n.detectLanguage(text);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function getAcceptLanguages() {
|
|
23
|
+
if (runtime.getRunningRuntime() === 'Extension') {
|
|
24
|
+
if (runtime.getRunningWorld() === 'ISOLATED') {
|
|
25
|
+
return chrome.i18n.getAcceptLanguages();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function getUILanguage() {
|
|
30
|
+
if (runtime.getRunningRuntime() === 'Extension') {
|
|
31
|
+
if (runtime.getRunningWorld() === 'ISOLATED') {
|
|
32
|
+
return chrome.i18n.getUILanguage();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export const i18n = { getMessage, detectLanguage, getAcceptLanguages, getUILanguage };
|
|
37
|
+
export default i18n;
|
|
38
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../src/client/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;GAKG;AACH,SAAS,UAAU,CAAC,WAAmB,EAAE,aAA6C;IACpF,IAAI,OAAO,CAAC,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,IAAI,OAAO,CAAC,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,IAAI,OAAO,CAAC,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AACtF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The main endpoint for client of crx-monkey.
|
|
3
|
+
* Modules and Types that are exported from this file are used by userside.
|
|
4
|
+
*/
|
|
5
|
+
import { IsolateConnectorEvent } from './message';
|
|
6
|
+
export * from './message';
|
|
7
|
+
export * from './i18n';
|
|
8
|
+
export * from './runtime';
|
|
9
|
+
declare global {
|
|
10
|
+
interface Window {
|
|
11
|
+
__CRX_CONTENT_BUILD_ID: string;
|
|
12
|
+
}
|
|
13
|
+
interface WindowEventMap {
|
|
14
|
+
'crx-isolated-connector-result': IsolateConnectorEvent<never>;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/client/main.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare function waitResult<T = string>(type: string, actionId: string, callback: (data: T) => void): {
|
|
2
|
+
remove: () => void;
|
|
3
|
+
};
|
|
4
|
+
export declare function waitResultOnce<T = string>(type: string, actionId: string): Promise<T>;
|
|
5
|
+
export type IsolateConnectorEvent<T> = CustomEvent<{
|
|
6
|
+
type: string;
|
|
7
|
+
actionId: string;
|
|
8
|
+
data: T;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Bypass `chrome.runtime.sendMessage`.
|
|
12
|
+
*
|
|
13
|
+
* You can send message to service worker.
|
|
14
|
+
* @param callback
|
|
15
|
+
*/
|
|
16
|
+
declare function sendMessage<T = never, U = never>(message: T, options?: object, callback?: (response: U) => void): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Bypass `chrome.runtime.onMessage`.
|
|
19
|
+
*
|
|
20
|
+
* You can get a content of message receved the bypassing isolated content_script.
|
|
21
|
+
* @param callback
|
|
22
|
+
*/
|
|
23
|
+
declare function addListener<T = never>(callback: (request: T, sender: chrome.runtime.MessageSender) => void): {
|
|
24
|
+
remove: () => void;
|
|
25
|
+
};
|
|
26
|
+
export declare const message: {
|
|
27
|
+
sendMessage: typeof sendMessage;
|
|
28
|
+
addListener: typeof addListener;
|
|
29
|
+
};
|
|
30
|
+
export default message;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export function waitResult(type, actionId, callback) {
|
|
2
|
+
const onResult = (e) => {
|
|
3
|
+
if (e.detail.type === type && e.detail.actionId === actionId) {
|
|
4
|
+
callback(e.detail.data);
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
window.addEventListener('crx-isolated-connector-result', onResult);
|
|
8
|
+
return {
|
|
9
|
+
remove: () => {
|
|
10
|
+
window.removeEventListener('crx-isolated-connector-result', onResult);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export async function waitResultOnce(type, actionId) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const onResult = (e) => {
|
|
17
|
+
if (e.detail.type === type && e.detail.actionId === actionId) {
|
|
18
|
+
window.removeEventListener('crx-isolated-connector-result', onResult);
|
|
19
|
+
resolve(e.detail.data);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
window.addEventListener('crx-isolated-connector-result', onResult);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Bypass `chrome.runtime.sendMessage`.
|
|
27
|
+
*
|
|
28
|
+
* You can send message to service worker.
|
|
29
|
+
* @param callback
|
|
30
|
+
*/
|
|
31
|
+
async function sendMessage(message, options, callback) {
|
|
32
|
+
const actionId = crypto.randomUUID();
|
|
33
|
+
window.postMessage({
|
|
34
|
+
type: 'send-message',
|
|
35
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
36
|
+
detail: { message, options },
|
|
37
|
+
actionId,
|
|
38
|
+
}, '*');
|
|
39
|
+
const data = await waitResultOnce('send-message', actionId);
|
|
40
|
+
if (callback !== undefined) {
|
|
41
|
+
callback(data.response);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Bypass `chrome.runtime.onMessage`.
|
|
46
|
+
*
|
|
47
|
+
* You can get a content of message receved the bypassing isolated content_script.
|
|
48
|
+
* @param callback
|
|
49
|
+
*/
|
|
50
|
+
function addListener(callback) {
|
|
51
|
+
const actionId = crypto.randomUUID();
|
|
52
|
+
window.postMessage({
|
|
53
|
+
type: 'on-message',
|
|
54
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
55
|
+
detail: null,
|
|
56
|
+
actionId,
|
|
57
|
+
}, '*');
|
|
58
|
+
const waiter = waitResult('on-message', actionId, (data) => {
|
|
59
|
+
callback(data.request, data.sender);
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
remove: () => {
|
|
63
|
+
waiter.remove();
|
|
64
|
+
window.postMessage({
|
|
65
|
+
type: 'remove-on-message',
|
|
66
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
67
|
+
detail: null,
|
|
68
|
+
actionId,
|
|
69
|
+
}, '*');
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export const message = { sendMessage, addListener };
|
|
74
|
+
export default message;
|
|
75
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../src/client/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare function getRunningRuntime(): "Userscript" | "Extension";
|
|
2
|
+
export declare function getRunningWorld(): "ISOLATED" | "MAIN";
|
|
3
|
+
export declare function getCrxmConfig(): Promise<{
|
|
4
|
+
output: {
|
|
5
|
+
chrome?: string;
|
|
6
|
+
userjs?: string;
|
|
7
|
+
};
|
|
8
|
+
manifest: string;
|
|
9
|
+
server: {
|
|
10
|
+
port?: number;
|
|
11
|
+
host?: string;
|
|
12
|
+
websocket?: number;
|
|
13
|
+
disable_sock_in_userjs?: boolean;
|
|
14
|
+
};
|
|
15
|
+
header: import("../node/typeDefs").UserScriptHeader;
|
|
16
|
+
build: Record<string, import("../node/typeDefs").CrxmBundlerPlugin>;
|
|
17
|
+
watch: Record<string, import("../node/typeDefs").CrxmBundlerPluginWatch>;
|
|
18
|
+
logLevel: "info" | "error" | "debug";
|
|
19
|
+
public: string;
|
|
20
|
+
define: {
|
|
21
|
+
sw?: Record<string, string>;
|
|
22
|
+
contentscripts?: Record<string, string>;
|
|
23
|
+
popup?: Record<string, string>;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Get `chrome.runtime.id`.
|
|
28
|
+
*
|
|
29
|
+
* You can get the extension id everyworld if running script by chrome extension.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getExtensionId(): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* You can check browser's console logs in your terminal at development mode.
|
|
34
|
+
* [ATTENSION] It's unstable future.
|
|
35
|
+
*/
|
|
36
|
+
export declare function attachConsole(): void;
|
|
37
|
+
export declare const runtime: {
|
|
38
|
+
getRunningRuntime: typeof getRunningRuntime;
|
|
39
|
+
getRunningWorld: typeof getRunningWorld;
|
|
40
|
+
getExtensionId: typeof getExtensionId;
|
|
41
|
+
getCrxmConfig: typeof getCrxmConfig;
|
|
42
|
+
attachConsole: typeof attachConsole;
|
|
43
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { waitResultOnce } from './message';
|
|
2
|
+
export function getRunningRuntime() {
|
|
3
|
+
if (typeof window.__CRX_CONTENT_BUILD_ID === 'undefined') {
|
|
4
|
+
return 'Userscript';
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
return 'Extension';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function getRunningWorld() {
|
|
11
|
+
if (getRunningRuntime() === 'Userscript') {
|
|
12
|
+
throw new Error('Cannot be executed by userscripts');
|
|
13
|
+
}
|
|
14
|
+
if (typeof chrome.runtime.id === 'undefined') {
|
|
15
|
+
return 'MAIN';
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
return 'ISOLATED';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function getCrxmConfig() {
|
|
22
|
+
if (getRunningRuntime() === 'Userscript') {
|
|
23
|
+
throw new Error('Cannot be executed by userscripts');
|
|
24
|
+
}
|
|
25
|
+
const actionId = crypto.randomUUID();
|
|
26
|
+
window.postMessage({
|
|
27
|
+
type: 'get-conf',
|
|
28
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
29
|
+
detail: null,
|
|
30
|
+
actionId,
|
|
31
|
+
}, '*');
|
|
32
|
+
return JSON.parse(await waitResultOnce('get-conf', actionId));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get `chrome.runtime.id`.
|
|
36
|
+
*
|
|
37
|
+
* You can get the extension id everyworld if running script by chrome extension.
|
|
38
|
+
*/
|
|
39
|
+
export async function getExtensionId() {
|
|
40
|
+
if (getRunningRuntime() === 'Userscript') {
|
|
41
|
+
throw new Error('Cannot be executed by userscripts');
|
|
42
|
+
}
|
|
43
|
+
if (getRunningWorld() === 'ISOLATED') {
|
|
44
|
+
return chrome.runtime.id;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const actionId = crypto.randomUUID();
|
|
48
|
+
window.postMessage({
|
|
49
|
+
type: 'get-id',
|
|
50
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
51
|
+
detail: null,
|
|
52
|
+
actionId,
|
|
53
|
+
}, '*');
|
|
54
|
+
return await waitResultOnce('get-id', actionId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* You can check browser's console logs in your terminal at development mode.
|
|
59
|
+
* [ATTENSION] It's unstable future.
|
|
60
|
+
*/
|
|
61
|
+
export function attachConsole() {
|
|
62
|
+
const replaceOriginal = (original, name) => {
|
|
63
|
+
return (...args) => {
|
|
64
|
+
original(...args);
|
|
65
|
+
const actionId = crypto.randomUUID();
|
|
66
|
+
window.postMessage({
|
|
67
|
+
type: name,
|
|
68
|
+
crxContentBuildId: window.__CRX_CONTENT_BUILD_ID,
|
|
69
|
+
detail: args.join(' '),
|
|
70
|
+
actionId,
|
|
71
|
+
}, '*');
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
const l = console.log;
|
|
75
|
+
const w = console.warn;
|
|
76
|
+
const e = console.error;
|
|
77
|
+
window.console.log = replaceOriginal(l, 'console-log');
|
|
78
|
+
window.console.warn = replaceOriginal(w, 'console-warn');
|
|
79
|
+
window.console.error = replaceOriginal(e, 'console-error');
|
|
80
|
+
console.log("[crxm] browser's console attached to your console.");
|
|
81
|
+
}
|
|
82
|
+
export const runtime = {
|
|
83
|
+
getRunningRuntime,
|
|
84
|
+
getRunningWorld,
|
|
85
|
+
getExtensionId,
|
|
86
|
+
getCrxmConfig,
|
|
87
|
+
attachConsole,
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/client/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BuildOptions } from 'esbuild';
|
|
2
|
+
import { CrxmBundlerPlugin, CrxmBundlerPluginWatch } from '../typeDefs';
|
|
3
|
+
export interface TsBundlerOptions {
|
|
4
|
+
/**
|
|
5
|
+
* The options esbuild.
|
|
6
|
+
*/
|
|
7
|
+
esbuild?: BuildOptions;
|
|
8
|
+
/**
|
|
9
|
+
* Use checking types.
|
|
10
|
+
*/
|
|
11
|
+
typeCheck?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* The path tsconfig.json
|
|
14
|
+
*/
|
|
15
|
+
tsconfig?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Bundle typescript by esbuild
|
|
19
|
+
* @param options
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
export declare function tsBundler(options?: TsBundlerOptions): CrxmBundlerPlugin;
|
|
23
|
+
/**
|
|
24
|
+
* Bundle typescript by esbuild
|
|
25
|
+
* @param options
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
export declare function tsBundlerWatch(options?: TsBundlerOptions): CrxmBundlerPluginWatch;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import esbuild from 'esbuild';
|
|
2
|
+
import typescript, { parseJsonConfigFileContent, readConfigFile, sys, } from 'typescript';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
function esbuildTypecheckPlugin(options = { exit: false }) {
|
|
5
|
+
const tsPlugin = {
|
|
6
|
+
name: 'esbuild-typecheck-plugin',
|
|
7
|
+
setup: (build) => {
|
|
8
|
+
build.onLoad({
|
|
9
|
+
filter: new RegExp(/^.*.(ts|tsx)$/),
|
|
10
|
+
}, (args) => {
|
|
11
|
+
const { path } = args;
|
|
12
|
+
const compilerOptions = options.compilerOptions !== undefined
|
|
13
|
+
? options.compilerOptions
|
|
14
|
+
: { strict: true, noEmit: true };
|
|
15
|
+
const program = typescript.createProgram([path], compilerOptions);
|
|
16
|
+
const diagnostics = typescript.getPreEmitDiagnostics(program);
|
|
17
|
+
try {
|
|
18
|
+
diagnostics.forEach((d) => {
|
|
19
|
+
const message = typescript.flattenDiagnosticMessageText(d.messageText, '\n');
|
|
20
|
+
if (d.file && d.start !== undefined) {
|
|
21
|
+
const { line, character } = d.file.getLineAndCharacterOfPosition(d.start);
|
|
22
|
+
console.error(`\n ${chalk.bgBlueBright(' Typescript ')} ${chalk.bold(message)}\n ${chalk.gray(`${d.file.fileName} (${line + 1},${character + 1})`)}\n`);
|
|
23
|
+
if (options.exit) {
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error(message);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
return tsPlugin;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Bundle typescript by esbuild
|
|
43
|
+
* @param options
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
export function tsBundler(options = { esbuild: {} }) {
|
|
47
|
+
const tsPluginOptions = {
|
|
48
|
+
compilerOptions: {},
|
|
49
|
+
exit: true,
|
|
50
|
+
};
|
|
51
|
+
if (options.tsconfig !== undefined) {
|
|
52
|
+
const tsconfig = readConfigFile(options.tsconfig, sys.readFile);
|
|
53
|
+
const parsedOptions = parseJsonConfigFileContent(tsconfig.config, sys, './');
|
|
54
|
+
if (tsconfig.config !== undefined) {
|
|
55
|
+
tsPluginOptions.compilerOptions = parsedOptions.options;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return async (filePath) => {
|
|
59
|
+
return await esbuild
|
|
60
|
+
.build({
|
|
61
|
+
...(options.esbuild !== undefined ? options.esbuild : {}),
|
|
62
|
+
entryPoints: [filePath],
|
|
63
|
+
treeShaking: true,
|
|
64
|
+
bundle: true,
|
|
65
|
+
metafile: true,
|
|
66
|
+
write: false,
|
|
67
|
+
format: 'iife',
|
|
68
|
+
target: 'esnext',
|
|
69
|
+
define: {
|
|
70
|
+
'process.env.NODE_ENV': '"production"', // 必要に応じて
|
|
71
|
+
'process.browser': 'true', // 💡 このフラグを強制的にtrueにする
|
|
72
|
+
global: 'window', // 💡 globalもwindowに置き換える
|
|
73
|
+
},
|
|
74
|
+
platform: 'browser',
|
|
75
|
+
logLevel: 'error',
|
|
76
|
+
tsconfig: options.tsconfig,
|
|
77
|
+
external: ['esbuild', 'esbuild/*', 'fs-extra', 'fs-extra/*', 'fs', 'path', 'crypto'],
|
|
78
|
+
plugins: [
|
|
79
|
+
...(options.esbuild?.plugins !== undefined ? options.esbuild.plugins : []),
|
|
80
|
+
...(options.typeCheck ? [esbuildTypecheckPlugin(tsPluginOptions)] : []),
|
|
81
|
+
],
|
|
82
|
+
})
|
|
83
|
+
.then((result) => {
|
|
84
|
+
const outputFile = result.outputFiles[0];
|
|
85
|
+
return outputFile.contents;
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Bundle typescript by esbuild
|
|
91
|
+
* @param options
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
export function tsBundlerWatch(options = { esbuild: {} }) {
|
|
95
|
+
return {
|
|
96
|
+
name: 'TS Bundler Watch',
|
|
97
|
+
plugin: async (filePath, sendResult) => {
|
|
98
|
+
const watchPlugin = {
|
|
99
|
+
name: 'send-esbuild-build-result-to-crxm-plugin',
|
|
100
|
+
setup: (build) => {
|
|
101
|
+
build.onEnd((result) => {
|
|
102
|
+
if (result.outputFiles !== undefined) {
|
|
103
|
+
const outputFile = result.outputFiles[0].contents;
|
|
104
|
+
sendResult(outputFile);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
const tsPluginOptions = {
|
|
110
|
+
compilerOptions: {
|
|
111
|
+
target: 99,
|
|
112
|
+
},
|
|
113
|
+
exit: false,
|
|
114
|
+
};
|
|
115
|
+
if (options.tsconfig !== undefined) {
|
|
116
|
+
const tsconfig = readConfigFile(options.tsconfig, sys.readFile);
|
|
117
|
+
const parsedOptions = parseJsonConfigFileContent(tsconfig.config, sys, './');
|
|
118
|
+
if (tsconfig.config !== undefined) {
|
|
119
|
+
tsPluginOptions.compilerOptions = parsedOptions.options;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
console.log(filePath);
|
|
123
|
+
const ctx = await esbuild.context({
|
|
124
|
+
...(options.esbuild !== undefined ? options.esbuild : {}),
|
|
125
|
+
entryPoints: [filePath],
|
|
126
|
+
format: 'iife',
|
|
127
|
+
treeShaking: true,
|
|
128
|
+
bundle: true,
|
|
129
|
+
metafile: true,
|
|
130
|
+
write: false,
|
|
131
|
+
target: 'esnext',
|
|
132
|
+
platform: 'browser',
|
|
133
|
+
logLevel: 'error',
|
|
134
|
+
tsconfig: options.tsconfig,
|
|
135
|
+
plugins: [
|
|
136
|
+
...(options.esbuild?.plugins !== undefined ? options.esbuild.plugins : []),
|
|
137
|
+
...(options.typeCheck ? [esbuildTypecheckPlugin(tsPluginOptions)] : []),
|
|
138
|
+
watchPlugin,
|
|
139
|
+
],
|
|
140
|
+
});
|
|
141
|
+
await ctx.watch();
|
|
142
|
+
return {
|
|
143
|
+
stop: async () => {
|
|
144
|
+
await ctx.dispose();
|
|
145
|
+
// console.log(`${filePath} watching stoped`);
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=tsBundler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsBundler.js","sourceRoot":"","sources":["../../../../../src/node/plugins/tsBundler.ts"],"names":[],"mappings":"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"}
|