mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-06 12:57:46 +00:00
* Revert "Revert "[examples] Add manifest.json"" This reverts commitc65336e63b. * Revert "Revert "Do not use now-examples anymore"" This reverts commitac72e944a7. * Update nowignore * Fix join * Fix JSON * Fix header * Replace manifest.json with @now/frameworks * Adjust readmes * Adjust .nowignore * Update scully * Fix description * Update examples/create-react-app/src/App.js Co-Authored-By: Shu Ding <ds303077135@gmail.com> * Update readme * Add websites * Use https * Adjust example URL * Change order Co-authored-by: Shu Ding <ds303077135@gmail.com>
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import fs from 'fs';
|
|
// @ts-ignore
|
|
import tar from 'tar-fs';
|
|
import { extract } from '../../_lib/examples/extract';
|
|
import { NowRequest, NowResponse } from '@now/node';
|
|
import { withApiHandler } from '../../_lib/util/with-api-handler';
|
|
|
|
const TMP_DIR = '/tmp';
|
|
|
|
function isDirectory(path: string) {
|
|
return fs.existsSync(path) && fs.lstatSync(path).isDirectory();
|
|
}
|
|
|
|
function notFound(res: NowResponse, message: string) {
|
|
return res.status(404).send({
|
|
error: {
|
|
code: 'not_found',
|
|
message
|
|
}
|
|
});
|
|
}
|
|
|
|
function streamToBuffer(stream: any) {
|
|
return new Promise((resolve, reject) => {
|
|
const buffers: any[] = [];
|
|
stream.on('error', (err: any) => {
|
|
reject(err);
|
|
});
|
|
stream.on('data', (b: any) => {
|
|
buffers.push(b);
|
|
});
|
|
stream.on('end', () => {
|
|
resolve(Buffer.concat(buffers));
|
|
});
|
|
});
|
|
}
|
|
|
|
export default withApiHandler(async function(req: NowRequest, res: NowResponse) {
|
|
const ext = '.tar.gz';
|
|
const { segment = '' } = req.query;
|
|
|
|
if (Array.isArray(segment) || !segment.endsWith(ext)) {
|
|
return notFound(res, `Missing ${ext} suffix.`);
|
|
}
|
|
|
|
const example = segment.slice(0, -ext.length);
|
|
let directory;
|
|
|
|
if (Number(req.query.version) === 1) {
|
|
// The old cli is pinned to a specific commit hash
|
|
await extract('https://github.com/zeit/now-examples/archive/7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3.zip', TMP_DIR);
|
|
directory = `${TMP_DIR}/now-examples-7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3/${example}`;
|
|
} else {
|
|
await extract('https://github.com/zeit/now/archive/master.zip', TMP_DIR);
|
|
directory = `${TMP_DIR}/now-master/examples/${example}`;
|
|
}
|
|
|
|
if (!isDirectory(directory)) {
|
|
return notFound(res, `Example '${example}' was not found.`);
|
|
}
|
|
|
|
const stream = tar.pack(directory);
|
|
return res.send(await streamToBuffer(stream));
|
|
});
|