vercel-deno-dev
Advanced tools
Comparing version 0.1.0-0f00b2f5b8c26aa653e998a23e5d8dd261aa7320 to 0.1.0-0ffeffdf98c123f2dc878968ba6b959ffc2e3491
import { NowRequest, NowRequestCookies, NowRequestQuery } from "./nowHandler.ts"; | ||
import { getCookies } from "https://deno.land/std@0.55.0/http/cookie.ts"; | ||
import { getCookies } from "https://deno.land/std/http/cookie.ts"; | ||
@@ -4,0 +4,0 @@ export function setLazyProp<T>(req: NowRequest, prop: string, getter: () => T) { |
@@ -1,3 +0,3 @@ | ||
import { ServerRequest, Response } from 'https://deno.land/std@0.55.0/http/server.ts'; | ||
import { Cookies } from 'https://deno.land/std@0.55.0/http/cookie.ts'; | ||
import { ServerRequest, Response } from 'https://deno.land/std/http/server.ts'; | ||
import { Cookies } from 'https://deno.land/std/http/cookie.ts'; | ||
export type NowRequestCookies = Cookies; | ||
@@ -4,0 +4,0 @@ |
import * as base64 from 'https://deno.land/x/base64/mod.ts'; | ||
import { ServerRequest } from 'https://deno.land/std@0.55.0/http/server.ts'; | ||
import { BufReader, BufWriter } from 'https://deno.land/std@0.55.0/io/bufio.ts'; | ||
import { TextProtoReader } from 'https://deno.land/std@0.55.0/textproto/mod.ts'; | ||
import { ServerRequest } from 'https://deno.land/std/http/server.ts'; | ||
import { BufReader, BufWriter } from 'https://deno.land/std/io/bufio.ts'; | ||
import { TextProtoReader } from 'https://deno.land/std/textproto/mod.ts'; | ||
import { Context, APIGatewayProxyEvent } from 'https://deno.land/x/lambda/mod.ts'; | ||
@@ -51,3 +51,4 @@ import { NowApiHandler, NowRequest, NowResponse, NowRequestCookies, NowRequestQuery } from './nowHandler.ts'; | ||
const input = new Deno.Buffer(base64.toUint8Array(data.body || '')); | ||
const output = new Deno.Buffer(); | ||
const output = new Deno.Buffer(new Uint8Array(6000000)); // maximum lambda file size | ||
const req:NowRequest = new ServerRequest(); | ||
@@ -59,5 +60,5 @@ req.r = new BufReader(input); | ||
req.url = data.path; | ||
req.proto = 'HTTP/1.1'; | ||
req.protoMinor = 1; | ||
req.protoMajor = 1; | ||
req.proto = 'HTTP/2.0'; | ||
req.protoMinor = 0; | ||
req.protoMajor = 2; | ||
@@ -89,11 +90,10 @@ for (const [name, value] of Object.entries(data.headers)) { | ||
// The actual output is raw HTTP message, | ||
// so we will parse it | ||
// - Headers ( statuscode default to 200 ) | ||
// - Message | ||
const bufr = new BufReader(output); | ||
// TODO: dynamically determine buffer size. | ||
// output.length has a mismatch size of a few hundret bytes compared to boy.bytlength. | ||
// not including size argument will make bufReader use default size 4096 Bytes. | ||
// console.log({outlen:output.length}) | ||
const bufr = new BufReader(output,output.length); | ||
const tp = new TextProtoReader(bufr); | ||
const firstLine = await tp.readLine() || 'HTTP/1.1 200 OK'; // e.g. "HTTP/1.1 200 OK" | ||
const firstLine = await tp.readLine() || 'HTTP/2.0 200 OK'; // e.g. "HTTP/1.1 200 OK" | ||
const statuscode = res ? res.status || 200 : parseInt(firstLine.split(' ', 2)[1], 10); // get statuscode either from res or req. | ||
@@ -106,5 +106,10 @@ const headers = await tp.readMIMEHeader() || new Headers(); | ||
const body = await bufr.readFull(new Uint8Array(bufr.buffered())); | ||
let buff = new Uint8Array(bufr.size()); | ||
const size = await bufr.read(buff)||bufr.size(); | ||
const body = buff.slice(0,size); | ||
if (!body) throw new Deno.errors.UnexpectedEof(); | ||
// console.log({ | ||
// outlen:output.length, | ||
// bodylen:body.byteLength, | ||
// }) | ||
await req.finalize(); | ||
@@ -128,3 +133,3 @@ | ||
console.log("invoke Response") | ||
console.log({result,context}) | ||
console.log({result}) | ||
const res = await LambdaFetch(`invocation/${context.awsRequestId}/response`, { | ||
@@ -131,0 +136,0 @@ method: 'POST', |
@@ -8,3 +8,2 @@ "use strict"; | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const path_1 = __importDefault(require("path")); | ||
const util_1 = require("./util"); | ||
@@ -15,7 +14,7 @@ async function build(opts) { | ||
console.log("downloading source files"); | ||
const downloadedFiles = await build_utils_1.download(files, path_1.default.join(workPath, "src"), meta); | ||
const downloadedFiles = await build_utils_1.download(files, workPath, meta); | ||
// configure environment variable | ||
const denoFiles = await util_1.getdenoFiles(workPath, meta.isDev || false); | ||
const bootFiles = await util_1.getbootFiles(); | ||
const genFiles = await util_1.getgenFiles(opts, downloadedFiles, bootFiles, denoFiles); | ||
const bootFiles = await util_1.getbootFiles(workPath); | ||
const cacheFiles = await util_1.CacheEntryPoint(opts, downloadedFiles, denoFiles, bootFiles); | ||
// console.log({downloadedFiles, denoFiles,bootFiles,genFiles}) | ||
@@ -26,4 +25,4 @@ // Files directory: | ||
// - /gen | ||
// - /bin/deno | ||
// - src | ||
// - /bin/deno | ||
// - *.d.ts | ||
// - bootstrap | ||
@@ -36,5 +35,5 @@ // - runtime.ts | ||
...downloadedFiles, | ||
...denoFiles, | ||
...cacheFiles, | ||
...bootFiles, | ||
...genFiles, | ||
...denoFiles | ||
}, | ||
@@ -41,0 +40,0 @@ environment: { |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getgenFiles = exports.getbootFiles = exports.getdenoFiles = exports.parseDenoVersion = void 0; | ||
exports.CacheEntryPoint = exports.getbootFiles = exports.getdenoFiles = exports.parseDenoVersion = void 0; | ||
const dist_1 = require("@vercel/build-utils/dist"); | ||
@@ -12,3 +12,2 @@ const fs_extra_1 = require("fs-extra"); | ||
const execa_1 = __importDefault(require("execa")); | ||
const which_1 = __importDefault(require("which")); | ||
function parseDenoVersion(version) { | ||
@@ -26,3 +25,3 @@ if (version === "latest") | ||
exports.parseDenoVersion = parseDenoVersion; | ||
async function getdenoFiles(workPath, isdev) { | ||
async function getdenoFiles(workPath, isDev) { | ||
console.log("get deno binary files"); | ||
@@ -36,5 +35,14 @@ const DENO_LATEST = "latest"; | ||
const denozipPath = path_1.join(denobinDir, 'deno.zip'); | ||
let denoPath = path_1.join(denobinDir, 'deno'); | ||
if (!isdev) { | ||
let denoPath = ''; | ||
// check if local deno binary exists | ||
if (isDev) { | ||
try { | ||
const checklocalDeno = await execa_1.default('which', ['deno'], { stderr: 'ignore' }); | ||
denoPath = checklocalDeno.stdout; | ||
} | ||
catch (e) { } | ||
; | ||
} | ||
if (!denoPath) { | ||
try { | ||
console.log(`downloading deno ${DENO_VERSION}`); | ||
@@ -49,2 +57,3 @@ await execa_1.default("curl", ['--location', '--create-dirs', '--output', denozipPath, DOWNLOAD_URL], { stdio: 'pipe' }); | ||
await execa_1.default("rm", [denozipPath], { stdio: 'pipe' }); | ||
denoPath = path_1.join(denobinDir, 'deno'); | ||
} | ||
@@ -56,7 +65,4 @@ catch (err) { | ||
} | ||
else { | ||
// assume it is dev build | ||
else | ||
console.log('using local deno binary'); | ||
denoPath = await which_1.default("deno"); | ||
} | ||
return { | ||
@@ -70,8 +76,9 @@ ".deno/bin/deno": new dist_1.FileFsRef({ | ||
exports.getdenoFiles = getdenoFiles; | ||
async function getbootFiles() { | ||
async function getbootFiles(workPath) { | ||
console.log('get bootstrap'); | ||
const bootstrapPath = path_1.join(__dirname, "../boot/bootstrap"); | ||
let runtimefiles = await dist_1.glob("**/*.ts", { cwd: path_1.join(__dirname, '../boot') }, "boot"); | ||
const runtimeGlobs = await dist_1.glob("boot/*.ts", { cwd: path_1.join(__dirname, "../") }); | ||
const runtimeFiles = await dist_1.download(runtimeGlobs, workPath); | ||
return { | ||
...runtimefiles, | ||
...runtimeFiles, | ||
bootstrap: new dist_1.FileFsRef({ | ||
@@ -87,3 +94,3 @@ mode: 0o755, | ||
*/ | ||
async function getgenFiles(opts, downloadedFiles, bootFiles, denoFiles) { | ||
async function CacheEntryPoint(opts, downloadedFiles, denoFiles, bootFiles) { | ||
console.log(`Caching imports for ${opts.entrypoint}`); | ||
@@ -93,4 +100,4 @@ // TODO: create separate function to parse user ENV values | ||
const { workPath, entrypoint } = opts; | ||
const denobinPath = '.deno/bin/deno'; | ||
const runtimePath = 'boot/runtime.ts'; | ||
const denobinPath = '.deno/bin/deno'; | ||
const denobin = denoFiles[denobinPath].fsPath; | ||
@@ -100,3 +107,3 @@ const runtime = bootFiles[runtimePath].fsPath; | ||
if (denobin && runtime) { | ||
await execa_1.default(denobin, ['cache', ...tsconfig, entry, runtime], { | ||
await execa_1.default(denobin, ['cache', ...tsconfig, runtime, entry], { | ||
env: { DENO_DIR: path_1.join(workPath, '.deno/') }, | ||
@@ -115,3 +122,3 @@ stdio: 'ignore', | ||
if (dep.startsWith(workPathUri)) { | ||
const updated = `file:///var/task${dep.substring(workPathUri.length)}`; | ||
const updated = `file:///var/task/${dep.substring(workPathUri.length)}`; | ||
graph.deps[i] = updated; | ||
@@ -129,6 +136,6 @@ needsWrite = true; | ||
const aws_task = path_1.join(workPath, '.deno', 'gen', 'file', 'var', 'task'); | ||
fs_extra_1.move(cwd, path_1.join(workPath, aws_task)); | ||
return await dist_1.glob("**/*", { cwd: path_1.join(workPath, '.deno') }, '.deno'); | ||
await fs_extra_1.move(cwd, aws_task, { overwrite: true }); | ||
return await dist_1.glob(".deno/**", workPath); | ||
} | ||
exports.getgenFiles = getgenFiles; | ||
exports.CacheEntryPoint = CacheEntryPoint; | ||
async function* getGraphFiles(dir) { | ||
@@ -135,0 +142,0 @@ const files = await fs_extra_1.readdir(dir); |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.shouldServe = exports.config = exports.build = exports.version = void 0; | ||
exports.startDevServer = exports.config = exports.build = exports.version = void 0; | ||
const build_1 = __importDefault(require("./build")); | ||
@@ -12,5 +12,5 @@ exports.build = build_1.default; | ||
exports.config = config_1.default; | ||
const build_utils_1 = require("@vercel/build-utils"); | ||
Object.defineProperty(exports, "shouldServe", { enumerable: true, get: function () { return build_utils_1.shouldServe; } }); | ||
const version_1 = require("./version"); | ||
Object.defineProperty(exports, "version", { enumerable: true, get: function () { return version_1.version; } }); | ||
const version_1 = __importDefault(require("./version")); | ||
exports.version = version_1.default; | ||
const dev_1 = __importDefault(require("./dev")); | ||
exports.startDevServer = dev_1.default; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
//import { spawn } from 'child_process'; | ||
/// unused. | ||
function prepareCache({ files, entrypoint }) { | ||
@@ -13,11 +13,3 @@ console.log("Execute caching for deno"); | ||
console.log({ deno, entry, env }); | ||
// if (deno && entry) { | ||
// const ls = spawn(deno,['cache',entry], | ||
// { | ||
// env | ||
// }) | ||
// } | ||
// execute caching | ||
// TODO: add cache here | ||
} | ||
exports.default = prepareCache; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.version = void 0; | ||
exports.version = 3; | ||
exports.default = 3; |
{ | ||
"name": "vercel-deno-dev", | ||
"version": "0.1.0-0f00b2f5b8c26aa653e998a23e5d8dd261aa7320", | ||
"version": "0.1.0-0ffeffdf98c123f2dc878968ba6b959ffc2e3491", | ||
"description": "run deno on vercel", | ||
@@ -9,6 +9,4 @@ "main": "./dist/index", | ||
"dependencies": { | ||
"@vercel/build-utils": "^2.3.1", | ||
"fs-extra": "^9.0.1", | ||
"which": "^2.0.2", | ||
"execa": "4.0.2" | ||
"execa": "4.0.2", | ||
"fs-extra": "^9.0.1" | ||
}, | ||
@@ -22,3 +20,3 @@ "files": [ | ||
"@types/node": "^14.0.1", | ||
"@types/which": "^1.3.2", | ||
"@vercel/build-utils": "^2.3.1", | ||
"@vercel/frameworks": "^0.0.14", | ||
@@ -29,5 +27,7 @@ "@vercel/routing-utils": "^1.8.2", | ||
"scripts": { | ||
"build": "tsc && cp -R ./src/boot/ ./dist/boot/", | ||
"test": "rmdir /s /q .\\test\\dist_ress\\ || tsc --project ./test/tsconfig.json && node ./test/dist_ress/test.js" | ||
"clean": "if exist .\\dist\\ ( rmdir /s/q .\\dist\\ )", | ||
"build:win": "tsc && (robocopy .\\src\\boot .\\dist\\boot\\ * /s) ^& IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0", | ||
"build": "tsc && cp -R ./src/boot/. ./dist/boot/", | ||
"publish:win": "npm run clean && npm run build:win" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
25012
2
14
570
53
10
1
- Removed@vercel/build-utils@^2.3.1
- Removedwhich@^2.0.2
- Removed@vercel/build-utils@2.17.0(transitive)