cleanup
This commit is contained in:
parent
fe33072cd5
commit
0cc2d914e1
@ -1,13 +1,8 @@
|
|||||||
import B from "./mod.ts";
|
import Bundler from "./mod.ts";
|
||||||
|
|
||||||
const results = await B({
|
const results = await Bundler();
|
||||||
imports: {
|
|
||||||
"react": "https://esm.sh/preact@10.22.0/compat",
|
|
||||||
"react/": "https://esm.sh/preact@10.22.0/compat/"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
for await(const file of results.outputFiles)
|
for await(const file of results.outputFiles)
|
||||||
{
|
{
|
||||||
console.log(file.path);
|
console.log(file.text);
|
||||||
}
|
}
|
||||||
|
@ -6,14 +6,16 @@ type JsonLike = JsonDeep
|
|||||||
|
|
||||||
type Configuration = {imports:JsonDeep, compilerOptions:JsonDeep};
|
type Configuration = {imports:JsonDeep, compilerOptions:JsonDeep};
|
||||||
|
|
||||||
export const Root = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString();
|
|
||||||
|
/** A `file://` url version of Deno.cwd() */
|
||||||
|
export const Root = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString() + "/";
|
||||||
export default async function HuntConfig()
|
export default async function HuntConfig()
|
||||||
{
|
{
|
||||||
let path:string, json:JsonLike|undefined;
|
let path:string, json:JsonLike|undefined;
|
||||||
|
|
||||||
const loadJSON =async(inPath:string)=>{
|
const loadJSON =async(inPath:string)=>{
|
||||||
try{
|
try{
|
||||||
const resp = await fetch(Root + "/" + inPath);
|
const resp = await fetch(Root + inPath);
|
||||||
if(inPath.endsWith(".jsonc"))
|
if(inPath.endsWith(".jsonc"))
|
||||||
{
|
{
|
||||||
const text = await resp.text();
|
const text = await resp.text();
|
89
mod.ts
89
mod.ts
@ -1,52 +1,27 @@
|
|||||||
import * as ESBuild from "https://deno.land/x/esbuild@v0.19.2/wasm.js";
|
import * as ESBuild from "https://deno.land/x/esbuild@v0.19.2/wasm.js";
|
||||||
import * as Mapper from "https://esm.sh/esbuild-plugin-importmaps@1.0.0"; // https://github.com/andstellar/esbuild-plugin-importmaps
|
import * as Mapper from "https://esm.sh/esbuild-plugin-importmaps@1.0.0"; // https://github.com/andstellar/esbuild-plugin-importmaps
|
||||||
|
import Introspect, {Root} from "./introspect.ts";
|
||||||
|
|
||||||
export const Root = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString()+"/";
|
|
||||||
console.log("running at", Root);
|
|
||||||
|
|
||||||
type Resolver = Parameters<ESBuild.PluginBuild["onResolve"]>[1];
|
|
||||||
|
|
||||||
const prefix = "/_dot_importer_/";
|
const prefix = "/_dot_importer_/";
|
||||||
const Resolver:Resolver =(args)=>
|
|
||||||
{
|
|
||||||
console.log("RESOLVE");
|
|
||||||
console.log("in:", args);
|
|
||||||
|
|
||||||
let resolveRoot = args.importer||Root;
|
|
||||||
if(resolveRoot.startsWith(prefix))
|
|
||||||
{
|
|
||||||
resolveRoot = resolveRoot.substring(prefix.length)
|
|
||||||
}
|
|
||||||
|
|
||||||
const output:ESBuild.OnResolveResult = {
|
|
||||||
path:prefix + new URL(args.path, resolveRoot).href,
|
|
||||||
namespace:"http",
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("out:", output);
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
const FetchTSX =async(inPath:string):Promise<ESBuild.OnLoadResult>=>
|
|
||||||
{
|
|
||||||
console.log("fetching", inPath);
|
|
||||||
const result = await fetch(inPath);
|
|
||||||
const contents = await result.text();
|
|
||||||
return { contents, loader: `tsx` };
|
|
||||||
}
|
|
||||||
|
|
||||||
const resolvePlugin:ESBuild.Plugin = {
|
const resolvePlugin:ESBuild.Plugin = {
|
||||||
name: "resolve-plugin",
|
name: "resolve-plugin",
|
||||||
setup(build) {
|
setup(build) {
|
||||||
build.onResolve({ filter: /^\.\/.*$/ }, Resolver);
|
build.onResolve({ filter: /^(\.\/|\.\.\/).*/ }, (args)=>
|
||||||
build.onResolve({ filter: /^(\.\.\/).*$/ }, Resolver);
|
{
|
||||||
|
let resolveRoot = args.importer||Root;
|
||||||
|
if(resolveRoot.startsWith(prefix))
|
||||||
|
{
|
||||||
|
resolveRoot = resolveRoot.substring(prefix.length);
|
||||||
|
}
|
||||||
|
const output:ESBuild.OnResolveResult = {
|
||||||
|
path:prefix + new URL(args.path, resolveRoot).href,
|
||||||
|
namespace:"http",
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
});
|
||||||
build.onLoad({ filter: /.*/, namespace:"http" }, async(args)=> {
|
build.onLoad({ filter: /.*/, namespace:"http" }, async(args)=> {
|
||||||
console.log("LOAD WEB");
|
|
||||||
console.log("in:", args);
|
|
||||||
const fetchPath = args.path.substring(prefix.length);
|
const fetchPath = args.path.substring(prefix.length);
|
||||||
|
|
||||||
console.log("fetching", fetchPath);
|
|
||||||
const result = await fetch(fetchPath);
|
const result = await fetch(fetchPath);
|
||||||
const contents = await result.text();
|
const contents = await result.text();
|
||||||
return { contents, loader: `tsx` };
|
return { contents, loader: `tsx` };
|
||||||
@ -54,30 +29,36 @@ const resolvePlugin:ESBuild.Plugin = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
type ImportMap = Parameters<typeof Mapper.importmapPlugin>[0];
|
export type ImportMap = Parameters<typeof Mapper.importmapPlugin>[0];
|
||||||
|
export type BuildOptions = ESBuild.BuildOptions;
|
||||||
|
export default async function(buildOptions={} as BuildOptions, importMap:ImportMap|false = false)
|
||||||
|
{
|
||||||
|
if(importMap === false)
|
||||||
|
{
|
||||||
|
importMap = await Introspect() as ImportMap;
|
||||||
|
}
|
||||||
|
|
||||||
await ESBuild.initialize({ worker: false });
|
const configuration:ESBuild.BuildOptions = {
|
||||||
const result = await ESBuild.build({
|
|
||||||
//entryPoints: ["./app.tsx"],
|
//entryPoints: ["./app.tsx"],
|
||||||
entryPoints: ["./deep/deep.tsx"],
|
entryPoints: ["entry"],
|
||||||
|
//entryPoints: ["./deep/deep.tsx"],
|
||||||
//entryPoints: ["http://localhost:4507/deep/deep.tsx"],
|
//entryPoints: ["http://localhost:4507/deep/deep.tsx"],
|
||||||
bundle: true,
|
bundle: true,
|
||||||
minify: true,
|
minify: true,
|
||||||
format: "esm",
|
format: "esm",
|
||||||
jsx: "automatic",
|
jsx: "automatic",
|
||||||
jsxImportSource: "react",
|
jsxImportSource: "react",
|
||||||
plugins:[
|
...buildOptions,
|
||||||
|
plugins: [
|
||||||
resolvePlugin,
|
resolvePlugin,
|
||||||
Mapper.importmapPlugin({
|
Mapper.importmapPlugin(importMap) as ESBuild.Plugin,
|
||||||
imports:{
|
...buildOptions.plugins||[]
|
||||||
"react":"https://esm.sh/preact@10.22.0/compat"
|
|
||||||
}
|
|
||||||
}) as ESBuild.Plugin
|
|
||||||
]
|
]
|
||||||
});
|
};
|
||||||
|
await ESBuild.initialize({ worker: false });
|
||||||
|
const result = await ESBuild.build(configuration);
|
||||||
ESBuild.stop();
|
ESBuild.stop();
|
||||||
|
return result;
|
||||||
for(const item of result.outputFiles)
|
|
||||||
{
|
|
||||||
//console.log(item.text)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export { ESBuild };
|
@ -1,3 +1,3 @@
|
|||||||
import React from "react";
|
//import React from "react";
|
||||||
console.log(React.createElement("div", {}, "hey"));
|
//console.log(React.createElement("div", {}, "hey"));
|
||||||
export default "TEST STRING";
|
export default "TEST STRING";
|
26
serve.tsx
26
serve.tsx
@ -1,9 +1,4 @@
|
|||||||
import bundler from "./mod.ts";
|
import bundler from "./mod.ts";
|
||||||
import Introspect, {Root} from "./introspect.tsx";
|
|
||||||
|
|
||||||
const Config = await Introspect();
|
|
||||||
|
|
||||||
console.log(Config.imports);
|
|
||||||
|
|
||||||
const transpiled:Map<string, string> = new Map();
|
const transpiled:Map<string, string> = new Map();
|
||||||
|
|
||||||
@ -13,18 +8,31 @@ Deno.serve(async(req)=>{
|
|||||||
if(index > -1)
|
if(index > -1)
|
||||||
{
|
{
|
||||||
const ext = url.pathname.substring(index+1, index+3);
|
const ext = url.pathname.substring(index+1, index+3);
|
||||||
|
|
||||||
|
console.log(ext);
|
||||||
|
console.log(url.pathname);
|
||||||
|
|
||||||
if(ext === "ts")
|
if(ext === "ts")
|
||||||
{
|
{
|
||||||
const results = await bundler({imports:Config.imports}, {
|
const results = await bundler({
|
||||||
entryPoints:[Root+url.pathname],
|
entryPoints:["."+url.pathname],
|
||||||
outfile:"bundle.js",
|
outfile:"bundle.js",
|
||||||
entryNames: `[dir][name]`,
|
entryNames: `[dir][name]`,
|
||||||
});
|
});
|
||||||
results.outputFiles?.forEach(output=>{
|
results.outputFiles?.forEach(output=>{
|
||||||
transpiled.set(output.path, output.text);
|
transpiled.set(output.path, output.text);
|
||||||
})
|
})
|
||||||
return new Response(results.outputFiles[0].text, {headers:{"content-type":"application/javascript"}});
|
return new Response(`
|
||||||
|
path: ${results.outputFiles[0].path}
|
||||||
|
hash: ${results.outputFiles[0].hash}
|
||||||
|
`, {headers:{"content-type":"application/javascript"}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ext == "js")
|
||||||
|
{
|
||||||
|
return new Response(transpiled.get(url.pathname)||"---", {headers:{"content-type":"application/javascript"}});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return new Response(Root+url.pathname);
|
return new Response(url.pathname);
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user