├── .prettierrc
├── mod.ts
├── netlify.toml
├── public
└── favicon.ico
├── examples
├── hono
│ ├── deno.json
│ ├── server.tsx
│ └── deno.lock
└── oak
│ ├── deno.json
│ ├── server.tsx
│ └── deno.lock
├── .vscode
└── settings.json
├── netlify
└── edge-functions
│ └── php.tsx
├── lib
├── bootstrap.ts
└── usephp.tsx
├── README.md
└── .gitignore
/.prettierrc:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/mod.ts:
--------------------------------------------------------------------------------
1 | export * from "./lib/usephp.tsx";
2 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "public"
3 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ascorbic/use-php/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/examples/hono/deno.json:
--------------------------------------------------------------------------------
1 | {
2 | "tasks": {
3 | "serve": "deno run server.tsx"
4 | },
5 | "compilerOptions": {
6 | "jsx": "react",
7 | "jsxFactory": "h",
8 | "noImplicitAny": false
9 | }
10 | }
--------------------------------------------------------------------------------
/examples/oak/deno.json:
--------------------------------------------------------------------------------
1 | {
2 | "tasks": {
3 | "serve": "deno run server.tsx"
4 | },
5 | "compilerOptions": {
6 | "jsx": "react",
7 | "jsxFactory": "h",
8 | "noImplicitAny": false
9 | }
10 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "deno.enable": true,
3 | "deno.unstable": true,
4 | "deno.importMap": ".netlify/edge-functions-import-map.json",
5 | "[typescript]": {
6 | "editor.defaultFormatter": "denoland.vscode-deno"
7 | },
8 | "deno.lint": true
9 | }
10 |
--------------------------------------------------------------------------------
/examples/hono/server.tsx:
--------------------------------------------------------------------------------
1 | /** @jsx h */
2 | import { Context, Hono } from "https://deno.land/x/hono/mod.ts";
3 | import { usePHP } from "https://deno.land/x/use_php/mod.ts";
4 | import { h, renderToString } from "https://deno.land/x/jsx/mod.ts";
5 |
6 | const app: Hono = new Hono();
7 |
8 | app.get("/", async (c: Context) => {
9 | const request: Request = c.req.raw;
10 |
11 | const php = await usePHP(request, h);
12 | return c.html(
13 | await renderToString(
14 |
15 |
16 | Use PHP
17 |
18 |
19 | {await php`
20 |
21 | `}
22 |
23 |
24 | )
25 | );
26 | });
27 |
28 | Deno.serve(app.fetch);
29 |
--------------------------------------------------------------------------------
/examples/oak/server.tsx:
--------------------------------------------------------------------------------
1 | /** @jsx h */
2 | import { Application, Router } from "https://deno.land/x/oak/mod.ts";
3 | import { usePHP } from "https://deno.land/x/use_php/mod.ts";
4 | import { h, renderToString } from "https://deno.land/x/jsx/mod.ts";
5 |
6 | const app = new Application();
7 | const router = new Router();
8 |
9 | router.get("/", async (ctx) => {
10 | const request = ctx.request as unknown as Request;
11 |
12 | const php = await usePHP(request, h);
13 |
14 | const body = await renderToString(
15 |
16 |
17 | Use PHP
18 |
19 |
20 | {await php`
21 |
22 | `}
23 |
24 |
25 | );
26 |
27 | ctx.response.body = body;
28 | ctx.response.type = "text/html";
29 | });
30 |
31 | app.use(router.routes());
32 | app.use(router.allowedMethods());
33 |
34 | await app.listen({ port: 8000 });
35 |
--------------------------------------------------------------------------------
/netlify/edge-functions/php.tsx:
--------------------------------------------------------------------------------
1 | /** @jsx h */
2 | /** @jsxFrag Fragment */
3 | import { h, renderToString } from "https://deno.land/x/jsx/mod.ts";
4 | import { usePHP } from "../../lib/usephp.tsx";
5 |
6 | export default async function handler(request: Request) {
7 | const php = await usePHP(request, h);
8 | return new Response(
9 | await renderToString(
10 |
11 |
12 | Use PHP
13 |
14 |
15 | {await php`
16 | Hello
17 | hello");
20 | ?>
21 |
22 |
23 |
24 | `}
25 |
26 |
27 | ),
28 | {
29 | headers: {
30 | "content-type": "text/html; charset=UTF-8",
31 | },
32 | }
33 | );
34 | }
35 |
36 | export const config = {
37 | path: "/*",
38 | excluded_paths: "/public/*",
39 | };
40 |
--------------------------------------------------------------------------------
/lib/bootstrap.ts:
--------------------------------------------------------------------------------
1 | export const bootstrapCode = (
2 | path = "/",
3 | method = "GET",
4 | _GET = {},
5 | _POST = {},
6 | ) =>
7 | /* php */ ` $_SESSION]) . "\n");
12 |
13 | header_register_callback(function() use($stdErr){
14 | fwrite($stdErr, json_encode(['headers'=>headers_list()]) . "\n");
15 | });
16 | register_shutdown_function(function() use($stdErr){
17 | fwrite($stdErr, json_encode(['session_id' => session_id()]) . "\n");
18 | fwrite($stdErr, json_encode(['headers'=>headers_list()]) . "\n");
19 | fwrite($stdErr, json_encode(['errors' => error_get_last()]) . "\n");
20 | fwrite($stdErr, json_encode(['session' => $_SESSION]) . "\n");
21 | });
22 | set_error_handler(function(...$args) use($stdErr, &$errors){
23 | fwrite($stdErr, json_encode($args, JSON_PRETTY_PRINT) . "\n" );
24 | });
25 | $request = (object) json_decode(
26 | '${JSON.stringify({ path, method, _GET, _POST })}'
27 | , JSON_OBJECT_AS_ARRAY
28 | );
29 | parse_str(substr($request->_GET, 1), $_GET);
30 | $_POST = $request->_POST;
31 | $origin = 'http://localhost:3333';
32 | $docroot = '/';
33 | $script = 'index.php';
34 | $path = $request->path;
35 | $path = preg_replace('/^\\/php-wasm/', '', $path);
36 | $_SERVER['SERVER_SOFTWARE'] = 'Netlify Edge Functions';
37 | $_SERVER['REQUEST_URI'] = $path;
38 | $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
39 | $_SERVER['SERVER_NAME'] = $origin;
40 | $_SERVER['SERVER_PORT'] = 3333;
41 | $_SERVER['REQUEST_METHOD'] = $request->method;
42 | $_SERVER['SCRIPT_FILENAME'] = $docroot . '/' . $script;
43 | $_SERVER['SCRIPT_NAME'] = $docroot . '/' . $script;
44 | $_SERVER['PHP_SELF'] = $docroot . '/' . $script;
45 | $_SERVER['DOCUMENT_ROOT'] = '/';
46 | $_SERVER['HTTPS'] = '';
47 | chdir($docroot);
48 | `;
49 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # 🏎️ usePHP 💨
4 |
5 | A React hook for running PHP? Why not?
6 |
7 | It runs in a Netlify Edge Function and uses [php-wasm](https://github.com/seanmorris/php-wasm) to execute the PHP. It runs asynchronously, so you need a renderer that supports async components.
8 |
9 | **[View the demo](https://php-edge.netlify.app/)**
10 |
11 | [](https://app.netlify.com/start/deploy?repository=https://github.com/ascorbic/use-php)
12 |
13 | ### Usage
14 |
15 | ```tsx filename=netlify/edge-functions/php.tsx
16 | /** @jsx h */
17 | import { h, renderToString } from "https://deno.land/x/jsx/mod.ts";
18 | import { usePHP } from "https://deno.land/x/use_php/mod.ts";
19 |
20 | export default async function handler(request: Request) {
21 | const php = await usePHP(request, h);
22 | return new Response(
23 | await renderToString(
24 |
25 |
26 | Use PHP
27 |
28 |
29 | {await php`
30 |
31 | `}
32 |
33 |
34 | ),
35 | {
36 | headers: {
37 | "content-type": "text/html; charset=UTF-8",
38 | },
39 | }
40 | );
41 | }
42 |
43 | export const config = {
44 | path: "/*",
45 | excluded_paths: "/public/*",
46 | };
47 | ```
48 |
49 | ## API
50 |
51 | ### `usePHP(request: Request, renderer?: JSXRenderer)`
52 |
53 | Pass in the request object and an optional JSX renderer and it will return tagged template that you can use to execute PHP. If you pass a JSX render function to the hook (e.g. `h` or `React.createElement`), then the template will return a JSX element. If you omit the renderer it will return an HTML string instead.
54 |
55 | Try it yourself:
56 |
57 | [](https://app.netlify.com/start/deploy?repository=https://github.com/ascorbic/use-php)
58 |
59 | ## FAQ
60 |
61 | - **Why?**
62 | - Why not? That Lambo won't buy itself.
63 | - **How can I deploy this to production?**
64 | - 🤦🏻♂️
65 |
66 | ### LICENCE
67 |
68 | MIT Licence. © 2023 [Matt Kane](https://github.com/ascorbic)
69 |
--------------------------------------------------------------------------------
/lib/usephp.tsx:
--------------------------------------------------------------------------------
1 | import { PhpWorker } from "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/PhpWorker.mjs";
2 | import { bootstrapCode } from "./bootstrap.ts";
3 |
4 | type JSXRenderer = (tag: string, props: Record) => JSX.Element;
5 |
6 | /**
7 | * Creates a "php" tag that can be used to run php code in a template literal.
8 | * @param request The incoming request
9 | * @returns {string}
10 | */
11 | export async function usePHP(
12 | request: Request
13 | ): Promise<(code: TemplateStringsArray) => Promise>;
14 | /**
15 | * Creates a "php" tag that can be used to run php code in a template literal.
16 | * @param request The incoming request
17 | * @param jsxRenderer A jsx renderer to use to render the output
18 | * @returns {JSX.Element}
19 | */
20 | export async function usePHP(
21 | request: Request,
22 | jsxRenderer: JSXRenderer
23 | ): Promise<(code: TemplateStringsArray) => Promise>;
24 | export async function usePHP(
25 | request: Request,
26 | jsxRenderer?: JSXRenderer
27 | ): Promise<(code: TemplateStringsArray) => Promise> {
28 | // emscripten expects workers to have window.location available
29 | globalThis.location ||= { href: request.url } as Location;
30 |
31 | const url = new URL(request.url);
32 |
33 | const buff: string[] = [];
34 |
35 | const php = await new PhpWorker();
36 |
37 | php.addEventListener("output", (e) => {
38 | buff.push((e as CustomEvent).detail);
39 | });
40 |
41 | php.addEventListener("error", (event) => {
42 | (event as CustomEvent).detail.forEach((error) => {
43 | error = error.trim();
44 | if (error) {
45 | console.error(error);
46 | }
47 | });
48 | });
49 |
50 | await new Promise((resolve) => {
51 | php.addEventListener("ready", () => resolve());
52 | });
53 |
54 | await php.run(
55 | bootstrapCode(
56 | url.pathname,
57 | request.method,
58 | JSON.stringify(url.searchParams)
59 | )
60 | );
61 |
62 | return async (source: TemplateStringsArray) => {
63 | const code = source.raw.join("");
64 | await php.run(code);
65 | const res = buff.join("\n");
66 | buff.length = 0;
67 | return jsxRenderer
68 | ? jsxRenderer("div", { dangerouslySetInnerHTML: { __html: res } })
69 | : res;
70 | };
71 | }
72 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Local Netlify folder
2 | .netlify
3 | # Logs
4 | logs
5 | *.log
6 | npm-debug.log*
7 | yarn-debug.log*
8 | yarn-error.log*
9 | lerna-debug.log*
10 | .pnpm-debug.log*
11 |
12 | # Diagnostic reports (https://nodejs.org/api/report.html)
13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
14 |
15 | # Runtime data
16 | pids
17 | *.pid
18 | *.seed
19 | *.pid.lock
20 |
21 | # Directory for instrumented libs generated by jscoverage/JSCover
22 | lib-cov
23 |
24 | # Coverage directory used by tools like istanbul
25 | coverage
26 | *.lcov
27 |
28 | # nyc test coverage
29 | .nyc_output
30 |
31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
32 | .grunt
33 |
34 | # Bower dependency directory (https://bower.io/)
35 | bower_components
36 |
37 | # node-waf configuration
38 | .lock-wscript
39 |
40 | # Compiled binary addons (https://nodejs.org/api/addons.html)
41 | build/Release
42 |
43 | # Dependency directories
44 | node_modules/
45 | jspm_packages/
46 |
47 | # Snowpack dependency directory (https://snowpack.dev/)
48 | web_modules/
49 |
50 | # TypeScript cache
51 | *.tsbuildinfo
52 |
53 | # Optional npm cache directory
54 | .npm
55 |
56 | # Optional eslint cache
57 | .eslintcache
58 |
59 | # Optional stylelint cache
60 | .stylelintcache
61 |
62 | # Microbundle cache
63 | .rpt2_cache/
64 | .rts2_cache_cjs/
65 | .rts2_cache_es/
66 | .rts2_cache_umd/
67 |
68 | # Optional REPL history
69 | .node_repl_history
70 |
71 | # Output of 'npm pack'
72 | *.tgz
73 |
74 | # Yarn Integrity file
75 | .yarn-integrity
76 |
77 | # dotenv environment variable files
78 | .env
79 | .env.development.local
80 | .env.test.local
81 | .env.production.local
82 | .env.local
83 |
84 | # parcel-bundler cache (https://parceljs.org/)
85 | .cache
86 | .parcel-cache
87 |
88 | # Next.js build output
89 | .next
90 | out
91 |
92 | # Nuxt.js build / generate output
93 | .nuxt
94 | dist
95 |
96 | # Gatsby files
97 | .cache/
98 | # Comment in the public line in if your project uses Gatsby and not Next.js
99 | # https://nextjs.org/blog/next-9-1#public-directory-support
100 | # public
101 |
102 | # vuepress build output
103 | .vuepress/dist
104 |
105 | # vuepress v2.x temp and cache directory
106 | .temp
107 | .cache
108 |
109 | # Docusaurus cache and generated files
110 | .docusaurus
111 |
112 | # Serverless directories
113 | .serverless/
114 |
115 | # FuseBox cache
116 | .fusebox/
117 |
118 | # DynamoDB Local files
119 | .dynamodb/
120 |
121 | # TernJS port file
122 | .tern-port
123 |
124 | # Stores VSCode versions used for testing VSCode extensions
125 | .vscode-test
126 |
127 | # yarn v2
128 | .yarn/cache
129 | .yarn/unplugged
130 | .yarn/build-state.yml
131 | .yarn/install-state.gz
132 | .pnp.*
133 | .DS_Store
134 |
--------------------------------------------------------------------------------
/examples/hono/deno.lock:
--------------------------------------------------------------------------------
1 | {
2 | "version": "3",
3 | "redirects": {
4 | "https://deno.land/x/hono/mod.ts": "https://deno.land/x/hono@v3.10.0-rc.1/mod.ts",
5 | "https://deno.land/x/jsx/mod.ts": "https://deno.land/x/jsx@v0.1.5/mod.ts",
6 | "https://deno.land/x/use_php/mod.ts": "https://deno.land/x/use_php@v1/mod.ts"
7 | },
8 | "remote": {
9 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/PhpBase.mjs": "9301981d3dea95f718d6028c10f8f49caffdc1a5081f4970b386ded55080243c",
10 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/PhpWorker.mjs": "fc531908df43bf3580c79c8ddb50e14f1746402938beb17f63dd70097f2a982f",
11 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/php-worker.mjs": "a3dfdd0091dc884e3788a52375f147cc2a3d0759102ccce07c889154d71ce593",
12 | "https://deno.land/x/hono@v3.10.0-rc.1/client/client.ts": "ff340f58041203879972dd368b011ed130c66914f789826610869a90603406bf",
13 | "https://deno.land/x/hono@v3.10.0-rc.1/client/index.ts": "3ff4cf246f3543f827a85a2c84d66a025ac350ee927613629bda47e854bfb7ba",
14 | "https://deno.land/x/hono@v3.10.0-rc.1/client/utils.ts": "053273c002963b549d38268a1b423ac8ca211a8028bdab1ed0b781a62aa5e661",
15 | "https://deno.land/x/hono@v3.10.0-rc.1/compose.ts": "501c8ada9d9b0fb375e3c9954ce7c4922cf562bfec8e80744bac47020754034d",
16 | "https://deno.land/x/hono@v3.10.0-rc.1/context.ts": "cc79c2c40433a8ca6ae3c963d4e2de7f139982952057957839341ed93f260b8b",
17 | "https://deno.land/x/hono@v3.10.0-rc.1/helper/cookie/index.ts": "55ccd20bbd8d9a8bb2ecd998e90845c1d306c19027f54b3d1b89a5be35968b80",
18 | "https://deno.land/x/hono@v3.10.0-rc.1/hono-base.ts": "998ec910cbe0353407e95b93b7722fa1e39c23a06aa35552ab03441380fd4579",
19 | "https://deno.land/x/hono@v3.10.0-rc.1/hono.ts": "2cc4c292e541463a4d6f83edbcea58048d203e9564ae62ec430a3d466b49a865",
20 | "https://deno.land/x/hono@v3.10.0-rc.1/http-exception.ts": "6071df078b5f76d279684d52fe82a590f447a64ffe1b75eb5064d0c8a8d2d676",
21 | "https://deno.land/x/hono@v3.10.0-rc.1/mod.ts": "90114a97be9111b348129ad0143e764a64921f60dd03b8f3da529db98a0d3a82",
22 | "https://deno.land/x/hono@v3.10.0-rc.1/request.ts": "52330303dd7a3bf4f580fde0463ba608bc4c88a8b7b5edd7c1327064c7cf65ce",
23 | "https://deno.land/x/hono@v3.10.0-rc.1/router.ts": "39d573f48baee429810cd583c931dd44274273c30804d538c86967d310ea4ab5",
24 | "https://deno.land/x/hono@v3.10.0-rc.1/router/linear-router/index.ts": "8a2a7144c50b1f4a92d9ee99c2c396716af144c868e10608255f969695efccd0",
25 | "https://deno.land/x/hono@v3.10.0-rc.1/router/linear-router/router.ts": "bc63e8b5bc1dabc815306d50bebd1bb5877ffa3936ba2ad7550d093c95ee6bd1",
26 | "https://deno.land/x/hono@v3.10.0-rc.1/router/pattern-router/index.ts": "304a66c50e243872037ed41c7dd79ed0c89d815e17e172e7ad7cdc4bc07d3383",
27 | "https://deno.land/x/hono@v3.10.0-rc.1/router/pattern-router/router.ts": "a9a5a2a182cce8c3ae82139892cc0502be7dd8f579f31e76d0302b19b338e548",
28 | "https://deno.land/x/hono@v3.10.0-rc.1/router/reg-exp-router/index.ts": "52755829213941756159b7a963097bafde5cc4fc22b13b1c7c9184dc0512d1db",
29 | "https://deno.land/x/hono@v3.10.0-rc.1/router/reg-exp-router/node.ts": "5b3fb80411db04c65df066e69fedb2c8c0844753c2633d703336de84d569252c",
30 | "https://deno.land/x/hono@v3.10.0-rc.1/router/reg-exp-router/router.ts": "fbe8917aa24fe25d0208bfa82ce7f49ba0507f9ae158d4d0c177f6a061b0a561",
31 | "https://deno.land/x/hono@v3.10.0-rc.1/router/reg-exp-router/trie.ts": "852ce7207e6701e47fa30889a0d2b8bfcd56d8862c97e7bc9831e0a64bd8835f",
32 | "https://deno.land/x/hono@v3.10.0-rc.1/router/smart-router/index.ts": "74f9b4fe15ea535900f2b9b048581915f12fe94e531dd2b0032f5610e61c3bef",
33 | "https://deno.land/x/hono@v3.10.0-rc.1/router/smart-router/router.ts": "71979c06b32b093960a6e8efc4c185e558f280bff18846b8b1cdc757ade6ff99",
34 | "https://deno.land/x/hono@v3.10.0-rc.1/router/trie-router/index.ts": "3eb75e7f71ba81801631b30de6b1f5cefb2c7239c03797e2b2cbab5085911b41",
35 | "https://deno.land/x/hono@v3.10.0-rc.1/router/trie-router/node.ts": "3af15fa9c9994a8664a2b7a7c11233504b5bb9d4fcf7bb34cf30d7199052c39f",
36 | "https://deno.land/x/hono@v3.10.0-rc.1/router/trie-router/router.ts": "54ced78d35676302c8fcdda4204f7bdf5a7cc907fbf9967c75674b1e394f830d",
37 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/body.ts": "7a16a6656331a96bcae57642f8d5e3912bd361cbbcc2c0d2157ecc3f218f7a92",
38 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/buffer.ts": "9066a973e64498cb262c7e932f47eed525a51677b17f90893862b7279dc0773e",
39 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/cookie.ts": "19920ba6756944aae1ad8585c3ddeaa9df479733f59d05359db096f7361e5e4b",
40 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/crypto.ts": "bda0e141bbe46d3a4a20f8fbcb6380d473b617123d9fdfa93e4499410b537acc",
41 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/stream.ts": "1789dcc73c5b0ede28f83d7d34e47ae432c20e680907cb3275a9c9187f293983",
42 | "https://deno.land/x/hono@v3.10.0-rc.1/utils/url.ts": "5fc3307ef3cb2e6f34ec2a03e3d7f2126c6a9f5f0eab677222df3f0e40bd7567",
43 | "https://deno.land/x/hono@v3.10.0-rc.1/validator/index.ts": "6c986e8b91dcf857ecc8164a506ae8eea8665792a4ff7215471df669c632ae7c",
44 | "https://deno.land/x/hono@v3.10.0-rc.1/validator/validator.ts": "afa5e52495e0996fbba61996736fab5c486590d72d376f809e9f9ff4e0c463e9",
45 | "https://deno.land/x/jsx@v0.1.5/mod.ts": "24bb89837fda59c53c12a3c0e464378ca6de9b261dec1df57ba640b1cfed9611",
46 | "https://deno.land/x/use_php@v1/lib/bootstrap.ts": "1eabfd11cb2ca462d2a8540ad3a634bc2b66260c30f32ad906141107ecab5f49",
47 | "https://deno.land/x/use_php@v1/lib/usephp.tsx": "f38cd6da586f870a85a2a02a3f2a906b7735124b72bfd028eef638158bb207c3",
48 | "https://deno.land/x/use_php@v1/mod.ts": "b8e9949aa50476345bf036c99f7870cc451dafd50d922d65bc6d839c6a9e55ab"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/examples/oak/deno.lock:
--------------------------------------------------------------------------------
1 | {
2 | "version": "3",
3 | "redirects": {
4 | "https://deno.land/x/jsx/mod.ts": "https://deno.land/x/jsx@v0.1.5/mod.ts",
5 | "https://deno.land/x/oak/mod.ts": "https://deno.land/x/oak@v12.6.1/mod.ts",
6 | "https://deno.land/x/use_php/mod.ts": "https://deno.land/x/use_php@v1/mod.ts"
7 | },
8 | "remote": {
9 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/PhpBase.mjs": "9301981d3dea95f718d6028c10f8f49caffdc1a5081f4970b386ded55080243c",
10 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/PhpWorker.mjs": "fc531908df43bf3580c79c8ddb50e14f1746402938beb17f63dd70097f2a982f",
11 | "https://cdn.jsdelivr.net/npm/php-wasm@0.0.0-esm-preview-45/php-worker.mjs": "a3dfdd0091dc884e3788a52375f147cc2a3d0759102ccce07c889154d71ce593",
12 | "https://deno.land/std@0.200.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3",
13 | "https://deno.land/std@0.200.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee",
14 | "https://deno.land/std@0.200.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56",
15 | "https://deno.land/std@0.200.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8",
16 | "https://deno.land/std@0.200.0/bytes/bytes_list.ts": "31d664f4d42fa922066405d0e421c56da89d751886ee77bbe25a88bf0310c9d0",
17 | "https://deno.land/std@0.200.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2",
18 | "https://deno.land/std@0.200.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219",
19 | "https://deno.land/std@0.200.0/bytes/ends_with.ts": "4228811ebc71615d27f065c54b5e815ec1972538772b0f413c0efe05245b472e",
20 | "https://deno.land/std@0.200.0/bytes/equals.ts": "fc190cce412b2136979181b163ec7e05f7e7a947e39102eee4b8c0d62519ddf9",
21 | "https://deno.land/std@0.200.0/bytes/includes_needle.ts": "76a8163126fb2f8bf86fd7f22192c3bb04bf6a20b987a095127c2ca08adf3ba6",
22 | "https://deno.land/std@0.200.0/bytes/index_of_needle.ts": "9c06610e9611b5647ac25952e71a22e09227c9f1b8cbeeb33399bf8bf8a7f649",
23 | "https://deno.land/std@0.200.0/bytes/last_index_of_needle.ts": "f1602f221c3b678bc4f1e1c88a70a15ab7da32c21751dbbc6c957c956951d784",
24 | "https://deno.land/std@0.200.0/bytes/mod.ts": "e869bba1e7a2e3a9cc6c2d55471888429a544e70a840c087672e656e7ba21815",
25 | "https://deno.land/std@0.200.0/bytes/repeat.ts": "6f5e490d8d72bcbf8d84a6bb04690b9b3eb5822c5a11687bca73a2318a842294",
26 | "https://deno.land/std@0.200.0/bytes/starts_with.ts": "3e607a70c9c09f5140b7a7f17a695221abcc7244d20af3eb47ccbb63f5885135",
27 | "https://deno.land/std@0.200.0/crypto/keystack.ts": "877ab0f19eb7d37ad6495190d3c3e39f58e9c52e0b6a966f82fd6df67ca55f90",
28 | "https://deno.land/std@0.200.0/crypto/timing_safe_equal.ts": "7b0a4d2ef1c17590e0ad6c0cb1776369d2ba80cd99e945005e117851690507fe",
29 | "https://deno.land/std@0.200.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d",
30 | "https://deno.land/std@0.200.0/encoding/base64url.ts": "2ed4ba122b20fedf226c5d337cf22ee2024fa73a8f85d915d442af7e9ce1fae1",
31 | "https://deno.land/std@0.200.0/http/_negotiation/common.ts": "14d1a52427ab258a4b7161cd80e1d8a207b7cc64b46e911780f57ead5f4323c6",
32 | "https://deno.land/std@0.200.0/http/_negotiation/encoding.ts": "ff747d107277c88cb7a6a62a08eeb8d56dad91564cbcccb30694d5dc126dcc53",
33 | "https://deno.land/std@0.200.0/http/_negotiation/language.ts": "7bcddd8db3330bdb7ce4fc00a213c5547c1968139864201efd67ef2d0d51887d",
34 | "https://deno.land/std@0.200.0/http/_negotiation/media_type.ts": "58847517cd549384ad677c0fe89e0a4815be36fe7a303ea63cee5f6a1d7e1692",
35 | "https://deno.land/std@0.200.0/http/cookie_map.ts": "64601025a7d24c3ebd80a169ccc99145bdbfc60606935348e1d4366d0bf9010d",
36 | "https://deno.land/std@0.200.0/http/etag.ts": "807382795850cde5c437c74bcc09392bc0fc56de348fc1271f383f4b28935b9f",
37 | "https://deno.land/std@0.200.0/http/http_errors.ts": "bbda34819060af86537cecc9dc8e045f877130808b7e7acde4197c5328e852d0",
38 | "https://deno.land/std@0.200.0/http/http_status.ts": "8a7bcfe3ac025199ad804075385e57f63d055b2aed539d943ccc277616d6f932",
39 | "https://deno.land/std@0.200.0/http/method.ts": "e66c2a015cb46c21ab0bb3589aa4fca43143a506cb324ffdfd42d2edef7bc0c4",
40 | "https://deno.land/std@0.200.0/http/negotiation.ts": "46e74a6bad4b857333a58dc5b50fe8e5a4d5267e97292293ea65f980bd918086",
41 | "https://deno.land/std@0.200.0/http/server_sent_event.ts": "29f707c1afa5278ac0315ac115ee679d6b93596d5af3fad5ef33f04254ca76c1",
42 | "https://deno.land/std@0.200.0/http/user_agent.ts": "35d3c70d0926b0e121b8c1bbc324b3522479158acaa4f0c43928362b7bf4e6f4",
43 | "https://deno.land/std@0.200.0/io/buf_reader.ts": "2bccff0878537ef201c5051fc0db0ce8196388c5ea69d2be6be1900fe48c5f4b",
44 | "https://deno.land/std@0.200.0/io/buf_writer.ts": "48c33c8f00b61dcbc7958706741cec8e59810bd307bc6a326cbd474fe8346dfd",
45 | "https://deno.land/std@0.200.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793",
46 | "https://deno.land/std@0.200.0/io/copy_n.ts": "c055296297b9d4897d90d1ac056b072dc02614e60c67f438e23fbce052ea4c69",
47 | "https://deno.land/std@0.200.0/io/limited_reader.ts": "6c9a216f8eef39c1ee2a6b37a29372c8fc63455b2eeb91f06d9646f8f759fc8b",
48 | "https://deno.land/std@0.200.0/io/mod.ts": "2665bcccc1fd6e8627cca167c3e92aaecbd9897556b6f69e6d258070ef63fd9b",
49 | "https://deno.land/std@0.200.0/io/multi_reader.ts": "9c2a0a31686c44b277e16da1d97b4686a986edcee48409b84be25eedbc39b271",
50 | "https://deno.land/std@0.200.0/io/read_delim.ts": "c02b93cc546ae8caad8682ae270863e7ace6daec24c1eddd6faabc95a9d876a3",
51 | "https://deno.land/std@0.200.0/io/read_int.ts": "7cb8bcdfaf1107586c3bacc583d11c64c060196cb070bb13ae8c2061404f911f",
52 | "https://deno.land/std@0.200.0/io/read_lines.ts": "c526c12a20a9386dc910d500f9cdea43cba974e853397790bd146817a7eef8cc",
53 | "https://deno.land/std@0.200.0/io/read_long.ts": "f0aaa420e3da1261c5d33c5e729f09922f3d9fa49f046258d4ff7a00d800c71e",
54 | "https://deno.land/std@0.200.0/io/read_range.ts": "46a2263d0f8369b6d9abb0b25d99ceb65ff08d621fc57bcc53832e6979295043",
55 | "https://deno.land/std@0.200.0/io/read_short.ts": "805cb329574b850b84bf14a92c052c59b5977a492cd780c41df8ad40826c1a20",
56 | "https://deno.land/std@0.200.0/io/read_string_delim.ts": "5dc9f53bdf78e7d4ee1e56b9b60352238ab236a71c3e3b2a713c3d78472a53ce",
57 | "https://deno.land/std@0.200.0/io/slice_long_to_bytes.ts": "48d9bace92684e880e46aa4a2520fc3867f9d7ce212055f76ecc11b22f9644b7",
58 | "https://deno.land/std@0.200.0/io/string_reader.ts": "da0f68251b3d5b5112485dfd4d1b1936135c9b4d921182a7edaf47f74c25cc8f",
59 | "https://deno.land/std@0.200.0/io/string_writer.ts": "8a03c5858c24965a54c6538bed15f32a7c72f5704a12bda56f83a40e28e5433e",
60 | "https://deno.land/std@0.200.0/media_types/_db.ts": "7606d83e31f23ce1a7968cbaee852810c2cf477903a095696cdc62eaab7ce570",
61 | "https://deno.land/std@0.200.0/media_types/_util.ts": "916efbd30b6148a716f110e67a4db29d6949bf4048997b754415dd7e42c52378",
62 | "https://deno.land/std@0.200.0/media_types/content_type.ts": "ad98a5aa2d95f5965b2796072284258710a25e520952376ed432b0937ce743bc",
63 | "https://deno.land/std@0.200.0/media_types/extension.ts": "a7cd28c9417143387cdfed27d4e8607ebcf5b1ec27eb8473d5b000144689fe65",
64 | "https://deno.land/std@0.200.0/media_types/extensions_by_type.ts": "43806d6a52a0d6d965ada9d20e60a982feb40bc7a82268178d94edb764694fed",
65 | "https://deno.land/std@0.200.0/media_types/format_media_type.ts": "f5e1073c05526a6f5a516ac5c5587a1abd043bf1039c71cde1166aa4328c8baf",
66 | "https://deno.land/std@0.200.0/media_types/get_charset.ts": "18b88274796fda5d353806bf409eb1d2ddb3f004eb4bd311662c4cdd8ac173db",
67 | "https://deno.land/std@0.200.0/media_types/mod.ts": "d3f0b99f85053bc0b98ecc24eaa3546dfa09b856dc0bbaf60d8956d2cdd710c8",
68 | "https://deno.land/std@0.200.0/media_types/parse_media_type.ts": "8cb0144385c555c9ce81881b7cee3fbb746f23b4af988fecdb7bd01ef8cc35b1",
69 | "https://deno.land/std@0.200.0/media_types/type_by_extension.ts": "daa801eb0f11cdf199445d0f1b656cf116d47dcf9e5b85cc1e6b4469f5ee0432",
70 | "https://deno.land/std@0.200.0/media_types/vendor/mime-db.v1.52.0.ts": "6925bbcae81ca37241e3f55908d0505724358cda3384eaea707773b2c7e99586",
71 | "https://deno.land/std@0.200.0/path/_basename.ts": "057d420c9049821f983f784fd87fa73ac471901fb628920b67972b0f44319343",
72 | "https://deno.land/std@0.200.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0",
73 | "https://deno.land/std@0.200.0/path/_dirname.ts": "355e297236b2218600aee7a5301b937204c62e12da9db4b0b044993d9e658395",
74 | "https://deno.land/std@0.200.0/path/_extname.ts": "eaaa5aae1acf1f03254d681bd6a8ce42a9cb5b7ff2213a9d4740e8ab31283664",
75 | "https://deno.land/std@0.200.0/path/_format.ts": "4a99270d6810f082e614309164fad75d6f1a483b68eed97c830a506cc589f8b4",
76 | "https://deno.land/std@0.200.0/path/_from_file_url.ts": "7e4e5626089785adddb061f1b9f4932d6b21c7df778e7449531a11e32048245c",
77 | "https://deno.land/std@0.200.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b",
78 | "https://deno.land/std@0.200.0/path/_is_absolute.ts": "05dac10b5e93c63198b92e3687baa2be178df5321c527dc555266c0f4f51558c",
79 | "https://deno.land/std@0.200.0/path/_join.ts": "fd78555bc34d5f188918fc7018dfe8fe2df5bbad94a3b30a433666c03934d77f",
80 | "https://deno.land/std@0.200.0/path/_normalize.ts": "a19ec8706b2707f9dd974662a5cd89fad438e62ab1857e08b314a8eb49a34d81",
81 | "https://deno.land/std@0.200.0/path/_parse.ts": "0f9b0ff43682dd9964eb1c4398610c4e165d8db9d3ac9d594220217adf480cfa",
82 | "https://deno.land/std@0.200.0/path/_relative.ts": "27bdeffb5311a47d85be26d37ad1969979359f7636c5cd9fcf05dcd0d5099dc5",
83 | "https://deno.land/std@0.200.0/path/_resolve.ts": "7a3616f1093735ed327e758313b79c3c04ea921808ca5f19ddf240cb68d0adf6",
84 | "https://deno.land/std@0.200.0/path/_to_file_url.ts": "739bfda583598790b2e77ce227f2bb618f6ebdb939788cea47555b43970ec58c",
85 | "https://deno.land/std@0.200.0/path/_to_namespaced_path.ts": "0d5f4caa2ed98ef7a8786286df6af804b50e38859ae897b5b5b4c8c5930a75c8",
86 | "https://deno.land/std@0.200.0/path/_util.ts": "4e191b1bac6b3bf0c31aab42e5ca2e01a86ab5a0d2e08b75acf8585047a86221",
87 | "https://deno.land/std@0.200.0/path/basename.ts": "6f08fbb90dbfcf320765b3abb01f995b1723f75e2534acfd5380e202c802a3aa",
88 | "https://deno.land/std@0.200.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000",
89 | "https://deno.land/std@0.200.0/path/dirname.ts": "098996822a31b4c46e1eb52a19540d3c6f9f54b772fc8a197939eeabc29fca2f",
90 | "https://deno.land/std@0.200.0/path/extname.ts": "9b83c62fd16505739541f7a3ab447d8972da39dbf668d47af2f93206c2480893",
91 | "https://deno.land/std@0.200.0/path/format.ts": "cb22f95cc7853d590b87708cc9441785e760d711188facff3d225305a8213aca",
92 | "https://deno.land/std@0.200.0/path/from_file_url.ts": "a6221cfc928928ec4d9786d767dfac98fa2ab746af0786446c9834a07b98817e",
93 | "https://deno.land/std@0.200.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1",
94 | "https://deno.land/std@0.200.0/path/is_absolute.ts": "6b3d36352eb7fa29edb53f9e7b09b1aeb022a3c5465764f6cc5b8c41f9736197",
95 | "https://deno.land/std@0.200.0/path/join.ts": "4a2867ff2f3c81ffc9eb3d56dade16db6f8bd3854f269306d23dad4115089c84",
96 | "https://deno.land/std@0.200.0/path/mod.ts": "7765507696cb321994cdacfc19ee3ba61e8e3ebf4bd98fa75a276cf5dc18ce2a",
97 | "https://deno.land/std@0.200.0/path/normalize.ts": "7d992cd262b2deefa842d93a8ba2ed51f3949ba595b1d07f627ac2cddbc74808",
98 | "https://deno.land/std@0.200.0/path/parse.ts": "031fe488b3497fb8312fc1dc3c3d6c2d80707edd9c661e18ee9fd20f95edf322",
99 | "https://deno.land/std@0.200.0/path/posix.ts": "0a1c1952d132323a88736d03e92bd236f3ed5f9f079e5823fae07c8d978ee61b",
100 | "https://deno.land/std@0.200.0/path/relative.ts": "7db80c5035016174267da16321a742d76e875215c317859a383b12f413c6f5d6",
101 | "https://deno.land/std@0.200.0/path/resolve.ts": "103b62207726a27f28177f397008545804ecb20aaf00623af1f622b18cd80b9f",
102 | "https://deno.land/std@0.200.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1",
103 | "https://deno.land/std@0.200.0/path/to_file_url.ts": "dd32f7a01bbf3b15b5df46796659984b372973d9b2d7d59bcf0eb990763a0cb5",
104 | "https://deno.land/std@0.200.0/path/to_namespaced_path.ts": "4e643ab729bf49ccdc166ad48d2de262ff462938fcf2a44a4425588f4a0bd690",
105 | "https://deno.land/std@0.200.0/path/win32.ts": "8b3f80ef7a462511d5e8020ff490edcaa0a0d118f1b1e9da50e2916bdd73f9dd",
106 | "https://deno.land/std@0.200.0/streams/_common.ts": "f45cba84f0d813de3326466095539602364a9ba521f804cc758f7a475cda692d",
107 | "https://deno.land/std@0.200.0/streams/buffer.ts": "6cd773d22cf21bb988a98cc551b5abfc4c3b03516f93eaa3fb6f2f6e16032deb",
108 | "https://deno.land/std@0.200.0/streams/byte_slice_stream.ts": "c46d7c74836fc8c1a9acd9fe211cbe1bbaaee1b36087c834fb03af4991135c3a",
109 | "https://deno.land/std@0.200.0/streams/copy.ts": "75cbc795ff89291df22ddca5252de88b2e16d40c85d02840593386a8a1454f71",
110 | "https://deno.land/std@0.200.0/streams/delimiter_stream.ts": "f69e849b3d1f59f02424497273f411105a6f76a9f13da92aeeb9a2d554236814",
111 | "https://deno.land/std@0.200.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1",
112 | "https://deno.land/std@0.200.0/streams/iterate_reader.ts": "bbec1d45c2df2c0c5920bad0549351446fdc8e0886d99e95959b259dbcdb6072",
113 | "https://deno.land/std@0.200.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048",
114 | "https://deno.land/std@0.200.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38",
115 | "https://deno.land/std@0.200.0/streams/merge_readable_streams.ts": "dc2db0cbf1b14d999aa2aa2a2a1ba24ce58953878f29845ed9319321d0a01fab",
116 | "https://deno.land/std@0.200.0/streams/mod.ts": "c07ec010e700b9ea887dc36ca08729828bc7912f711e4054e24d33fd46282252",
117 | "https://deno.land/std@0.200.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be",
118 | "https://deno.land/std@0.200.0/streams/readable_stream_from_iterable.ts": "a355e97ba8671a4611ae9671c1f33c4a7e6a1b42fbdc9a399338ac3d6f875364",
119 | "https://deno.land/std@0.200.0/streams/readable_stream_from_reader.ts": "bfc416c4576a30aac6b9af22c9dc292c20c6742141ee7c55b5e85460beb0c54e",
120 | "https://deno.land/std@0.200.0/streams/reader_from_iterable.ts": "55f68110dce3f8f2c87b834d95f153bc904257fc65175f9f2abe78455cb8047c",
121 | "https://deno.land/std@0.200.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73",
122 | "https://deno.land/std@0.200.0/streams/text_delimiter_stream.ts": "20e680ab8b751390e359288ce764f9c47d164af11a263870746eeca4bc7d976b",
123 | "https://deno.land/std@0.200.0/streams/text_line_stream.ts": "0f2c4b33a5fdb2476f2e060974cba1347cefe99a4af33c28a57524b1a34750fa",
124 | "https://deno.land/std@0.200.0/streams/to_transform_stream.ts": "89fd367cafb3b6d80d61e2f4f1fcf66cc75723ecee8d474b495f022264ec6c3b",
125 | "https://deno.land/std@0.200.0/streams/writable_stream_from_writer.ts": "56fff5c82fb736fdd669b567cc0b2bbbe0351002cd13254eae26c366e2bed89a",
126 | "https://deno.land/std@0.200.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998",
127 | "https://deno.land/std@0.200.0/streams/writer_from_stream_writer.ts": "07c7ee025151a190f37fc42cbb01ff93afc949119ebddc6e0d0df14df1bf6950",
128 | "https://deno.land/std@0.200.0/streams/zip_readable_streams.ts": "a9d81aa451240f79230add674809dbee038d93aabe286e2d9671e66591fc86ca",
129 | "https://deno.land/x/jsx@v0.1.5/mod.ts": "24bb89837fda59c53c12a3c0e464378ca6de9b261dec1df57ba640b1cfed9611",
130 | "https://deno.land/x/oak@v12.6.1/application.ts": "3028d3f6fa5ee743de013881550d054372c11d83c45099c2d794033786d27008",
131 | "https://deno.land/x/oak@v12.6.1/body.ts": "1899761b97fc9d776f3710b2637fb047ba29b968609afc6c0e5219b1108e703c",
132 | "https://deno.land/x/oak@v12.6.1/buf_reader.ts": "26640736541598dbd9f2b84a9d0595756afff03c9ca55b66eef1911f7798b56d",
133 | "https://deno.land/x/oak@v12.6.1/content_disposition.ts": "8b8c3cb2fba7138cd5b7f82fc3b5ea39b33db924a824b28261659db7e164621e",
134 | "https://deno.land/x/oak@v12.6.1/context.ts": "895a2d40186b89c28ba3947bf08a9335f1a11fc33133f760082536b74c53d1ca",
135 | "https://deno.land/x/oak@v12.6.1/deps.ts": "267ef76c25592101fe1f6c6d7730664015a9179c974da4f7441297d9367a9514",
136 | "https://deno.land/x/oak@v12.6.1/etag.ts": "32e47726b41698aefdd71faac5aaf2907c9bdd41ef18a7693863be4f8fee115d",
137 | "https://deno.land/x/oak@v12.6.1/forwarded.ts": "e656f96a85574e2a6ee54dc35efc9f72d543c9ae0923760ef426ee7369eef01c",
138 | "https://deno.land/x/oak@v12.6.1/headers.ts": "769fd042d34fbcd5667cbd745b5c65d335cc8430e822dbf1f87d65313cab4b47",
139 | "https://deno.land/x/oak@v12.6.1/helpers.ts": "6b03c6a2be06ec775d54449e442a2bac234aa952948ca758356eab6dc87af618",
140 | "https://deno.land/x/oak@v12.6.1/http_server_native.ts": "98e12c50a959553cfc144bc00999c969fa69ca781cbd96bec563f55691ab82db",
141 | "https://deno.land/x/oak@v12.6.1/http_server_native_request.ts": "552b174b5e13e92de8897d5b6f716b1e5a53543115481d65a651a41e4ca29ec9",
142 | "https://deno.land/x/oak@v12.6.1/isMediaType.ts": "62d638abcf837ece3a8f07a4b7ca59794135cb0d4b73194c7d5837efd4161005",
143 | "https://deno.land/x/oak@v12.6.1/mediaTyper.ts": "042b853fc8e9c3f6c628dd389e03ef481552bf07242efc3f8a1af042102a6105",
144 | "https://deno.land/x/oak@v12.6.1/middleware.ts": "c7f7a0424a6dd99a00e4b8d7d6e131efc0facc8dea781845d713b63df8ef1862",
145 | "https://deno.land/x/oak@v12.6.1/middleware/proxy.ts": "6f2799cf60d926e7a8d13ff757a59d7f0f930407db7ee9b81e7c064138eb89ff",
146 | "https://deno.land/x/oak@v12.6.1/mod.ts": "f6aa47ad1b6099470c9a884cccad9d3ac0fd242ba940896291ab76cd26cf554b",
147 | "https://deno.land/x/oak@v12.6.1/multipart.ts": "1484e01b98f5135f2aa09f7d0ce1e7be39109bf9f045ac660e941619d04e3d29",
148 | "https://deno.land/x/oak@v12.6.1/range.ts": "1ca15fc1ac21c650c34e6997a75af2af9d9d8eb6fe2d5d1dadeac3dfd4a9c152",
149 | "https://deno.land/x/oak@v12.6.1/request.ts": "32409827e285ee65889b22bbaaea5d6b280258124c2e9a4f724baa8e6d6375b7",
150 | "https://deno.land/x/oak@v12.6.1/response.ts": "094d950a5158f5b3446ca8a7b6e975dd23afb42b38c38517cc2f41dc75b16b4c",
151 | "https://deno.land/x/oak@v12.6.1/router.ts": "0f53d6249f9e8f89f2522b2b810b9302d0f22593c184b16b24b03bf2b7d42ea1",
152 | "https://deno.land/x/oak@v12.6.1/send.ts": "5ec49f106294593f468317a0c885da4f3274bf6d0fe9e16a7304391730b4f4fb",
153 | "https://deno.land/x/oak@v12.6.1/structured_clone.ts": "c3888b14d1eec558345bfbf13d0993d59bd45aaa8588444e35dd558c3a921cd8",
154 | "https://deno.land/x/oak@v12.6.1/testing.ts": "37d684d57bb8e5150fb5eb2677e66b04dcb422709cf2c5a74c1df94d52aa02e2",
155 | "https://deno.land/x/oak@v12.6.1/util.ts": "0a3fdffb114859c2de84e1783efa3a544af4d2af8c6f08e0d25655de9d3e69bb",
156 | "https://deno.land/x/path_to_regexp@v6.2.1/index.ts": "894060567837bae8fc9c5cbd4d0a05e9024672083d5883b525c031eea940e556",
157 | "https://deno.land/x/use_php@v1/lib/bootstrap.ts": "1eabfd11cb2ca462d2a8540ad3a634bc2b66260c30f32ad906141107ecab5f49",
158 | "https://deno.land/x/use_php@v1/lib/usephp.tsx": "f38cd6da586f870a85a2a02a3f2a906b7735124b72bfd028eef638158bb207c3",
159 | "https://deno.land/x/use_php@v1/mod.ts": "b8e9949aa50476345bf036c99f7870cc451dafd50d922d65bc6d839c6a9e55ab"
160 | }
161 | }
162 |
--------------------------------------------------------------------------------