Socket
Socket
Sign inDemoInstall

@foal/core

Package Overview
Dependencies
Maintainers
1
Versions
98
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@foal/core - npm Package Compare versions

Comparing version 0.5.0-alpha.2 to 0.6.0-alpha.1

lib/auth/authentication/authenticate.hook.d.ts

5

lib/auth/authentication/authenticator.interface.d.ts

@@ -1,5 +0,4 @@

import { AbstractUser } from '../models';
export interface IAuthenticator<User extends AbstractUser> {
validate(credentials: any): any;
import { AbstractUser } from '../entities';
export interface IAuthenticator<User extends AbstractUser = AbstractUser> {
authenticate(credentials: any): User | null | Promise<User | null>;
}

7

lib/auth/authentication/index.d.ts

@@ -1,5 +0,4 @@

export * from './common';
export * from './authenticate.pre-hook';
export * from './strategies';
export * from './authenticate.hook';
export * from './authenticator.interface';
export * from './login.controller-factory';
export * from './logout.controller-factory';
export * from './login.controller';

@@ -6,6 +6,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./common"));
__export(require("./authenticate.pre-hook"));
__export(require("./login.controller-factory"));
__export(require("./logout.controller-factory"));
__export(require("./strategies"));
__export(require("./authenticate.hook"));
__export(require("./login.controller"));
//# sourceMappingURL=index.js.map

@@ -1,2 +0,2 @@

export { restrictAccessToAdmin } from './restrict-access-to-admin.pre-hook';
export { restrictAccessToAuthenticated } from './restrict-access-to-authenticated.pre-hook';
export { PermissionRequired } from './permission-required.hook';
export { LoginRequired } from './login-required.hook';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var restrict_access_to_admin_pre_hook_1 = require("./restrict-access-to-admin.pre-hook");
exports.restrictAccessToAdmin = restrict_access_to_admin_pre_hook_1.restrictAccessToAdmin;
var restrict_access_to_authenticated_pre_hook_1 = require("./restrict-access-to-authenticated.pre-hook");
exports.restrictAccessToAuthenticated = restrict_access_to_authenticated_pre_hook_1.restrictAccessToAuthenticated;
var permission_required_hook_1 = require("./permission-required.hook");
exports.PermissionRequired = permission_required_hook_1.PermissionRequired;
var login_required_hook_1 = require("./login-required.hook");
exports.LoginRequired = login_required_hook_1.LoginRequired;
//# sourceMappingURL=index.js.map
export * from './authentication';
export * from './authorization';
export * from './models';
export * from './entities';

@@ -8,3 +8,3 @@ "use strict";

__export(require("./authorization"));
__export(require("./models"));
__export(require("./entities"));
//# sourceMappingURL=index.js.map

@@ -1,6 +0,5 @@

export * from './controller-factories';
export * from './controllers';
export * from './errors';
export * from './post-hooks';
export * from './pre-hooks';
export * from './hooks';
export * from './services';
export * from './utils';

@@ -6,8 +6,7 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./controller-factories"));
__export(require("./controllers"));
__export(require("./errors"));
__export(require("./post-hooks"));
__export(require("./pre-hooks"));
__export(require("./hooks"));
__export(require("./services"));
__export(require("./utils"));
//# sourceMappingURL=index.js.map

@@ -1,2 +0,2 @@

export { IModelService } from './model-service.interface';
export { ModelService } from './model.service';
export { ISerializer } from './serializer.interface';
export { EntitySerializer } from './entity-serializer.service';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var model_service_1 = require("./model.service");
exports.ModelService = model_service_1.ModelService;
var entity_serializer_service_1 = require("./entity-serializer.service");
exports.EntitySerializer = entity_serializer_service_1.EntitySerializer;
//# sourceMappingURL=index.js.map

@@ -0,3 +1,5 @@

export { controller } from './controller.util';
export { escapeProp } from './escape-prop';
export { escape } from './escape';
export { toNumber } from './to-number';
export { render } from './render.util';
export { subModule } from './sub-module.util';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var controller_util_1 = require("./controller.util");
exports.controller = controller_util_1.controller;
var escape_prop_1 = require("./escape-prop");

@@ -7,4 +9,6 @@ exports.escapeProp = escape_prop_1.escapeProp;

exports.escape = escape_1.escape;
var to_number_1 = require("./to-number");
exports.toNumber = to_number_1.toNumber;
var render_util_1 = require("./render.util");
exports.render = render_util_1.render;
var sub_module_util_1 = require("./sub-module.util");
exports.subModule = sub_module_util_1.subModule;
//# sourceMappingURL=index.js.map

@@ -11,3 +11,3 @@ export declare abstract class HttpResponse {

}
export declare function isHttpResponse(obj: object): boolean;
export declare function isHttpResponse(obj: any): boolean;
export declare abstract class HttpResponseSuccess extends HttpResponse {

@@ -17,3 +17,3 @@ readonly isHttpResponseSuccess: boolean;

}
export declare function isHttpResponseSuccess(obj: object): boolean;
export declare function isHttpResponseSuccess(obj: any): boolean;
export declare class HttpResponseOK extends HttpResponseSuccess {

@@ -25,3 +25,3 @@ readonly isHttpResponseOK: boolean;

}
export declare function isHttpResponseOK(obj: object): boolean;
export declare function isHttpResponseOK(obj: any): boolean;
export declare class HttpResponseCreated extends HttpResponseSuccess {

@@ -33,3 +33,3 @@ readonly isHttpResponseCreated: boolean;

}
export declare function isHttpResponseCreated(obj: object): boolean;
export declare function isHttpResponseCreated(obj: any): boolean;
export declare class HttpResponseNoContent extends HttpResponseSuccess {

@@ -41,3 +41,3 @@ readonly isHttpResponseNoContent: boolean;

}
export declare function isHttpResponseNoContent(obj: object): boolean;
export declare function isHttpResponseNoContent(obj: any): boolean;
export declare abstract class HttpResponseRedirection extends HttpResponse {

@@ -47,3 +47,3 @@ readonly isHttpResponseRedirection: boolean;

}
export declare function isHttpResponseRedirection(obj: object): boolean;
export declare function isHttpResponseRedirection(obj: any): boolean;
export declare class HttpResponseRedirect extends HttpResponseRedirection {

@@ -56,3 +56,3 @@ path: string;

}
export declare function isHttpResponseRedirect(obj: object): boolean;
export declare function isHttpResponseRedirect(obj: any): boolean;
export declare abstract class HttpResponseClientError extends HttpResponse {

@@ -62,3 +62,3 @@ readonly isHttpResponseClientError: boolean;

}
export declare function isHttpResponseClientError(obj: object): boolean;
export declare function isHttpResponseClientError(obj: any): boolean;
export declare class HttpResponseBadRequest extends HttpResponseClientError {

@@ -70,3 +70,3 @@ readonly isHttpResponseBadRequest: boolean;

}
export declare function isHttpResponseBadRequest(obj: object): boolean;
export declare function isHttpResponseBadRequest(obj: any): boolean;
export declare class HttpResponseUnauthorized extends HttpResponseClientError {

@@ -81,3 +81,3 @@ readonly isHttpResponseUnauthorized: boolean;

}
export declare function isHttpResponseUnauthorized(obj: object): boolean;
export declare function isHttpResponseUnauthorized(obj: any): boolean;
export declare class HttpResponseForbidden extends HttpResponseClientError {

@@ -89,3 +89,3 @@ readonly isHttpResponseForbidden: boolean;

}
export declare function isHttpResponseForbidden(obj: object): boolean;
export declare function isHttpResponseForbidden(obj: any): boolean;
export declare class HttpResponseNotFound extends HttpResponseClientError {

@@ -97,3 +97,3 @@ readonly isHttpResponseNotFound: boolean;

}
export declare function isHttpResponseNotFound(obj: object): boolean;
export declare function isHttpResponseNotFound(obj: any): boolean;
export declare class HttpResponseMethodNotAllowed extends HttpResponseClientError {

@@ -105,3 +105,3 @@ readonly isHttpResponseMethodNotAllowed: boolean;

}
export declare function isHttpResponseMethodNotAllowed(obj: object): boolean;
export declare function isHttpResponseMethodNotAllowed(obj: any): boolean;
export declare class HttpResponseConflict extends HttpResponseClientError {

@@ -113,3 +113,3 @@ readonly isHttpResponseConflict: boolean;

}
export declare function isHttpResponseConflict(obj: object): boolean;
export declare function isHttpResponseConflict(obj: any): boolean;
export declare abstract class HttpResponseServerError extends HttpResponse {

@@ -119,3 +119,3 @@ readonly isHttpResponseServerError: boolean;

}
export declare function isHttpResponseServerError(obj: object): boolean;
export declare function isHttpResponseServerError(obj: any): boolean;
export declare class HttpResponseInternalServerError extends HttpResponseServerError {

@@ -127,3 +127,3 @@ readonly isHttpResponseInternalServerError: boolean;

}
export declare function isHttpResponseInternalServerError(obj: object): boolean;
export declare function isHttpResponseInternalServerError(obj: any): boolean;
export declare class HttpResponseNotImplemented extends HttpResponseServerError {

@@ -135,2 +135,2 @@ readonly isHttpResponseNotImplemented: boolean;

}
export declare function isHttpResponseNotImplemented(obj: object): boolean;
export declare function isHttpResponseNotImplemented(obj: any): boolean;

@@ -12,3 +12,4 @@ "use strict";

function isHttpResponse(obj) {
return obj instanceof HttpResponse || obj.isHttpResponse === true;
return obj instanceof HttpResponse ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponse === true);
}

@@ -25,3 +26,4 @@ exports.isHttpResponse = isHttpResponse;

function isHttpResponseSuccess(obj) {
return obj instanceof HttpResponseSuccess || obj.isHttpResponseSuccess === true;
return obj instanceof HttpResponseSuccess ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseSuccess === true);
}

@@ -39,3 +41,4 @@ exports.isHttpResponseSuccess = isHttpResponseSuccess;

function isHttpResponseOK(obj) {
return obj instanceof HttpResponseOK || obj.isHttpResponseOK === true;
return obj instanceof HttpResponseOK ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseOK === true);
}

@@ -53,3 +56,4 @@ exports.isHttpResponseOK = isHttpResponseOK;

function isHttpResponseCreated(obj) {
return obj instanceof HttpResponseCreated || obj.isHttpResponseCreated === true;
return obj instanceof HttpResponseCreated ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseCreated === true);
}

@@ -67,3 +71,4 @@ exports.isHttpResponseCreated = isHttpResponseCreated;

function isHttpResponseNoContent(obj) {
return obj instanceof HttpResponseNoContent || obj.isHttpResponseNoContent === true;
return obj instanceof HttpResponseNoContent ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseNoContent === true);
}

@@ -80,3 +85,4 @@ exports.isHttpResponseNoContent = isHttpResponseNoContent;

function isHttpResponseRedirection(obj) {
return obj instanceof HttpResponseRedirection || obj.isHttpResponseRedirection === true;
return obj instanceof HttpResponseRedirection ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseRedirection === true);
}

@@ -95,3 +101,4 @@ exports.isHttpResponseRedirection = isHttpResponseRedirection;

function isHttpResponseRedirect(obj) {
return obj instanceof HttpResponseRedirect || obj.isHttpResponseRedirect === true;
return obj instanceof HttpResponseRedirect ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseRedirect === true);
}

@@ -108,3 +115,4 @@ exports.isHttpResponseRedirect = isHttpResponseRedirect;

function isHttpResponseClientError(obj) {
return obj instanceof HttpResponseClientError || obj.isHttpResponseClientError === true;
return obj instanceof HttpResponseClientError ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseClientError === true);
}

@@ -122,3 +130,4 @@ exports.isHttpResponseClientError = isHttpResponseClientError;

function isHttpResponseBadRequest(obj) {
return obj instanceof HttpResponseBadRequest || obj.isHttpResponseBadRequest === true;
return obj instanceof HttpResponseBadRequest ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseBadRequest === true);
}

@@ -139,3 +148,4 @@ exports.isHttpResponseBadRequest = isHttpResponseBadRequest;

function isHttpResponseUnauthorized(obj) {
return obj instanceof HttpResponseUnauthorized || obj.isHttpResponseUnauthorized === true;
return obj instanceof HttpResponseUnauthorized ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseUnauthorized === true);
}

@@ -153,3 +163,4 @@ exports.isHttpResponseUnauthorized = isHttpResponseUnauthorized;

function isHttpResponseForbidden(obj) {
return obj instanceof HttpResponseForbidden || obj.isHttpResponseForbidden === true;
return obj instanceof HttpResponseForbidden ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseForbidden === true);
}

@@ -167,3 +178,4 @@ exports.isHttpResponseForbidden = isHttpResponseForbidden;

function isHttpResponseNotFound(obj) {
return obj instanceof HttpResponseNotFound || obj.isHttpResponseNotFound === true;
return obj instanceof HttpResponseNotFound ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseNotFound === true);
}

@@ -181,3 +193,4 @@ exports.isHttpResponseNotFound = isHttpResponseNotFound;

function isHttpResponseMethodNotAllowed(obj) {
return obj instanceof HttpResponseMethodNotAllowed || obj.isHttpResponseMethodNotAllowed === true;
return obj instanceof HttpResponseMethodNotAllowed ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseMethodNotAllowed === true);
}

@@ -195,3 +208,4 @@ exports.isHttpResponseMethodNotAllowed = isHttpResponseMethodNotAllowed;

function isHttpResponseConflict(obj) {
return obj instanceof HttpResponseConflict || obj.isHttpResponseConflict === true;
return obj instanceof HttpResponseConflict ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseConflict === true);
}

@@ -208,3 +222,4 @@ exports.isHttpResponseConflict = isHttpResponseConflict;

function isHttpResponseServerError(obj) {
return obj instanceof HttpResponseServerError || obj.isHttpResponseServerError === true;
return obj instanceof HttpResponseServerError ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseServerError === true);
}

@@ -222,3 +237,4 @@ exports.isHttpResponseServerError = isHttpResponseServerError;

function isHttpResponseInternalServerError(obj) {
return obj instanceof HttpResponseInternalServerError || obj.isHttpResponseInternalServerError === true;
return obj instanceof HttpResponseInternalServerError ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseInternalServerError === true);
}

@@ -236,5 +252,6 @@ exports.isHttpResponseInternalServerError = isHttpResponseInternalServerError;

function isHttpResponseNotImplemented(obj) {
return obj instanceof HttpResponseNotImplemented || obj.isHttpResponseNotImplemented === true;
return obj instanceof HttpResponseNotImplemented ||
(typeof obj === 'object' && obj !== null && obj.isHttpResponseNotImplemented === true);
}
exports.isHttpResponseNotImplemented = isHttpResponseNotImplemented;
//# sourceMappingURL=http-responses.js.map

@@ -1,2 +0,3 @@

export { HttpRequest } from './http-request';
export * from './contexts';
export * from './http-methods';
export * from './http-responses';

@@ -6,5 +6,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var http_request_1 = require("./http-request");
exports.HttpRequest = http_request_1.HttpRequest;
__export(require("./contexts"));
__export(require("./http-methods"));
__export(require("./http-responses"));
//# sourceMappingURL=index.js.map

@@ -0,8 +1,8 @@

export * from './class.interface';
export { Controller } from './controllers';
export * from './http';
export * from './interfaces';
export * from './utils';
export { App } from './app';
export * from './hooks';
export * from './routes';
export { Config } from './config';
export { Context, PostContext } from './contexts';
export { Controller } from './controller';
export * from './modules';
export { Service, ServiceManager } from './service-manager';

@@ -6,13 +6,10 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
var controllers_1 = require("./controllers");
exports.Controller = controllers_1.Controller;
__export(require("./http"));
__export(require("./utils"));
var app_1 = require("./app");
exports.App = app_1.App;
__export(require("./hooks"));
__export(require("./routes"));
var config_1 = require("./config");
exports.Config = config_1.Config;
var contexts_1 = require("./contexts");
exports.Context = contexts_1.Context;
exports.PostContext = contexts_1.PostContext;
var controller_1 = require("./controller");
exports.Controller = controller_1.Controller;
__export(require("./modules"));
var service_manager_1 = require("./service-manager");

@@ -19,0 +16,0 @@ exports.Service = service_manager_1.Service;

import 'reflect-metadata';
import { Class } from './interfaces';
import { Class } from './class.interface';
export declare function Service(): (target: any) => void;
export declare class ServiceManager {
readonly map: Map<Class<any>, any>;
set<Service>(ServiceClass: Class<Service>, service: any): void;
get<Service>(ServiceClass: Class<Service>): Service;
set<Service>(serviceClass: Class<Service>, service: any): void;
get<Service>(serviceClass: Class<Service>): Service;
}

@@ -12,15 +12,21 @@ "use strict";

}
set(ServiceClass, service) {
this.map.set(ServiceClass, service);
set(serviceClass, service) {
this.map.set(serviceClass, service);
}
get(ServiceClass) {
get(serviceClass) {
// The ts-ignores fix TypeScript bugs.
// @ts-ignore : Type 'ServiceManager' is not assignable to type 'Service'.
if (serviceClass === ServiceManager) {
// @ts-ignore : Type 'ServiceManager' is not assignable to type 'Service'.
return this;
}
// Get the service if it exists.
if (this.map.get(ServiceClass)) {
return this.map.get(ServiceClass);
if (this.map.get(serviceClass)) {
return this.map.get(serviceClass);
}
// If the service has not been instantiated yet then do it.
const dependencies = Reflect.getMetadata('design:paramtypes', ServiceClass) || [];
const service = new ServiceClass(...dependencies.map(Dep => this.get(Dep)));
const dependencies = Reflect.getOwnMetadata('design:paramtypes', serviceClass) || [];
const service = new serviceClass(...dependencies.map(Dep => this.get(Dep)));
// Save and return the service.
this.map.set(ServiceClass, service);
this.map.set(serviceClass, service);
return service;

@@ -27,0 +33,0 @@ }

@@ -1,2 +0,2 @@

import { Module } from '../core';
export declare function createApp(rootModule: Module): any;
import { Class, IModule } from '../core';
export declare function createApp(rootModuleClass: Class<IModule>): any;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const bodyParser = require("body-parser");
const csurf = require("csurf");

@@ -10,18 +9,13 @@ const express = require("express");

const logger = require("morgan");
const common_1 = require("../common");
const core_1 = require("../core");
const get_middlewares_1 = require("./get-middlewares");
function createApp(rootModule) {
const app = new core_1.App(rootModule);
const preHook = common_1.initDB(app.models);
app.controllers.forEach(controller => {
controller.addPreHooksAtTheTop([preHook]);
});
const expressApp = express();
expressApp.use(logger('[:date] ":method :url HTTP/:http-version" :status - :response-time ms'));
expressApp.use(express.static(path.join(process.cwd(), core_1.Config.get('settings', 'staticUrl', '/public'))));
expressApp.use(helmet());
expressApp.use(bodyParser.json());
expressApp.use(bodyParser.urlencoded({ extended: false }));
expressApp.use(session({
const create_middleware_1 = require("./create-middleware");
const handle_errors_1 = require("./handle-errors");
const not_found_1 = require("./not-found");
function createApp(rootModuleClass) {
const app = express();
app.use(logger('[:date] ":method :url HTTP/:http-version" :status - :response-time ms'));
app.use(express.static(path.join(process.cwd(), core_1.Config.get('settings', 'staticUrl', '/public'))));
app.use(helmet());
app.use(express.json());
app.use(session({
cookie: {

@@ -40,31 +34,36 @@ domain: core_1.Config.get('settings', 'sessionCookieDomain'),

if (core_1.Config.get('settings', 'csrf', false)) {
expressApp.use(csurf());
expressApp.use((req, res, next) => {
req.csrfToken = req.csrfToken();
next();
});
app.use(csurf());
}
expressApp.use((req, res, next) => {
if (req.body) {
delete req.body._csrf;
}
next();
});
expressApp.use((err, req, res, next) => {
app.use((err, req, res, next) => {
if (err.code === 'EBADCSRFTOKEN') {
res.status(403).send('Bad csrf token.');
err = new core_1.HttpResponseForbidden('Bad csrf token.');
}
else {
next(err);
}
next(err);
});
expressApp.use(get_middlewares_1.getMiddlewares(app, { debug: core_1.Config.get('settings', 'debug', false) }, [
{
req: 'csrfToken',
state: 'csrfToken'
const services = new core_1.ServiceManager();
const routes = core_1.makeModuleRoutes('', [], rootModuleClass, services);
for (const route of routes) {
switch (route.httpMethod) {
case 'DELETE':
app.delete(route.path, create_middleware_1.createMiddleware(route, services));
break;
case 'GET':
app.get(route.path, create_middleware_1.createMiddleware(route, services));
break;
case 'PATCH':
app.patch(route.path, create_middleware_1.createMiddleware(route, services));
break;
case 'POST':
app.post(route.path, create_middleware_1.createMiddleware(route, services));
break;
case 'PUT':
app.put(route.path, create_middleware_1.createMiddleware(route, services));
break;
}
]));
return expressApp;
}
app.use(not_found_1.notFound());
app.use(handle_errors_1.handleErrors(core_1.Config.get('settings', 'debug', false), console.error));
return app;
}
exports.createApp = createApp;
//# sourceMappingURL=create-app.js.map
{
"name": "@foal/core",
"version": "0.5.0-alpha.2",
"version": "0.6.0-alpha.1",
"description": "A high-level Node.JS framework to quickly build web apps in TypeScript.",

@@ -8,4 +8,9 @@ "main": "./lib/index.js",

"scripts": {
"test": "mocha --require ts-node/register \"./src/**/*.spec.ts\"",
"test": "nyc --reporter=html --reporter=text mocha --require ts-node/register --require source-map-support/register \"./src/**/*.spec.ts\"",
"dev:test": "mocha --require ts-node/register --watch --watch-extensions ts \"./src/**/*.spec.ts\"",
"dev:test:auth": "mocha --require ts-node/register --watch --watch-extensions ts \"./src/auth/**/*.spec.ts\"",
"dev:test:common": "mocha --require ts-node/register --watch --watch-extensions ts \"./src/common/**/*.spec.ts\"",
"test:common": "mocha --require ts-node/register \"./src/common/**/*.spec.ts\"",
"dev:test:core": "mocha --require ts-node/register --watch --watch-extensions ts \"./src/core/**/*.spec.ts\"",
"dev:test:express": "mocha --require ts-node/register --watch --watch-extensions ts \"./src/express/**/*.spec.ts\"",
"build": "rimraf lib && tsc -p tsconfig-build.json",

@@ -43,5 +48,20 @@ "prepublish": "npm run build"

],
"nyc": {
"extension": [
".ts",
".tsx"
],
"exclude": [
"coverage/",
"lib/",
"**/*.spec.ts",
"**/*.d.ts"
],
"reporter": [
"html"
],
"all": true
},
"dependencies": {
"ajv": "^6.5.0",
"body-parser": "^1.18.2",
"csurf": "^1.9.0",

@@ -58,3 +78,3 @@ "express": "^4.16.3",

"devDependencies": {
"@foal/ejs": "^0.5.0-alpha.2",
"@foal/ejs": "^0.6.0-alpha.1",
"@types/chai": "^4.0.4",

@@ -70,3 +90,8 @@ "@types/chai-as-promised": "^7.1.0",

"mysql": "^2.15.0",
"node-mocks-http": "^1.7.0",
"nyc": "^12.0.2",
"pg": "^7.4.3",
"rimraf": "^2.6.2",
"source-map-support": "^0.5.6",
"sqlite3": "^4.0.2",
"supertest": "^3.1.0",

@@ -73,0 +98,0 @@ "ts-node": "^3.3.0",

@@ -9,2 +9,4 @@ # FoalTS

**This work is in progress and is currently not ready for production.**
FoalTS is a high-level Node.JS framework to quickly build web apps in TypeScript.

@@ -18,2 +20,2 @@

Documentation: [https://foalts.gitbooks.io/docs/](https://foalts.gitbooks.io/docs/)
Documentation: [https://foalts.gitbook.io/docs/](https://foalts.gitbook.io/docs/)

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc