diff --git a/.gitingore b/.gitingore new file mode 100644 index 0000000..941fcf1 --- /dev/null +++ b/.gitingore @@ -0,0 +1 @@ +deno.lock \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8675ad5..b943dbc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,3 @@ { - "deno.enable": true, - "deno.unstable": true + "deno.enable": true } \ No newline at end of file diff --git a/app.tsx b/app.tsx index 2308168..b92be06 100644 --- a/app.tsx +++ b/app.tsx @@ -1 +1,3 @@ -export default ()=>{}; \ No newline at end of file +export default ()=>
+

App!

+
; \ No newline at end of file diff --git a/checker.tsx b/checker.tsx new file mode 100644 index 0000000..a5f1100 --- /dev/null +++ b/checker.tsx @@ -0,0 +1,222 @@ +import { parse as JSONC } from "https://deno.land/x/jsonct@v0.1.0/mod.ts"; + +type ConfigCheck = {path?:string, text?:string, json?:Record>}; +type ConfigCheckPair = [config:ConfigCheck, imports:ConfigCheck]; + +export const RootHost = import.meta.resolve("./"); +export const Root = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString(); +export async function HuntConfig() +{ + console.log("hunting in", Root); + let path:string, resp:Response, text="", json; + try + { + path = "deno.json" + resp = await fetch(Root + "/" + path); + text = await resp.text(); + } + catch(e) + { + try + { + path = "deno.jsonc"; + resp = await fetch(Root + "/" + path); + text = await resp.text(); + } + catch(e) + { + try + { + path = ".vscode/settings.json"; + resp = await fetch(Root + "/" + path); + json = await resp.json(); + + path = json["deno.config"]; + json = undefined; + if(path) + { + resp = await fetch(Root + "/" + path); + text = await resp.text(); + } + } + catch(e) + { + path = ""; + } + } + } + + if(path) + { + try + { + json = JSONC(text); + } + catch(e) + { + json = undefined; + } + } + + let imports:ConfigCheck = {}; + if(json && json.imports) + { + // config.imports + imports.json = json; + imports.text = JSON.stringify(json); + imports.path = path; + } + else if(json && !json.imports && json.importMap) + { + // config.importMap + try + { + imports.path = json.importMap; + resp = await fetch(Root + "/" + imports.path); + imports.text = await resp.text(); + try + { + imports.json = JSONC(imports.text); + } + catch(e) + { + imports.json = undefined; + } + } + catch(e) + { + // malformed import map + } + } + + return [{path, text, json}, imports] as ConfigCheckPair +} + +export async function Install(file:string, overrideName?:string, handler?:(content:string)=>string) +{ + const pathFile = RootHost + "install__/" + file; + + try{ + const check = await Deno.readTextFile(Deno.cwd()+"/"+file); + const replace = confirm(`⚠️🚧 The file "${file}" already exists. Replace it?`); + if(replace) + { + throw("") + } + console.log(`Using pre-existing "${file}" for now.`); + } + catch(e) + { + const resp = await fetch(pathFile); + const text = await resp.text(); + const name = overrideName || file; + await Deno.writeTextFile(Deno.cwd()+"/"+name, handler ? handler(text) : text); + } +} + +export async function Check() +{ + let [config, imports] = await HuntConfig(); + try + { + + //console.log(config, imports); + if(!config.path) + { + console.log(`🛠️ No Deno configuration found. Creating "deno.json" now.`); + await Deno.writeTextFile(Deno.cwd()+"/deno.json", `{"imports":{}}`); + Check(); + return; + } + else if(!config.json) + { + if(confirm(`🚧 Deno configuration is malformed. Replace "${config.path}" with a new one?.`)) + { + await Deno.writeTextFile(Deno.cwd()+"/"+config.path, `{"imports":{}}`); + Check(); + return; + } + else + { + throw("⛔ Invalid configuration."); + } + } + else if(!imports.json) + { + if(imports.path != config.path) + { + if(confirm(`🚧 External import map "${imports.path}" is missing or malformed. Replace it with defaults?.`)) + { + await Deno.writeTextFile(Deno.cwd()+"/"+imports.path, `{"imports":{}}`); + Check(); + return; + } + else + { + throw("⛔ Invalid configuration."); + } + } + } + else if(!imports.json?.imports) + { + imports.json.imports = {}; + } + + if(config.json && imports.json?.imports) + { + const importMap = imports.json.imports as Record; + const bake =async(obj:ConfigCheck)=> await Deno.writeTextFile(Deno.cwd()+"/"+obj.path, JSON.stringify(obj.json, null, "\t")); + + importMap["react"] = `https://esm.sh/preact@10.17.1/compat`; + importMap["react/"] = `https://esm.sh/preact@10.17.1/compat/`; + importMap["@preact/signals"] = `https://esm.sh/@preact/signals@1.2.1`; + importMap[">able/"] = `${RootHost}`; + if(!importMap[">able/app.tsx"]) + { + importMap[">able/app.tsx"] = `./app.tsx`; + await Install("app.tsx"); + } + if(!importMap[">able/api.tsx"]) + { + if(confirm(`🤔 OPTIONAL: Add backend ">able/api.tsx"?`)) + { + importMap[">able/api.tsx"] = "./api.tsx"; + await Install("api.tsx"); + } + } + + const tasks:Record = { + "check": `deno run -A --no-lock ${RootHost}cli.tsx check`, + "local": `deno run -A --no-lock ${RootHost}cli.tsx local`, + "debug": `deno run -A --no-lock ${RootHost}cli.tsx debug`, + "serve": `deno run -A --no-lock ${RootHost}cli.tsx serve`, + "cloud": `deno run -A --no-lock ${RootHost}cli.tsx cloud` + }; + const confTasks = (config.json.tasks || {}) as Record; + config.json.tasks = {...confTasks, ...tasks}; + + const options = + { + "lib": ["deno.window", "dom", "dom.asynciterable"], + "jsx": "react-jsx", + "jsxImportSource": "react" + } + const compOpts = config.json.compilerOptions as Record || {}; + const compLib:string[] = compOpts.lib as string[] || []; + compOpts.jsx = options.jsx; + compOpts.jsxImportSource = options.jsxImportSource; + compOpts.lib = [...compLib, ...options.lib]; + config.json.compilerOptions = compOpts; + + await bake(imports); + await bake(config); + } + } + catch(e) + { + console.log(e, "\n (Able Exiting...)"); + Deno.exit(); + } + console.log(`🚗 Good to go!`); + +} \ No newline at end of file diff --git a/cli.tsx b/cli.tsx new file mode 100644 index 0000000..13b9f3e --- /dev/null +++ b/cli.tsx @@ -0,0 +1,136 @@ +import * as Env from "https://deno.land/std@0.194.0/dotenv/mod.ts"; +import * as Arg from "https://deno.land/std@0.194.0/flags/mod.ts"; +import { RootHost, HuntConfig, Install, Check } from "./checker.tsx"; + +let arg = await Arg.parse(Deno.args); +let env = await Env.load(); +const collect =async(inKey:string, inArg:Record, inEnv:Record):Promise=> +{ + const scanArg = inArg[inKey]; + const scanEnvFile = inEnv[inKey]; + const scanEnvDeno = Deno.env.get(inKey); + + if(scanArg) + { + console.log(`Using "${inKey}" from passed argument.`); + return scanArg; + } + if(scanEnvFile) + { + console.log(`Using "${inKey}" from .env file.`); + return scanEnvFile; + } + if(scanEnvDeno) + { + console.log(`Using "${inKey}" from environment variable.`); + return scanEnvDeno; + } + + const scanUser = prompt(`No "${inKey}" found. Enter one here:`); + if(!scanUser || scanUser?.length < 3) + { + console.log("Exiting..."); + Deno.exit(); + } + return scanUser; +}; + +export async function SubProcess(args:string[]) +{ + const command = new Deno.Command( + `deno`, + { + args, + stdin: "piped", + stdout: "piped" + } + ); + + const child = command.spawn(); + + // open a file and pipe the subprocess output to it. + const writableStream = new WritableStream({ + write(chunk: Uint8Array): Promise { + Deno.stdout.write(chunk); + return Promise.resolve(); + }, + }); + child.stdout.pipeTo(writableStream); + + // manually close stdin + child.stdin.close(); + const status = await child.status; + + return status; +} + +if(arg._.length) +{ + + const [config, imports] = await HuntConfig(); + + console.log("able subprocesses running with ", config.path); + + switch(arg._[0]) + { + case "check" : + case "setup" : + { + await Check(); + break; + } + + case "local" : + { + await SubProcess(["run", `-A`, `--no-lock`, `--config=${config.path}`, RootHost+"run.tsx", "--dev", ...Deno.args]); + break; + } + case "debug" : + { + await SubProcess(["run", `-A`, `--no-lock`, `--config=${config.path}`, `--inspect-brk`, RootHost+"run.tsx", "--dev", ...Deno.args]); + break; + } + case "serve" : + { + const args = ["run", `-A`, `--no-lock`, `--config=${config.path}`, RootHost+"run.tsx", ...Deno.args]; + console.log("args are", args); + await SubProcess(args); + break; + } + case "cloud" : + { + let useToken = await collect("DENO_DEPLOY_TOKEN", arg, env); + let useProject = await collect("DENO_DEPLOY_PROJECT", arg, env); + + let scanProd:string[]|string|null = prompt(`Do you want to deploy to *production*?`); + if(scanProd) + { + scanProd = prompt(`Are you sure? This will update the live project at "${useProject}"`); + scanProd = scanProd ? ["--prod"] : []; + } + else + { + scanProd = []; + } + + await SubProcess([ + "run", + "-A", + "--no-lock", + `--config=${config.path}`, + "https://deno.land/x/deploy/deployctl.ts", + "deploy", + `--project=${useProject}`, + `--token=${useToken}`, + `--import-map=${imports.path}`, + RootHost+"run.tsx", + ...scanProd, + ...Deno.args]); + } + case "upgrade" : + { + await SubProcess(["install", `-A`, `-r`, `-f`, `--no-lock`, `--config=${config.path}`, RootHost+"cli.tsx", ...Deno.args]); + break; + } + } +} \ No newline at end of file diff --git a/deno.jsonc b/deno.jsonc new file mode 100644 index 0000000..95b17a3 --- /dev/null +++ b/deno.jsonc @@ -0,0 +1,26 @@ +{ + "imports": { + "react": "https://esm.sh/preact@10.17.1/compat", + "react/": "https://esm.sh/preact@10.17.1/compat/", + ">able/": "http://localhost:4507/", + ">able/app.tsx": "./app.tsx", + "@preact/signals": "https://esm.sh/@preact/signals@1.2.1" + }, + "tasks": { + "check": "deno run -A --no-lock http://localhost:4507/cli.tsx check", + "local": "deno run -A --no-lock http://localhost:4507/cli.tsx local", + "debug": "deno run -A --no-lock http://localhost:4507/cli.tsx debug", + "serve": "deno run -A --no-lock http://localhost:4507/cli.tsx serve", + "cloud": "deno run -A --no-lock http://localhost:4507/cli.tsx cloud", + "install": "deno install -A -r -f http://localhost:4507/cli.tsx" + }, + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react", + "lib": [ + "deno.window", + "dom", + "dom.asynciterable" + ] + } +} \ No newline at end of file diff --git a/deno.lock b/deno.lock deleted file mode 100644 index f98e488..0000000 --- a/deno.lock +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": "2", - "remote": { - "http://localhost:4507/hmr-static.tsx": "b88a33a019b7a6090d05a43d15843b36fe294196c4423c753fe3654ab369f1b1", - "http://localhost:4507/run-local.tsx": "2c0bf9b994677f2c0bb6ef26616960f25f61e3f8b4767891a95896fb7752a74e", - "http://localhost:4507/run-serve.tsx": "400828ea6457485c3bfcfe3bfdd60b1844e6e66f56a3606d250ce9a7481c6ead", - "http://localhost:4507/run.tsx": "f7f2a90d2bda35e5de3b307e36666120439f516d88f44a4388a3251679a99e3e", - "https://deno.land/std@0.180.0/media_types/_db.ts": "7606d83e31f23ce1a7968cbaee852810c2cf477903a095696cdc62eaab7ce570", - "https://deno.land/std@0.180.0/media_types/_util.ts": "916efbd30b6148a716f110e67a4db29d6949bf4048997b754415dd7e42c52378", - "https://deno.land/std@0.180.0/media_types/content_type.ts": "c682589a0aeb016bfed355cc1ed6fbb3ead2ea48fc0000ac5de6a5730613ad1c", - "https://deno.land/std@0.180.0/media_types/extension.ts": "7a4ef2813d7182f724a941f38161525996e4a67abc3cf6a0f9bc2168d73a0f0e", - "https://deno.land/std@0.180.0/media_types/extensions_by_type.ts": "4358023feac696e6e9d49c0f1e76a859f03ca254df57812f31f8536890c3a443", - "https://deno.land/std@0.180.0/media_types/format_media_type.ts": "1e35e16562e5c417401ffc388a9f8f421f97f0ee06259cbe990c51bae4e6c7a8", - "https://deno.land/std@0.180.0/media_types/get_charset.ts": "8be15a1fd31a545736b91ace56d0e4c66ea0d7b3fdc5c90760e8202e7b4b1fad", - "https://deno.land/std@0.180.0/media_types/mod.ts": "d3f0b99f85053bc0b98ecc24eaa3546dfa09b856dc0bbaf60d8956d2cdd710c8", - "https://deno.land/std@0.180.0/media_types/parse_media_type.ts": "bed260d868ea271445ae41d748e7afed9b5a7f407d2777ead08cecf73e9278de", - "https://deno.land/std@0.180.0/media_types/type_by_extension.ts": "6076a7fc63181d70f92ec582fdea2c927eb2cfc7f9c9bee9d6add2aca86f2355", - "https://deno.land/std@0.180.0/media_types/vendor/mime-db.v1.52.0.ts": "6925bbcae81ca37241e3f55908d0505724358cda3384eaea707773b2c7e99586", - "https://esm.sh/@swc/wasm-web@1.3.62": "e077889c90bd43ad29e9cf086818efc334bdf31b933575e0c27972173053a3c6", - "https://esm.sh/preact@10.15.1/compat/jsx-runtime": "3f191e04473646ff8f5f76fb4378fc502a7cc892d9e147584d4f7531981bc86b", - "https://esm.sh/stable/preact@10.15.1/denonext/compat.js": "bad6b5b4d4fdfa5975b7a8d30410bd6877247f058e4952799fab39f66a94b8cf", - "https://esm.sh/stable/preact@10.15.1/denonext/compat/jsx-runtime.js": "e5c016fa258601ca873ba29188e56cede90372a0bdb52e58b0dfb801f2e2f219", - "https://esm.sh/stable/preact@10.15.1/denonext/hooks.js": "5c989ad368cf4f2cb3a5d7d1801843d9348c599fe3e7731d04728f7b845d724e", - "https://esm.sh/stable/preact@10.15.1/denonext/jsx-runtime.js": "52806054f5b3477005ab4bdc17de3d219ccc6c130d0cd803c45667b0cac2f6ed", - "https://esm.sh/stable/preact@10.15.1/denonext/preact.mjs": "30710ac1d5ff3711ae0c04eddbeb706f34f82d97489f61aaf09897bc75d2a628", - "https://esm.sh/v130/@swc/wasm-web@1.3.62/denonext/wasm-web.mjs": "57046d46c9ef1398a294ba7447034f5966e48866a05c309cccec4bb4d6e7c61b" - } -} diff --git a/deno.json b/deno__.json similarity index 58% rename from deno.json rename to deno__.json index e1872f0..cc26f5d 100644 --- a/deno.json +++ b/deno__.json @@ -1,19 +1,20 @@ { "compilerOptions": { "lib": ["deno.window", "dom"], "jsx": "react-jsx", - "jsxImportSource": "https://esm.sh/preact@10.15.1/compat" + "jsxImportSource": "react" }, "imports": { "react":"https://esm.sh/preact@10.15.1/compat", + "react/":"https://esm.sh/preact@10.15.1/compat/", "react-original":"https://esm.sh/preact@10.15.1/compat", - "able/": "http://localhost:4507/" + }, "tasks": { "local": "deno run -A --reload=http://localhost:4507 --no-lock ./run-local.tsx --port=1234", "serve": "deno run -A --reload=http://localhost:4507 --no-lock ./run-serve.tsx --port=1234", - "debug": "deno run -A --reload=http://localhost:4507 --inspect-wait --no-lock ./run-serve.tsx --port=1234", - "deploy":"deno run -A --no-lock --reload=http://localhost:4507 http://localhost:4507/run-deploy.tsx" + "cloud": "deno run -A --reload=http://localhost:4507 --no-lock ./run-deploy.tsx", + "debug": "deno run -A --reload=http://localhost:4507 --no-lock --inspect-wait ./run-serve.tsx --port=1234", } } \ No newline at end of file diff --git a/example-config/app.tsx b/example-config/app.tsx deleted file mode 100644 index 88f14aa..0000000 --- a/example-config/app.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Router, Switch, Case } from ">able/iso-elements.tsx"; - -import React from "react"; - -const CTXString = React.createContext("lol"); - -type StateBinding = [get:T, set:React.StateUpdater]; -const CTXState = React.createContext(null) as React.Context|null>; -const Outer =(props:{children:React.JSX.Element})=> -{ - const binding = React.useState(11); - return - {props.children} - -}; -const Inner =()=> -{ - const [stateGet, stateSet] = React.useContext(CTXState) || ["default", ()=>{}]; - return -}; - - -type Store = {name:string, age:number} -const reducer =(inState:Store, inAction:number)=> -{ - return {...inState, age:inState.age+inAction}; -} - -const builder =(inState:Store):Store=> -{ - inState.age = 100; - return inState; -} - - -export default ()=> -{ - const [Store, Dispatch] = React.useReducer(reducer, {name:"seth", age:24} as Store, builder) - return - -
-

Title

-

subtitle

-

- -

-
- - - - - - -
-
; -} diff --git a/example-config/deno.json b/example-config/deno.json deleted file mode 100644 index ae6483b..0000000 --- a/example-config/deno.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "imports": - { - "react": "https://esm.sh/preact@10.15.1/compat", - ">able/": "http://localhost:4507/", - ">able/app.tsx": "./app.tsx" - }, - "tasks": - { - "serve": "deno run -A --no-lock --config=deno.json --reload=http://localhost:4507 http://localhost:4507/run.tsx", - "local": "deno run -A --no-lock --config=deno.json --reload=http://localhost:4507 http://localhost:4507/run.tsx --dev", - "debug": "deno run -A --no-lock --config=deno.json --reload=http://localhost:4507 --inspect-wait http://localhost:4507/run.tsx", - "cloud": "deno run -A --no-lock --config=deno.json --reload=http://localhost:4507 http://localhost:4507/run.tsx --dep" - }, - "compilerOptions": - { - "lib": ["deno.window", "dom"] - } -} \ No newline at end of file diff --git a/example-script/app.tsx b/example-script/app.tsx deleted file mode 100644 index 88f14aa..0000000 --- a/example-script/app.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Router, Switch, Case } from ">able/iso-elements.tsx"; - -import React from "react"; - -const CTXString = React.createContext("lol"); - -type StateBinding = [get:T, set:React.StateUpdater]; -const CTXState = React.createContext(null) as React.Context|null>; -const Outer =(props:{children:React.JSX.Element})=> -{ - const binding = React.useState(11); - return - {props.children} - -}; -const Inner =()=> -{ - const [stateGet, stateSet] = React.useContext(CTXState) || ["default", ()=>{}]; - return -}; - - -type Store = {name:string, age:number} -const reducer =(inState:Store, inAction:number)=> -{ - return {...inState, age:inState.age+inAction}; -} - -const builder =(inState:Store):Store=> -{ - inState.age = 100; - return inState; -} - - -export default ()=> -{ - const [Store, Dispatch] = React.useReducer(reducer, {name:"seth", age:24} as Store, builder) - return - -
-

Title

-

subtitle

-

- -

-
- - - - - - -
-
; -} diff --git a/example-script/deno.json b/example-script/deno.json deleted file mode 100644 index c8e26a5..0000000 --- a/example-script/deno.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { "lib": ["deno.window", "dom"] }, - "imports": - { - "react": "https://esm.sh/preact@10.15.1/compat", - ">able/": "http://localhost:4507/" - }, - "tasks": - { - "local": "deno run -A --no-lock --reload=http://localhost:4507 run__.tsx --dev", - "serve": "deno run -A --no-lock --reload=http://localhost:4507 run__.tsx", - "debug": "deno run -A --no-lock --reload=http://localhost:4507 --inspect-wait run__.tsx", - "cloud": "deno run -A --no-lock --reload=http://localhost:4507 run__.tsx --dep" - } -} \ No newline at end of file diff --git a/example-script/run__.tsx b/example-script/run__.tsx deleted file mode 100644 index 8bc8091..0000000 --- a/example-script/run__.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Configure from ">able/run.tsx"; - -Configure({ - Start:"/app.tsx", - Serve() - { - return false; - } -}) \ No newline at end of file diff --git a/install__/api.tsx b/install__/api.tsx new file mode 100644 index 0000000..777ecae --- /dev/null +++ b/install__/api.tsx @@ -0,0 +1,4 @@ +export default (req:Request):Response|false=> +{ + return false; +} \ No newline at end of file diff --git a/install__/app.tsx b/install__/app.tsx new file mode 100644 index 0000000..b92be06 --- /dev/null +++ b/install__/app.tsx @@ -0,0 +1,3 @@ +export default ()=>
+

App!

+
; \ No newline at end of file diff --git a/run-local.tsx b/run-local.tsx index bef5370..94553e5 100644 --- a/run-local.tsx +++ b/run-local.tsx @@ -16,6 +16,10 @@ Configure({ { syntax: "typescript", tsx: true, + }, + transform: + { + react: { runtime: "automatic" } } } }, diff --git a/run-serve.tsx b/run-serve.tsx index 90bd739..74e81a5 100644 --- a/run-serve.tsx +++ b/run-serve.tsx @@ -1,70 +1,51 @@ import * as MIME from "https://deno.land/std@0.180.0/media_types/mod.ts"; import * as SWCW from "https://esm.sh/@swc/wasm-web@1.3.62"; - +import { HuntConfig } from "./checker.tsx"; import CustomServe from ">able/api.tsx"; export const Root = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString(); type DenoConfig = {imports:Record}; const ImportMap:DenoConfig = {imports:{}}; -let ImportMapOriginal = {}; let ImportMapProxies:Record = {}; + const ImportMapReload =async()=> { - let json:DenoConfig; - const path = Root+"/deno.json"; - try - { - const resp = await fetch(path); - json = await resp.json(); - if(!json?.imports) - { throw new Error("imports not specified in deno.json") } - ImportMapOriginal = json; - } - catch(e) - { - console.log(`error reading deno config "${path}" message:"${e}"`); - return; - } + const [, {json, path}] = await HuntConfig(); + const imports = (json as DenoConfig).imports; - if(!json.imports["react"]) + if(imports) { - console.log(`"react" specifier not defined in import map`); - } - else if(!json.imports["react/"]) - { - json.imports["react/"] = json.imports["react"]+"/"; - } - - if(!json.imports["able:app"]) - { - console.log(`"able:app" specifier not defined in import map.`); - } - - - ImportMapProxies = {}; - Object.entries(json.imports).forEach(([key, value])=> - { - if(value.startsWith("./")) - { - json.imports[key] = value.substring(1); - } - if(key.startsWith(">")) + ImportMapProxies = {}; + Object.entries(imports).forEach(([key, value])=> { if(value.startsWith("./")) { - ImportMapProxies[encodeURI(key)] = value.substring(1); - json.imports[key] = value.substring(1); + imports[key] = value.substring(1); } - else + if(key.startsWith(">")) { - ImportMapProxies["/"+encodeURI(key)] = value; - json.imports[key] = "/"+key; + if(value.startsWith("./")) + { + ImportMapProxies[encodeURI(key)] = value.substring(1); + imports[key] = value.substring(1); + } + else + { + ImportMapProxies["/"+encodeURI(key)] = value; + imports[key] = "/"+key; + } } - } - }); + }); + + ImportMap.imports = Configuration.Remap(imports, Configuration); + + } + else + { + + } - ImportMap.imports = Configuration.Remap(json.imports, Configuration); }; export type CustomHTTPHandler = (inReq:Request, inURL:URL, inExt:string|false, inMap:{imports:Record}, inConfig:Configuration)=>void|false|Response|Promise; @@ -266,9 +247,9 @@ export default async()=> if(running){return}; running = true; - await ImportMapReload(); try { + await ImportMapReload(); await SWCW.default(); } catch(e) @@ -276,7 +257,6 @@ export default async()=> console.log("swc init error:", e); } - const server = Deno.serve({port:parseInt(Deno.env.get("port")||"8000")}, async(req: Request)=> { const url:URL = new URL(req.url);