mediafuse 0.2.1 → 0.2.3
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/dist/cli/index.js +40 -19
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/remote.d.ts +24 -0
- package/dist/cli/remote.d.ts.map +1 -0
- package/dist/cli/remote.js +199 -0
- package/dist/cli/remote.js.map +1 -0
- package/dist/cli/resolve.d.ts +3 -1
- package/dist/cli/resolve.d.ts.map +1 -1
- package/dist/cli/resolve.js +68 -48
- package/dist/cli/resolve.js.map +1 -1
- package/dist/cli/server.d.ts +4 -1
- package/dist/cli/server.d.ts.map +1 -1
- package/dist/cli/server.js +106 -38
- package/dist/cli/server.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +3 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +46 -0
- package/dist/loader.js.map +1 -0
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -2,24 +2,38 @@
|
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
3
|
import { readFileSync, existsSync } from "node:fs";
|
|
4
4
|
import { resolve, dirname, join } from "node:path";
|
|
5
|
-
import { resolveManifest } from "./resolve.js";
|
|
5
|
+
import { resolveManifest, findManifestEntry } from "./resolve.js";
|
|
6
6
|
import { startServer } from "./server.js";
|
|
7
|
-
|
|
7
|
+
import { resolveRef, setCacheDir } from "./remote.js";
|
|
8
|
+
const USAGE = `Usage: mediafuse [-p path ...] [--port N] [source]
|
|
8
9
|
|
|
9
10
|
Serve a MediaFuse manifest and its plugins locally.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Source can be:
|
|
13
|
+
manifest.json Local manifest file
|
|
14
|
+
./path/to/dir Local directory containing manifest.json
|
|
15
|
+
owner/repo GitHub repo (shorthand)
|
|
16
|
+
github:owner/repo GitHub repo
|
|
17
|
+
codeberg:owner/repo Codeberg repo
|
|
18
|
+
gitlab:owner/repo GitLab repo
|
|
19
|
+
https://github.com/o/r Full URL to any Git repo
|
|
20
|
+
|
|
21
|
+
If no source is given, checks mediafuse.manifest in package.json,
|
|
12
22
|
then falls back to manifest.json in the current directory.
|
|
13
23
|
|
|
14
24
|
Options:
|
|
15
25
|
-p, --plugin path Plugin search path (repeatable)
|
|
16
|
-
Can be a directory or
|
|
26
|
+
Can be a directory, file, or remote repo
|
|
17
27
|
--port N Port to listen on (default: 8000)
|
|
28
|
+
--data D Directory for cloned repos and fetched files (default: system temp)
|
|
29
|
+
--cache Enable browser caching (sends Cache-Control: public, max-age=300)
|
|
18
30
|
-h, --help Show this help`;
|
|
19
31
|
const { values, positionals } = parseArgs({
|
|
20
32
|
options: {
|
|
21
33
|
plugin: { type: "string", short: "p", multiple: true, default: [] },
|
|
22
34
|
port: { type: "string", default: "8000" },
|
|
35
|
+
"data": { type: "string" },
|
|
36
|
+
cache: { type: "boolean", default: false },
|
|
23
37
|
help: { type: "boolean", short: "h", default: false },
|
|
24
38
|
},
|
|
25
39
|
allowPositionals: true,
|
|
@@ -32,21 +46,25 @@ if (positionals.length > 1) {
|
|
|
32
46
|
console.error(USAGE);
|
|
33
47
|
process.exit(1);
|
|
34
48
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
async function main() {
|
|
50
|
+
if (values["data"]) {
|
|
51
|
+
setCacheDir(values["data"]);
|
|
52
|
+
}
|
|
53
|
+
const manifestPath = positionals.length === 1
|
|
54
|
+
? await resolveRef(positionals[0], findManifestEntry)
|
|
55
|
+
: findManifestLocal();
|
|
56
|
+
if (!existsSync(manifestPath)) {
|
|
57
|
+
console.error(`Manifest not found: ${manifestPath}`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const manifestDir = dirname(manifestPath);
|
|
61
|
+
const manifestData = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
62
|
+
const port = parseInt(values.port, 10);
|
|
63
|
+
const searchPaths = await Promise.all(values.plugin.map(async (p) => resolve(await resolveRef(p))));
|
|
64
|
+
const resolved = await resolveManifest(manifestData, manifestDir, searchPaths);
|
|
65
|
+
startServer(resolved, port, { cache: values.cache });
|
|
41
66
|
}
|
|
42
|
-
|
|
43
|
-
const manifestData = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
44
|
-
const port = parseInt(values.port, 10);
|
|
45
|
-
const searchPaths = values.plugin.map((p) => resolve(p));
|
|
46
|
-
const resolved = resolveManifest(manifestData, manifestDir, searchPaths, port);
|
|
47
|
-
startServer(resolved, port);
|
|
48
|
-
function findManifest() {
|
|
49
|
-
// Check package.json for mediafuse.manifest
|
|
67
|
+
function findManifestLocal() {
|
|
50
68
|
const pkgPath = join(process.cwd(), "package.json");
|
|
51
69
|
if (existsSync(pkgPath)) {
|
|
52
70
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
@@ -54,11 +72,14 @@ function findManifest() {
|
|
|
54
72
|
if (manifestRef)
|
|
55
73
|
return resolve(process.cwd(), manifestRef);
|
|
56
74
|
}
|
|
57
|
-
// Fall back to manifest.json in cwd
|
|
58
75
|
const defaultPath = join(process.cwd(), "manifest.json");
|
|
59
76
|
if (existsSync(defaultPath))
|
|
60
77
|
return defaultPath;
|
|
61
78
|
console.error("No manifest found. Provide a path, set mediafuse.manifest in package.json, or add a manifest.json");
|
|
62
79
|
process.exit(1);
|
|
63
80
|
}
|
|
81
|
+
main().catch((err) => {
|
|
82
|
+
console.error(err instanceof Error ? err.message : err);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
64
85
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare function setCacheDir(dir: string): void;
|
|
2
|
+
export interface RemoteRef {
|
|
3
|
+
host: string;
|
|
4
|
+
owner: string;
|
|
5
|
+
repo: string;
|
|
6
|
+
url: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseRemoteRef(input: string): RemoteRef | null;
|
|
9
|
+
export declare function materializeRemote(ref: RemoteRef): Promise<string>;
|
|
10
|
+
export type EntryFinder = (dir: string) => string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve any input reference to a local file path.
|
|
13
|
+
*
|
|
14
|
+
* Handles: remote refs (owner/repo, github:owner/repo, full git URLs),
|
|
15
|
+
* plain URLs (CDN links), and local paths.
|
|
16
|
+
*
|
|
17
|
+
* When findEntry is provided and the result is a directory,
|
|
18
|
+
* it's called to locate the relevant file within it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveRef(input: string, findEntry?: EntryFinder): Promise<string>;
|
|
21
|
+
export declare function resolveSource(input: string): Promise<string>;
|
|
22
|
+
export declare function findManifestInDir(dir: string): string | null;
|
|
23
|
+
export declare function fetchRemoteFile(url: string): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/cli/remote.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE7C;AAgBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAqB9D;AA0DD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCvE;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAEzD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAElE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D;AAQD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BlE"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { execFile as execFileCb } from "node:child_process";
|
|
2
|
+
import { mkdirSync, existsSync, statSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join, basename } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
const execFile = promisify(execFileCb);
|
|
7
|
+
let cacheDir = tmpdir();
|
|
8
|
+
export function setCacheDir(dir) {
|
|
9
|
+
cacheDir = dir;
|
|
10
|
+
}
|
|
11
|
+
const HOSTS = {
|
|
12
|
+
"github.com": "https://github.com",
|
|
13
|
+
"codeberg.org": "https://codeberg.org",
|
|
14
|
+
"gitlab.com": "https://gitlab.com",
|
|
15
|
+
"bitbucket.org": "https://bitbucket.org",
|
|
16
|
+
};
|
|
17
|
+
const PREFIXES = {
|
|
18
|
+
github: "github.com",
|
|
19
|
+
codeberg: "codeberg.org",
|
|
20
|
+
gitlab: "gitlab.com",
|
|
21
|
+
bitbucket: "bitbucket.org",
|
|
22
|
+
};
|
|
23
|
+
export function parseRemoteRef(input) {
|
|
24
|
+
if (input.startsWith("https://")) {
|
|
25
|
+
return parseUrl(input);
|
|
26
|
+
}
|
|
27
|
+
const colonIdx = input.indexOf(":");
|
|
28
|
+
if (colonIdx > 0 && !input.includes("/", 0) || colonIdx > 0 && colonIdx < input.indexOf("/")) {
|
|
29
|
+
const prefix = input.slice(0, colonIdx);
|
|
30
|
+
const host = PREFIXES[prefix];
|
|
31
|
+
if (host) {
|
|
32
|
+
return parseOwnerRepo(host, input.slice(colonIdx + 1));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (isLocalPath(input))
|
|
36
|
+
return null;
|
|
37
|
+
if (isBareShorthand(input)) {
|
|
38
|
+
return parseOwnerRepo("github.com", input);
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function parseUrl(url) {
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = new URL(url);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const segments = parsed.pathname.replace(/^\//, "").replace(/\.git$/, "").split("/");
|
|
51
|
+
if (segments.length < 2)
|
|
52
|
+
return null;
|
|
53
|
+
const host = parsed.hostname;
|
|
54
|
+
const base = HOSTS[host] ?? `https://${host}`;
|
|
55
|
+
// Only treat as a git repo if the path looks like owner/repo (2 segments)
|
|
56
|
+
// not a deep file path like /gh/user/repo@v/plugins/file.js
|
|
57
|
+
if (segments.length !== 2)
|
|
58
|
+
return null;
|
|
59
|
+
const [owner, repo] = segments;
|
|
60
|
+
return { host, owner, repo, url: `${base}/${owner}/${repo}.git` };
|
|
61
|
+
}
|
|
62
|
+
function parseOwnerRepo(host, ref) {
|
|
63
|
+
const cleaned = ref.replace(/\.git$/, "");
|
|
64
|
+
const parts = cleaned.split("/");
|
|
65
|
+
if (parts.length < 2)
|
|
66
|
+
return null;
|
|
67
|
+
const [owner, repo] = parts;
|
|
68
|
+
if (!owner || !repo)
|
|
69
|
+
return null;
|
|
70
|
+
const base = HOSTS[host] ?? `https://${host}`;
|
|
71
|
+
return { host, owner, repo, url: `${base}/${owner}/${repo}.git` };
|
|
72
|
+
}
|
|
73
|
+
function isLocalPath(input) {
|
|
74
|
+
if (input.startsWith("./") || input.startsWith("../") || input.startsWith("/"))
|
|
75
|
+
return true;
|
|
76
|
+
if (/^[a-zA-Z]:[/\\]/.test(input))
|
|
77
|
+
return true;
|
|
78
|
+
if (input.includes("\\"))
|
|
79
|
+
return true;
|
|
80
|
+
if (!input.includes("/"))
|
|
81
|
+
return true;
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
function isBareShorthand(input) {
|
|
85
|
+
const slashes = input.split("/").length - 1;
|
|
86
|
+
if (slashes !== 1)
|
|
87
|
+
return false;
|
|
88
|
+
if (input.includes("..") || input.includes("."))
|
|
89
|
+
return false;
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
const REFRESH_INTERVAL = 30000;
|
|
93
|
+
const lastChecked = new Map();
|
|
94
|
+
function repoDir(ref) {
|
|
95
|
+
return join(cacheDir, "repos", ref.host, ref.owner, ref.repo);
|
|
96
|
+
}
|
|
97
|
+
export async function materializeRemote(ref) {
|
|
98
|
+
const dir = repoDir(ref);
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
const last = lastChecked.get(ref.url);
|
|
101
|
+
if (last && now - last < REFRESH_INTERVAL) {
|
|
102
|
+
return dir;
|
|
103
|
+
}
|
|
104
|
+
const gitEnv = { ...process.env, GIT_TERMINAL_PROMPT: "0", GIT_ASKPASS: "" };
|
|
105
|
+
if (existsSync(join(dir, ".git"))) {
|
|
106
|
+
lastChecked.set(ref.url, now);
|
|
107
|
+
try {
|
|
108
|
+
await execFile("git", ["pull", "--ff-only"], {
|
|
109
|
+
cwd: dir,
|
|
110
|
+
env: gitEnv,
|
|
111
|
+
timeout: 30000,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// pull failed (offline, force-pushed, etc.) — use what we have
|
|
116
|
+
}
|
|
117
|
+
return dir;
|
|
118
|
+
}
|
|
119
|
+
mkdirSync(dir, { recursive: true });
|
|
120
|
+
try {
|
|
121
|
+
await execFile("git", ["clone", "--depth", "1", ref.url, dir], {
|
|
122
|
+
env: gitEnv,
|
|
123
|
+
timeout: 30000,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const msg = err instanceof Error ? err.stderr || err.message : String(err);
|
|
128
|
+
throw new Error(`Failed to clone ${ref.url}: ${msg}`);
|
|
129
|
+
}
|
|
130
|
+
lastChecked.set(ref.url, now);
|
|
131
|
+
return dir;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Resolve any input reference to a local file path.
|
|
135
|
+
*
|
|
136
|
+
* Handles: remote refs (owner/repo, github:owner/repo, full git URLs),
|
|
137
|
+
* plain URLs (CDN links), and local paths.
|
|
138
|
+
*
|
|
139
|
+
* When findEntry is provided and the result is a directory,
|
|
140
|
+
* it's called to locate the relevant file within it.
|
|
141
|
+
*/
|
|
142
|
+
export async function resolveRef(input, findEntry) {
|
|
143
|
+
const ref = parseRemoteRef(input);
|
|
144
|
+
if (ref) {
|
|
145
|
+
const dir = await materializeRemote(ref);
|
|
146
|
+
return findEntry ? requireEntry(findEntry, dir, ref.url) : dir;
|
|
147
|
+
}
|
|
148
|
+
if (input.startsWith("https://") || input.startsWith("http://")) {
|
|
149
|
+
return fetchRemoteFile(input);
|
|
150
|
+
}
|
|
151
|
+
if (findEntry && existsSync(input) && statSync(input).isDirectory()) {
|
|
152
|
+
return requireEntry(findEntry, input, input);
|
|
153
|
+
}
|
|
154
|
+
return input;
|
|
155
|
+
}
|
|
156
|
+
function requireEntry(findEntry, dir, source) {
|
|
157
|
+
const entry = findEntry(dir);
|
|
158
|
+
if (!entry)
|
|
159
|
+
throw new Error(`No entry found in ${source}`);
|
|
160
|
+
return entry;
|
|
161
|
+
}
|
|
162
|
+
// Back-compat aliases — these are thin wrappers around resolveRef
|
|
163
|
+
export async function resolveSource(input) {
|
|
164
|
+
return resolveRef(input);
|
|
165
|
+
}
|
|
166
|
+
export function findManifestInDir(dir) {
|
|
167
|
+
const manifestJson = join(dir, "manifest.json");
|
|
168
|
+
if (existsSync(manifestJson))
|
|
169
|
+
return manifestJson;
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
function fetchDir(url) {
|
|
173
|
+
const parsed = new URL(url);
|
|
174
|
+
const pathPart = parsed.pathname.replace(/^\//, "").replace(/\//g, "_");
|
|
175
|
+
return join(cacheDir, "fetch", parsed.hostname, pathPart);
|
|
176
|
+
}
|
|
177
|
+
export async function fetchRemoteFile(url) {
|
|
178
|
+
const dir = fetchDir(url);
|
|
179
|
+
const filename = basename(new URL(url).pathname) || "index.js";
|
|
180
|
+
const filePath = join(dir, filename);
|
|
181
|
+
const now = Date.now();
|
|
182
|
+
const last = lastChecked.get(url);
|
|
183
|
+
if (last && now - last < REFRESH_INTERVAL && existsSync(filePath)) {
|
|
184
|
+
return filePath;
|
|
185
|
+
}
|
|
186
|
+
mkdirSync(dir, { recursive: true });
|
|
187
|
+
const response = await fetch(url);
|
|
188
|
+
if (!response.ok) {
|
|
189
|
+
if (existsSync(filePath)) {
|
|
190
|
+
lastChecked.set(url, now);
|
|
191
|
+
return filePath;
|
|
192
|
+
}
|
|
193
|
+
throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
|
|
194
|
+
}
|
|
195
|
+
writeFileSync(filePath, await response.text());
|
|
196
|
+
lastChecked.set(url, now);
|
|
197
|
+
return filePath;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/cli/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAe,aAAa,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAEvC,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,QAAQ,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,KAAK,GAA2B;IACpC,YAAY,EAAE,oBAAoB;IAClC,cAAc,EAAE,sBAAsB;IACtC,YAAY,EAAE,oBAAoB;IAClC,eAAe,EAAE,uBAAuB;CACzC,CAAC;AAEF,MAAM,QAAQ,GAA2B;IACvC,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,eAAe;CAC3B,CAAC;AASF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,EAAE,CAAC;IAE9C,0EAA0E;IAC1E,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,GAAW;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5F,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,SAAS,OAAO,CAAC,GAAc;IAC7B,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAc;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAE7E,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QAClC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;gBAC3C,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,MAAM;gBACX,OAAO,EAAE,KAAM;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YAC7D,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAE,GAAmC,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5G,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAID;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAa,EACb,SAAuB;IAEvB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACpE,OAAO,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,SAAsB,EAAE,GAAW,EAAE,MAAc;IACvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,gBAAgB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/cli/resolve.d.ts
CHANGED
|
@@ -10,5 +10,7 @@ export interface ResolvedManifest {
|
|
|
10
10
|
plugins: ResolvedPlugin[];
|
|
11
11
|
staticRoot: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function resolveManifest(raw: PluginManifest, manifestDir: string, searchPaths: string[]
|
|
13
|
+
export declare function resolveManifest(raw: PluginManifest, manifestDir: string, searchPaths: string[]): Promise<ResolvedManifest>;
|
|
14
|
+
export declare function findManifestEntry(dir: string): string | null;
|
|
15
|
+
export declare function findPluginEntry(dir: string): string | null;
|
|
14
16
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG/D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY5D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsB1D"}
|
package/dist/cli/resolve.js
CHANGED
|
@@ -1,36 +1,65 @@
|
|
|
1
1
|
import { readFileSync, existsSync, statSync, readdirSync } from "node:fs";
|
|
2
2
|
import { resolve, dirname, basename, join, relative, sep } from "node:path";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { resolveRef } from "./remote.js";
|
|
4
|
+
export async function resolveManifest(raw, manifestDir, searchPaths) {
|
|
5
5
|
const discovered = discoverPlugins(searchPaths);
|
|
6
6
|
const entries = normalizeEntries(raw.plugins);
|
|
7
|
-
const plugins = entries.map((entry, i) => {
|
|
8
|
-
const filePath = resolvePluginSrc(entry, manifestDir, discovered);
|
|
7
|
+
const plugins = await Promise.all(entries.map(async (entry, i) => {
|
|
8
|
+
const filePath = await resolvePluginSrc(entry, manifestDir, discovered);
|
|
9
9
|
const localDir = dirname(filePath);
|
|
10
10
|
const filename = basename(filePath);
|
|
11
11
|
const mergedEntry = mergeMetadata(entry, filePath, discovered);
|
|
12
|
-
mergedEntry.src =
|
|
12
|
+
mergedEntry.src = `/${i}/${filename}`;
|
|
13
13
|
return { entry: mergedEntry, localDir, filename, index: i };
|
|
14
|
-
});
|
|
15
|
-
const config = rewriteConfigPaths(raw.config || {}, manifestDir
|
|
14
|
+
}));
|
|
15
|
+
const config = rewriteConfigPaths(raw.config || {}, manifestDir);
|
|
16
16
|
return {
|
|
17
17
|
manifest: { ...raw, plugins: plugins.map((p) => p.entry), config },
|
|
18
18
|
plugins,
|
|
19
19
|
staticRoot: manifestDir,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
+
// -- Entry finders (used as strategies for resolveRef) -----------------------
|
|
23
|
+
export function findManifestEntry(dir) {
|
|
24
|
+
const pkgPath = join(dir, "package.json");
|
|
25
|
+
if (existsSync(pkgPath)) {
|
|
26
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
27
|
+
const ref = pkg.mediafuse?.manifest;
|
|
28
|
+
if (ref)
|
|
29
|
+
return resolve(dir, ref);
|
|
30
|
+
}
|
|
31
|
+
const manifestJson = join(dir, "manifest.json");
|
|
32
|
+
if (existsSync(manifestJson))
|
|
33
|
+
return manifestJson;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
export function findPluginEntry(dir) {
|
|
37
|
+
const pkgPath = join(dir, "package.json");
|
|
38
|
+
if (existsSync(pkgPath)) {
|
|
39
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
40
|
+
const plugins = pkg.mediafuse?.plugins;
|
|
41
|
+
if (typeof plugins === "string")
|
|
42
|
+
return resolve(dir, plugins);
|
|
43
|
+
if (Array.isArray(plugins) && plugins.length > 0)
|
|
44
|
+
return resolve(dir, plugins[0]);
|
|
45
|
+
if (pkg.main)
|
|
46
|
+
return resolve(dir, pkg.main);
|
|
47
|
+
}
|
|
48
|
+
for (const name of ["index.js", "index.ts"]) {
|
|
49
|
+
const candidate = resolve(dir, name);
|
|
50
|
+
if (existsSync(candidate))
|
|
51
|
+
return candidate;
|
|
52
|
+
}
|
|
53
|
+
// Not a single-plugin dir — scan subdirectories for the first plugin
|
|
54
|
+
const scanned = scanDir(dir);
|
|
55
|
+
if (scanned.length > 0)
|
|
56
|
+
return scanned[0].src;
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// -- Plugin discovery (for -p search paths) ----------------------------------
|
|
22
60
|
const SKIP_DIRS = new Set([
|
|
23
61
|
"node_modules", ".git", ".hg", ".svn", "dist", "build", "coverage",
|
|
24
62
|
]);
|
|
25
|
-
/**
|
|
26
|
-
* Walk search paths and discover plugins.
|
|
27
|
-
*
|
|
28
|
-
* For each -p path:
|
|
29
|
-
* - If it's a file, register it directly
|
|
30
|
-
* - If it's a directory with a package.json that has a mediafuse field, register it
|
|
31
|
-
* - Otherwise, scan subdirectories (skipping node_modules etc.) until
|
|
32
|
-
* package.jsons with mediafuse fields are found
|
|
33
|
-
*/
|
|
34
63
|
function discoverPlugins(searchPaths) {
|
|
35
64
|
const found = new Map();
|
|
36
65
|
for (const searchPath of searchPaths) {
|
|
@@ -76,11 +105,9 @@ function readPluginsFromPackage(dir, pkgPath) {
|
|
|
76
105
|
if (!plugins)
|
|
77
106
|
return [];
|
|
78
107
|
const pkgName = pkg.name || basename(dir);
|
|
79
|
-
// String shorthand: mediafuse.plugins: "./src/index.ts"
|
|
80
108
|
if (typeof plugins === "string") {
|
|
81
109
|
return [{ name: pkgName, src: resolve(dir, plugins) }];
|
|
82
110
|
}
|
|
83
|
-
// List: mediafuse.plugins: ["./src/index.ts", "./src/other.ts"]
|
|
84
111
|
if (Array.isArray(plugins)) {
|
|
85
112
|
return plugins.map((p, i) => ({
|
|
86
113
|
name: i === 0 ? pkgName : `${pkgName}/${basename(p, ".ts").replace(/\.js$/, "")}`,
|
|
@@ -89,23 +116,28 @@ function readPluginsFromPackage(dir, pkgPath) {
|
|
|
89
116
|
}
|
|
90
117
|
return [];
|
|
91
118
|
}
|
|
119
|
+
// -- Plugin source resolution ------------------------------------------------
|
|
92
120
|
function normalizeEntries(plugins) {
|
|
93
121
|
return plugins.map((p) => (typeof p === "string" ? { src: p } : { ...p }));
|
|
94
122
|
}
|
|
95
|
-
function resolvePluginSrc(entry, manifestDir, discovered) {
|
|
123
|
+
async function resolvePluginSrc(entry, manifestDir, discovered) {
|
|
96
124
|
const src = entry.src;
|
|
125
|
+
// Check discovered plugins from search paths first — local overrides remote
|
|
126
|
+
const match = findDiscovered(src, entry, discovered);
|
|
127
|
+
if (match)
|
|
128
|
+
return match.src;
|
|
129
|
+
// Try resolveRef — handles remote refs, URLs, and local dirs
|
|
130
|
+
const resolved = await resolveRef(src, findPluginEntry);
|
|
131
|
+
if (resolved !== src)
|
|
132
|
+
return resolved;
|
|
97
133
|
// Relative or absolute path
|
|
98
134
|
if (src.startsWith("./") || src.startsWith("../") || src.startsWith("/")) {
|
|
99
|
-
const
|
|
100
|
-
if (!existsSync(
|
|
101
|
-
throw new Error(`Plugin file not found: ${src} (resolved to ${
|
|
135
|
+
const abs = resolve(manifestDir, src);
|
|
136
|
+
if (!existsSync(abs)) {
|
|
137
|
+
throw new Error(`Plugin file not found: ${src} (resolved to ${abs})`);
|
|
102
138
|
}
|
|
103
|
-
return
|
|
139
|
+
return abs;
|
|
104
140
|
}
|
|
105
|
-
// Check discovered plugins from search paths
|
|
106
|
-
const match = findDiscovered(src, entry, discovered);
|
|
107
|
-
if (match)
|
|
108
|
-
return match.src;
|
|
109
141
|
// File in manifest dir
|
|
110
142
|
if (existsSync(resolve(manifestDir, src))) {
|
|
111
143
|
return resolve(manifestDir, src);
|
|
@@ -114,25 +146,23 @@ function resolvePluginSrc(entry, manifestDir, discovered) {
|
|
|
114
146
|
return resolveFromNodeModules(src, manifestDir);
|
|
115
147
|
}
|
|
116
148
|
function findDiscovered(src, entry, discovered) {
|
|
117
|
-
// Exact name match
|
|
118
149
|
if (entry.name && discovered.has(entry.name)) {
|
|
119
150
|
return discovered.get(entry.name);
|
|
120
151
|
}
|
|
121
|
-
// Package/subplugin reference: "mediafuse-plugins/p5" → look up "p5"
|
|
122
152
|
const slash = src.lastIndexOf("/");
|
|
123
153
|
if (slash >= 0) {
|
|
124
154
|
const subName = src.slice(slash + 1);
|
|
125
155
|
if (discovered.has(subName))
|
|
126
156
|
return discovered.get(subName);
|
|
127
157
|
}
|
|
128
|
-
// Full src as key
|
|
129
158
|
if (discovered.has(src))
|
|
130
159
|
return discovered.get(src);
|
|
131
|
-
|
|
160
|
+
const srcBasename = basename(src.split("?")[0]).replace(/\.[^.]+$/, "");
|
|
161
|
+
if (srcBasename && discovered.has(srcBasename))
|
|
162
|
+
return discovered.get(srcBasename);
|
|
132
163
|
for (const plugin of discovered.values()) {
|
|
133
164
|
if (plugin.name === src)
|
|
134
165
|
return plugin;
|
|
135
|
-
// Match scoped package short name: "@mediafuse/p5" matches "p5"
|
|
136
166
|
const scopedSlash = plugin.name.lastIndexOf("/");
|
|
137
167
|
if (scopedSlash >= 0) {
|
|
138
168
|
const shortName = plugin.name.slice(scopedSlash + 1);
|
|
@@ -148,21 +178,11 @@ function resolveFromNodeModules(ref, from) {
|
|
|
148
178
|
const pkgName = parts[0].startsWith("@")
|
|
149
179
|
? parts.slice(0, 2).join("/")
|
|
150
180
|
: parts[0];
|
|
151
|
-
const subPlugin = parts.slice(pkgName.split("/").length).join("/") || null;
|
|
152
181
|
const pkgDir = findPackageDir(pkgName, from);
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (typeof plugins === "string") {
|
|
158
|
-
return resolve(pkgDir, plugins);
|
|
159
|
-
}
|
|
160
|
-
if (Array.isArray(plugins) && plugins.length > 0) {
|
|
161
|
-
return resolve(pkgDir, plugins[0]);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
const main = pkg.main || "index.js";
|
|
165
|
-
return resolve(pkgDir, main);
|
|
182
|
+
const entry = findPluginEntry(pkgDir);
|
|
183
|
+
if (entry)
|
|
184
|
+
return entry;
|
|
185
|
+
throw new Error(`No plugin entry found in ${pkgDir}`);
|
|
166
186
|
}
|
|
167
187
|
function findPackageDir(name, from) {
|
|
168
188
|
let dir = resolve(from);
|
|
@@ -185,7 +205,7 @@ function mergeMetadata(entry, _resolvedPath, discovered) {
|
|
|
185
205
|
}
|
|
186
206
|
return merged;
|
|
187
207
|
}
|
|
188
|
-
function rewriteConfigPaths(config, manifestDir
|
|
208
|
+
function rewriteConfigPaths(config, manifestDir) {
|
|
189
209
|
return walkValues(config, (value) => {
|
|
190
210
|
if (typeof value !== "string")
|
|
191
211
|
return value;
|
|
@@ -193,7 +213,7 @@ function rewriteConfigPaths(config, manifestDir, baseUrl) {
|
|
|
193
213
|
return value;
|
|
194
214
|
const abs = resolve(manifestDir, value);
|
|
195
215
|
const rel = relative(manifestDir, abs).split(sep).join("/");
|
|
196
|
-
return
|
|
216
|
+
return `/${rel}`;
|
|
197
217
|
});
|
|
198
218
|
}
|
|
199
219
|
function walkValues(obj, transform) {
|
package/dist/cli/resolve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/cli/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoBzC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,WAAmB,EACnB,WAAqB;IAErB,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEpC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/D,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QAEtC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAoB,CAAC;IAChF,CAAC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAEjE,OAAO;QACL,QAAQ,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;QAClE,OAAO;QACP,UAAU,EAAE,WAAW;KACxB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;QACpC,IAAI,GAAG;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAElD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;QAEvC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IAED,qEAAqE;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAE/E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;CACnE,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,WAAqB;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAEtC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,IAAI,OAAiB,CAAC;IAEtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAChE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAW,EACX,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAEvC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;YACjF,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAE/E,SAAS,gBAAgB,CAAC,OAAiC;IACzD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAkB,EAClB,WAAmB,EACnB,UAAyC;IAEzC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAEtB,4EAA4E;IAC5E,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAE5B,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IAEtC,4BAA4B;IAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,uBAAuB;IACvB,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,eAAe;IACf,OAAO,sBAAsB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CACrB,GAAW,EACX,KAAkB,EAClB,UAAyC;IAEzC,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;IAC/D,CAAC;IAED,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAErD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,WAAW,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;IAEpF,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,IAAI,SAAS,KAAK,OAAO;gBAAE,OAAO,MAAM,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IAChD,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAClE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CACpB,KAAkB,EAClB,aAAqB,EACrB,UAAyC;IAEzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI;QACtB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE5B,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAA+B,EAC/B,WAAmB;IAEnB,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtE,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACjB,GAA4B,EAC5B,SAAkC;IAElC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACtD,CAAC,CAAC,UAAU,CAAC,IAA+B,EAAE,SAAS,CAAC;gBACxD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CACpB,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAgC,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/cli/server.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import type { ResolvedManifest } from "./resolve.js";
|
|
2
|
-
export
|
|
2
|
+
export interface ServerOptions {
|
|
3
|
+
cache?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function startServer(resolved: ResolvedManifest, port: number, options?: ServerOptions): void;
|
|
3
6
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/cli/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAqCrD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI,CAkIvG"}
|
package/dist/cli/server.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { readFileSync, createReadStream, existsSync } from "node:fs";
|
|
3
|
-
import { extname, resolve, sep } from "node:path";
|
|
3
|
+
import { extname, resolve, dirname, basename, sep } from "node:path";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
4
5
|
import { transform } from "esbuild";
|
|
6
|
+
import { resolveRef } from "./remote.js";
|
|
5
7
|
const MIME = {
|
|
6
8
|
".js": "application/javascript",
|
|
7
9
|
".mjs": "application/javascript",
|
|
@@ -26,9 +28,94 @@ const MIME = {
|
|
|
26
28
|
".txt": "text/plain",
|
|
27
29
|
};
|
|
28
30
|
const TS_EXTENSIONS = new Set([".ts", ".tsx"]);
|
|
29
|
-
|
|
31
|
+
function baseUrl(req, port) {
|
|
32
|
+
const host = req.headers.host || `localhost:${port}`;
|
|
33
|
+
const proto = req.headers["x-forwarded-proto"] || "http";
|
|
34
|
+
return `${proto}://${host}`;
|
|
35
|
+
}
|
|
36
|
+
export function startServer(resolved, port, options = {}) {
|
|
37
|
+
const cacheControl = options.cache ? "public, max-age=300" : "no-store";
|
|
30
38
|
const { manifest, plugins, staticRoot } = resolved;
|
|
31
|
-
|
|
39
|
+
// Dynamic resolution: maps hash IDs to local directories
|
|
40
|
+
const dynMap = new Map();
|
|
41
|
+
function dynId(specifier) {
|
|
42
|
+
return createHash("sha256").update(specifier).digest("hex").slice(0, 12);
|
|
43
|
+
}
|
|
44
|
+
const routes = [
|
|
45
|
+
[/^\/$/, (req, res) => {
|
|
46
|
+
const base = baseUrl(req, port);
|
|
47
|
+
const rewritten = rewriteManifestUrls(manifest, base);
|
|
48
|
+
res.setHeader("Content-Type", "application/json");
|
|
49
|
+
res.writeHead(200);
|
|
50
|
+
res.end(JSON.stringify(rewritten, null, 2));
|
|
51
|
+
}],
|
|
52
|
+
[/^\/_resolve$/, async (req, res) => {
|
|
53
|
+
const url = new URL(req.url || "/", `http://localhost:${port}`);
|
|
54
|
+
const src = url.searchParams.get("src");
|
|
55
|
+
if (!src) {
|
|
56
|
+
res.writeHead(400);
|
|
57
|
+
res.end(JSON.stringify({ error: "Missing src parameter" }));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const filePath = await resolveRef(src);
|
|
62
|
+
const id = dynId(src);
|
|
63
|
+
const localDir = dirname(filePath);
|
|
64
|
+
const filename = basename(filePath);
|
|
65
|
+
dynMap.set(id, { localDir, filename });
|
|
66
|
+
const base = baseUrl(req, port);
|
|
67
|
+
const resolvedUrl = `${base}/_dyn/${id}/${filename}`;
|
|
68
|
+
res.setHeader("Content-Type", "application/json");
|
|
69
|
+
res.writeHead(200);
|
|
70
|
+
res.end(JSON.stringify({ url: resolvedUrl }));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
74
|
+
res.writeHead(500);
|
|
75
|
+
res.end(JSON.stringify({ error: msg }));
|
|
76
|
+
}
|
|
77
|
+
}],
|
|
78
|
+
[/^\/_dyn\/([a-f0-9]+)\/(.+)$/, async (_req, res, match) => {
|
|
79
|
+
const entry = dynMap.get(match[1]);
|
|
80
|
+
if (!entry) {
|
|
81
|
+
res.writeHead(404);
|
|
82
|
+
res.end("Not found");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const filePath = safePath(entry.localDir, match[2]);
|
|
86
|
+
if (!filePath) {
|
|
87
|
+
res.writeHead(403);
|
|
88
|
+
res.end("Forbidden");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
await serveFile(filePath, res);
|
|
92
|
+
}],
|
|
93
|
+
[/^\/(\d+)\/(.+)$/, async (_req, res, match) => {
|
|
94
|
+
const idx = parseInt(match[1], 10);
|
|
95
|
+
const plugin = plugins[idx];
|
|
96
|
+
if (!plugin) {
|
|
97
|
+
res.writeHead(404);
|
|
98
|
+
res.end("Plugin not found");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const filePath = safePath(plugin.localDir, match[2]);
|
|
102
|
+
if (!filePath) {
|
|
103
|
+
res.writeHead(403);
|
|
104
|
+
res.end("Forbidden");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await serveFile(filePath, res);
|
|
108
|
+
}],
|
|
109
|
+
[/^\/(.+)$/, async (_req, res, match) => {
|
|
110
|
+
const filePath = safePath(staticRoot, match[1]);
|
|
111
|
+
if (!filePath) {
|
|
112
|
+
res.writeHead(403);
|
|
113
|
+
res.end("Forbidden");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
await serveFile(filePath, res);
|
|
117
|
+
}],
|
|
118
|
+
];
|
|
32
119
|
const server = createServer(async (req, res) => {
|
|
33
120
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
34
121
|
res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
|
|
@@ -43,55 +130,36 @@ export function startServer(resolved, port) {
|
|
|
43
130
|
res.end("Method not allowed");
|
|
44
131
|
return;
|
|
45
132
|
}
|
|
46
|
-
res.setHeader("Cache-Control",
|
|
133
|
+
res.setHeader("Cache-Control", cacheControl);
|
|
47
134
|
const url = new URL(req.url || "/", `http://localhost:${port}`);
|
|
48
135
|
const pathname = decodeURIComponent(url.pathname);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const pluginMatch = pathname.match(/^\/p\/(\d+)\/(.+)$/);
|
|
56
|
-
if (pluginMatch) {
|
|
57
|
-
const idx = parseInt(pluginMatch[1], 10);
|
|
58
|
-
const plugin = plugins[idx];
|
|
59
|
-
if (!plugin) {
|
|
60
|
-
res.writeHead(404);
|
|
61
|
-
res.end("Plugin not found");
|
|
136
|
+
for (const [pattern, handler] of routes) {
|
|
137
|
+
const match = pattern.exec(pathname);
|
|
138
|
+
if (match) {
|
|
139
|
+
await handler(req, res, match);
|
|
62
140
|
return;
|
|
63
141
|
}
|
|
64
|
-
const filePath = safePath(plugin.localDir, pluginMatch[2]);
|
|
65
|
-
if (!filePath) {
|
|
66
|
-
res.writeHead(403);
|
|
67
|
-
res.end("Forbidden");
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
await serveFile(filePath, res);
|
|
71
|
-
return;
|
|
72
142
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
res.end("Not found");
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
const filePath = safePath(staticRoot, pathname.slice(1));
|
|
79
|
-
if (!filePath) {
|
|
80
|
-
res.writeHead(403);
|
|
81
|
-
res.end("Forbidden");
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
await serveFile(filePath, res);
|
|
143
|
+
res.writeHead(404);
|
|
144
|
+
res.end("Not found");
|
|
85
145
|
});
|
|
86
146
|
server.listen(port, () => {
|
|
87
147
|
console.log(`mediafuse serving on http://localhost:${port}`);
|
|
88
|
-
console.log(`manifest: http://localhost:${port}/manifest.json`);
|
|
89
148
|
for (const plugin of plugins) {
|
|
90
149
|
const name = plugin.entry.name || `plugin-${plugin.index}`;
|
|
91
150
|
console.log(`${name}: ${plugin.entry.src}`);
|
|
92
151
|
}
|
|
93
152
|
});
|
|
94
153
|
}
|
|
154
|
+
function rewriteManifestUrls(manifest, base) {
|
|
155
|
+
return {
|
|
156
|
+
...manifest,
|
|
157
|
+
plugins: manifest.plugins.map((p) => ({
|
|
158
|
+
...p,
|
|
159
|
+
src: `${base}${p.src}`,
|
|
160
|
+
})),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
95
163
|
function safePath(root, requested) {
|
|
96
164
|
const resolved = resolve(root, requested);
|
|
97
165
|
const normalizedRoot = resolve(root) + sep;
|
package/dist/cli/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/cli/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export type { DefinePluginFn, SetupFn } from "./define-plugin.js";
|
|
2
|
-
export type { StoredMessage, MessageOf, PluginType, PluginEnvironment, PluginEvent, PluginEventMap, CreateContext, PluginHandlers, RegisterOptions, PluginEntry, BlockPosition, BlockCondition, BlockConditions, BlockAnimation, Block, PluginManifest, RegisterFn, PluginContext, } from "./types.js";
|
|
2
|
+
export type { StoredMessage, MessageOf, PluginType, PluginEnvironment, PluginEvent, PluginEventMap, CreateContext, PluginHandlers, RegisterOptions, PluginEntry, BlockPosition, BlockCondition, BlockConditions, BlockAnimation, BlockTypeRenderer, Block, PluginManifest, RegisterFn, RegisterBlockTypeFn, LoadType, LoadResult, LoadFn, PluginContext, } from "./types.js";
|
|
3
|
+
export { createLoader } from "./loader.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,KAAK,EACL,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { createLoader } from "./loader.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,YAAY,CAAC;AAkBnD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA6BvD"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const SOURCE_EXTENSIONS = new Set([".js", ".mjs", ".ts", ".tsx"]);
|
|
2
|
+
const JSON_EXTENSIONS = new Set([".json"]);
|
|
3
|
+
const CSS_EXTENSIONS = new Set([".css"]);
|
|
4
|
+
function inferType(url) {
|
|
5
|
+
const pathname = new URL(url).pathname;
|
|
6
|
+
const dot = pathname.lastIndexOf(".");
|
|
7
|
+
if (dot < 0)
|
|
8
|
+
return "source";
|
|
9
|
+
const ext = pathname.slice(dot);
|
|
10
|
+
if (SOURCE_EXTENSIONS.has(ext))
|
|
11
|
+
return "source";
|
|
12
|
+
if (JSON_EXTENSIONS.has(ext))
|
|
13
|
+
return "json";
|
|
14
|
+
if (CSS_EXTENSIONS.has(ext))
|
|
15
|
+
return "css";
|
|
16
|
+
return "url";
|
|
17
|
+
}
|
|
18
|
+
export function createLoader(serverBase) {
|
|
19
|
+
return async (specifier, type) => {
|
|
20
|
+
const res = await fetch(`${serverBase}/_resolve?src=${encodeURIComponent(specifier)}`);
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const body = await res.json().catch(() => ({ error: "Resolution failed" }));
|
|
23
|
+
throw new Error(body.error || `Failed to resolve: ${specifier}`);
|
|
24
|
+
}
|
|
25
|
+
const { url } = await res.json();
|
|
26
|
+
const resolved = type || inferType(url);
|
|
27
|
+
switch (resolved) {
|
|
28
|
+
case "source":
|
|
29
|
+
return await import(/* @vite-ignore */ url);
|
|
30
|
+
case "json": {
|
|
31
|
+
const jsonRes = await fetch(url);
|
|
32
|
+
return await jsonRes.json();
|
|
33
|
+
}
|
|
34
|
+
case "css": {
|
|
35
|
+
const link = document.createElement("link");
|
|
36
|
+
link.rel = "stylesheet";
|
|
37
|
+
link.href = url;
|
|
38
|
+
document.head.appendChild(link);
|
|
39
|
+
return url;
|
|
40
|
+
}
|
|
41
|
+
case "url":
|
|
42
|
+
return url;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAClE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzC,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE7B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAExC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,MAAM,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;gBACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChC,OAAO,GAAG,CAAC;YACb,CAAC;YACD,KAAK,KAAK;gBACR,OAAO,GAAG,CAAC;QACf,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/testing.js
CHANGED
|
@@ -44,7 +44,7 @@ export function createTestHarness(plugin, options = {}) {
|
|
|
44
44
|
};
|
|
45
45
|
const definePlugin = (name, setup) => {
|
|
46
46
|
capturedName = name;
|
|
47
|
-
setup({ register, manifest });
|
|
47
|
+
setup({ register, registerBlockType: () => { }, manifest, load: () => Promise.reject(new Error("load() not available in tests")) });
|
|
48
48
|
};
|
|
49
49
|
const pluginFn = typeof plugin === "function" ? plugin : plugin.default;
|
|
50
50
|
pluginFn(definePlugin);
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAsCA,SAAS,eAAe,CAAC,SAAmC;IAC1D,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA0F,EAC1F,UAA8B,EAAE;IAEhC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAE/D,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,YAAY,GAAsB,IAAI,CAAC;IAC3C,IAAI,gBAAgB,GAAmB,EAAE,CAAC;IAC1C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,SAAS,GACb,WAAW,KAAK,SAAS;QACvB,CAAC,CAAE,aAAa,EAAgC;QAChD,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,MAAM,GACV,WAAW,KAAK,MAAM;QACpB,CAAC,CAAC,CAAwB,KAAQ,EAAE,IAAuB,EAAE,EAAE;YAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAkB,CAAC,CAAC;QAChD,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,QAAwB,EAAE,QAA0B,EAAW,EAAE;QACnG,IAAI,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAEvC,YAAY,GAAG,IAAI,CAAC;QACpB,gBAAgB,GAAG,QAAQ,CAAC;QAC5B,WAAW,GAAG,IAAI,CAAC;QAEnB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,QAAQ,CAAC,QAAQ,CAAC;gBAChB,SAAS;gBACT,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;gBACzB,WAAW,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAClE,GAAG,EAAE,IAAI;aACV,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,YAAY,GAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnD,YAAY,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -68,10 +68,10 @@ export interface BlockAnimation {
|
|
|
68
68
|
exit?: string;
|
|
69
69
|
duration?: number;
|
|
70
70
|
}
|
|
71
|
+
export type BlockTypeRenderer<T = unknown> = (options: Record<string, unknown>, context: Record<string, unknown>) => T;
|
|
71
72
|
export interface Block {
|
|
72
73
|
id: string;
|
|
73
|
-
type:
|
|
74
|
-
provider?: string;
|
|
74
|
+
type: string;
|
|
75
75
|
position?: BlockPosition;
|
|
76
76
|
options: Record<string, unknown>;
|
|
77
77
|
conditions?: BlockConditions;
|
|
@@ -84,8 +84,14 @@ export interface PluginManifest {
|
|
|
84
84
|
config: Record<string, unknown>;
|
|
85
85
|
}
|
|
86
86
|
export type RegisterFn = (type: PluginType, handlers: PluginHandlers, options?: RegisterOptions) => boolean;
|
|
87
|
+
export type RegisterBlockTypeFn = (subtype: string, renderer: BlockTypeRenderer) => void;
|
|
88
|
+
export type LoadType = "source" | "json" | "css" | "url";
|
|
89
|
+
export type LoadResult<T extends LoadType | undefined = undefined> = T extends "source" ? Record<string, unknown> : T extends "json" ? unknown : T extends "css" ? string : T extends "url" ? string : Record<string, unknown> | string | unknown;
|
|
90
|
+
export type LoadFn = <T extends LoadType | undefined = undefined>(specifier: string, type?: T) => Promise<LoadResult<T>>;
|
|
87
91
|
export interface PluginContext {
|
|
88
92
|
register: RegisterFn;
|
|
93
|
+
registerBlockType: RegisterBlockTypeFn;
|
|
89
94
|
manifest: PluginManifest;
|
|
95
|
+
load: LoadFn;
|
|
90
96
|
}
|
|
91
97
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|