diff --git a/.eslintrc.json b/.eslintrc.json index d187d17c..c72280b9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,4 +1,6 @@ { "root": true, - "extends": "hexo" + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": ["hexo"] } diff --git a/.gitignore b/.gitignore index 62df31e9..60768cde 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ node_modules/ .nyc_output/ *.log docs/ -coverage/ \ No newline at end of file +coverage/ +built \ No newline at end of file diff --git a/.tsconfig.json b/.tsconfig.json new file mode 100644 index 00000000..b50946d5 --- /dev/null +++ b/.tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "outDir": "./lib", + "allowJs": true, + "target": "ES2018" + }, + "include": [ + "./src/**/*" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 992efb9b..f8acc884 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,21 @@ "name": "warehouse", "version": "4.0.0", "description": "Simple JSON-based database", - "main": "lib/database", + "main": "built/database", "directories": { - "lib": "./lib" + "lib": "./built" }, "files": [ - "lib/" + "built/" ], "scripts": { - "eslint": "eslint lib test", + "pretest": "npm run typescript", + "typescript": "tsc --build .tsconfig.json", + "eslint": "eslint src test", "test": "mocha \"test/scripts/**/*.js\"", "test-cov": "nyc --reporter=lcov --reporter=text-summary npm test", - "jsdoc": "jsdoc --configure .jsdoc.json" + "jsdoc": "jsdoc --configure .jsdoc.json", + "prepublish": "npm run typescript" }, "repository": "hexojs/warehouse", "keywords": [ @@ -32,6 +35,8 @@ "rfdc": "^1.1.4" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^3.0.0", + "@typescript-eslint/parser": "^3.0.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "eslint": "^7.0.0", @@ -41,7 +46,8 @@ "minami": "^1.1.1", "mocha": "^7.0.0", "nyc": "^15.0.0", - "sinon": "^9.0.2" + "sinon": "^9.0.2", + "typescript": "^3.9.3" }, "engines": { "node": ">=10.13.0" diff --git a/lib/database.js b/src/database.js similarity index 100% rename from lib/database.js rename to src/database.js diff --git a/lib/document.js b/src/document.js similarity index 100% rename from lib/document.js rename to src/document.js diff --git a/lib/error.js b/src/error.js similarity index 100% rename from lib/error.js rename to src/error.js diff --git a/lib/error/population.js b/src/error/population.js similarity index 100% rename from lib/error/population.js rename to src/error/population.js diff --git a/lib/error/validation.js b/src/error/validation.js similarity index 100% rename from lib/error/validation.js rename to src/error/validation.js diff --git a/lib/model.js b/src/model.js similarity index 100% rename from lib/model.js rename to src/model.js diff --git a/lib/mutex.js b/src/mutex.js similarity index 100% rename from lib/mutex.js rename to src/mutex.js diff --git a/lib/query.js b/src/query.js similarity index 100% rename from lib/query.js rename to src/query.js diff --git a/lib/schema.js b/src/schema.js similarity index 100% rename from lib/schema.js rename to src/schema.js diff --git a/lib/schematype.js b/src/schematype.js similarity index 100% rename from lib/schematype.js rename to src/schematype.js diff --git a/lib/types/array.js b/src/types/array.js similarity index 100% rename from lib/types/array.js rename to src/types/array.js diff --git a/lib/types/boolean.js b/src/types/boolean.js similarity index 100% rename from lib/types/boolean.js rename to src/types/boolean.js diff --git a/lib/types/buffer.js b/src/types/buffer.js similarity index 100% rename from lib/types/buffer.js rename to src/types/buffer.js diff --git a/lib/types/cuid.js b/src/types/cuid.js similarity index 100% rename from lib/types/cuid.js rename to src/types/cuid.js diff --git a/lib/types/date.js b/src/types/date.js similarity index 100% rename from lib/types/date.js rename to src/types/date.js diff --git a/lib/types/enum.js b/src/types/enum.js similarity index 100% rename from lib/types/enum.js rename to src/types/enum.js diff --git a/lib/types/index.js b/src/types/index.js similarity index 100% rename from lib/types/index.js rename to src/types/index.js diff --git a/lib/types/integer.js b/src/types/integer.js similarity index 100% rename from lib/types/integer.js rename to src/types/integer.js diff --git a/lib/types/number.js b/src/types/number.js similarity index 100% rename from lib/types/number.js rename to src/types/number.js diff --git a/lib/types/object.js b/src/types/object.js similarity index 100% rename from lib/types/object.js rename to src/types/object.js diff --git a/lib/types/string.js b/src/types/string.js similarity index 100% rename from lib/types/string.js rename to src/types/string.js diff --git a/lib/types/virtual.js b/src/types/virtual.js similarity index 100% rename from lib/types/virtual.js rename to src/types/virtual.js diff --git a/lib/util.js b/src/util.js similarity index 100% rename from lib/util.js rename to src/util.js diff --git a/test/fixtures/db.json b/test/fixtures/db.json index 5a796455..32e13d6e 100644 --- a/test/fixtures/db.json +++ b/test/fixtures/db.json @@ -1 +1 @@ -{"meta":{"version":1,"warehouse":"3.0.1"},"models":{"Test":[{"_id":"A"},{"_id":"B"},{"_id":"C"}]}} \ No newline at end of file +{"meta":{"version":1,"warehouse":"4.0.0"},"models":{"Test":[{"_id":"A"},{"_id":"B"},{"_id":"C"}]}} \ No newline at end of file diff --git a/test/scripts/database.js b/test/scripts/database.js index 30001e87..a7b518a5 100644 --- a/test/scripts/database.js +++ b/test/scripts/database.js @@ -10,8 +10,8 @@ const DB_PATH = path.join(path.dirname(__dirname), 'fixtures', 'db.json'); const DB_VERSION = 1; describe('Database', () => { - const Database = require('../..'); - const Model = require('../../lib/model'); + const Database = require('../../built/database'); + const Model = require('../../built/model'); const Schema = Database.Schema; const db = new Database({path: DB_PATH, version: DB_VERSION}); diff --git a/test/scripts/document.js b/test/scripts/document.js index ba9d359c..0a7f680d 100644 --- a/test/scripts/document.js +++ b/test/scripts/document.js @@ -4,7 +4,7 @@ const should = require('chai').should(); // eslint-disable-line describe('Document', () => { const Database = require('../..'); - const Document = require('../../lib/document'); + const Document = require('../../built/document'); const db = new Database(); const Schema = Database.Schema; diff --git a/test/scripts/mutex.js b/test/scripts/mutex.js index 4df3c5af..cf8b1e19 100644 --- a/test/scripts/mutex.js +++ b/test/scripts/mutex.js @@ -1,7 +1,7 @@ 'use strict'; const should = require('chai').should(); // eslint-disable-line -const Mutex = require('../../lib/mutex'); +const Mutex = require('../../built/mutex'); const sinon = require('sinon'); describe('Mutex', () => { diff --git a/test/scripts/query.js b/test/scripts/query.js index 06a99af6..3af8f565 100644 --- a/test/scripts/query.js +++ b/test/scripts/query.js @@ -3,7 +3,7 @@ const should = require('chai').should(); // eslint-disable-line const sortBy = require('lodash/sortBy'); const Promise = require('bluebird'); -const Document = require('../../lib/document'); +const Document = require('../../built/document'); describe('Query', () => { const Database = require('../..'); diff --git a/test/scripts/schematype.js b/test/scripts/schematype.js index 6ed1bf25..b086d00a 100644 --- a/test/scripts/schematype.js +++ b/test/scripts/schematype.js @@ -1,10 +1,10 @@ 'use strict'; const should = require('chai').should(); // eslint-disable-line -const ValidationError = require('../../lib/error/validation'); +const ValidationError = require('../../built/error/validation'); describe('SchemaType', () => { - const SchemaType = require('../../lib/schematype'); + const SchemaType = require('../../built/schematype'); const type = new SchemaType('test'); it('cast()', () => { diff --git a/test/scripts/types/array.js b/test/scripts/types/array.js index 7228343d..2f08cb3a 100644 --- a/test/scripts/types/array.js +++ b/test/scripts/types/array.js @@ -1,13 +1,13 @@ 'use strict'; const should = require('chai').should(); // eslint-disable-line -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeArray', () => { - const SchemaTypeArray = require('../../../lib/types/array'); - const SchemaTypeString = require('../../../lib/types/string'); - const SchemaTypeDate = require('../../../lib/types/date'); - const SchemaTypeBoolean = require('../../../lib/types/boolean'); + const SchemaTypeArray = require('../../../built/types/array'); + const SchemaTypeString = require('../../../built/types/string'); + const SchemaTypeDate = require('../../../built/types/date'); + const SchemaTypeBoolean = require('../../../built/types/boolean'); const type = new SchemaTypeArray('test'); it('cast()', () => { diff --git a/test/scripts/types/boolean.js b/test/scripts/types/boolean.js index 07be269f..2a51dae2 100644 --- a/test/scripts/types/boolean.js +++ b/test/scripts/types/boolean.js @@ -1,10 +1,10 @@ 'use strict'; require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeBoolean', () => { - const SchemaTypeBoolean = require('../../../lib/types/boolean'); + const SchemaTypeBoolean = require('../../../built/types/boolean'); const type = new SchemaTypeBoolean('test'); it('cast()', () => { diff --git a/test/scripts/types/buffer.js b/test/scripts/types/buffer.js index 3c6c62d9..7263b5b0 100644 --- a/test/scripts/types/buffer.js +++ b/test/scripts/types/buffer.js @@ -1,10 +1,10 @@ 'use strict'; const should = require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeBuffer', () => { - const SchemaTypeBuffer = require('../../../lib/types/buffer'); + const SchemaTypeBuffer = require('../../../built/types/buffer'); const type = new SchemaTypeBuffer('test'); it('cast()', () => { diff --git a/test/scripts/types/cuid.js b/test/scripts/types/cuid.js index f17cd89c..c70830f8 100644 --- a/test/scripts/types/cuid.js +++ b/test/scripts/types/cuid.js @@ -1,10 +1,10 @@ 'use strict'; const should = require('chai').should(); // eslint-disable-line -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeCUID', () => { - const SchemaTypeCUID = require('../../../lib/types/cuid'); + const SchemaTypeCUID = require('../../../built/types/cuid'); const type = new SchemaTypeCUID('test'); it('cast()', () => { diff --git a/test/scripts/types/date.js b/test/scripts/types/date.js index 912bec84..b366398d 100644 --- a/test/scripts/types/date.js +++ b/test/scripts/types/date.js @@ -1,10 +1,10 @@ 'use strict'; const should = require('chai').should(); // eslint-disable-line -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeDate', () => { - const SchemaTypeDate = require('../../../lib/types/date'); + const SchemaTypeDate = require('../../../built/types/date'); const type = new SchemaTypeDate('test'); it('cast()', () => { diff --git a/test/scripts/types/enum.js b/test/scripts/types/enum.js index 166c3888..94522209 100644 --- a/test/scripts/types/enum.js +++ b/test/scripts/types/enum.js @@ -1,10 +1,10 @@ 'use strict'; require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeEnum', () => { - const SchemaTypeEnum = require('../../../lib/types/enum'); + const SchemaTypeEnum = require('../../../built/types/enum'); it('validate()', () => { const type = new SchemaTypeEnum('test', {elements: ['foo', 'bar', 'baz']}); diff --git a/test/scripts/types/integer.js b/test/scripts/types/integer.js index 9589fad1..60f22d80 100644 --- a/test/scripts/types/integer.js +++ b/test/scripts/types/integer.js @@ -1,10 +1,10 @@ 'use strict'; require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeInteger', () => { - const SchemaTypeInteger = require('../../../lib/types/integer'); + const SchemaTypeInteger = require('../../../built/types/integer'); const type = new SchemaTypeInteger('test'); it('cast()', () => { diff --git a/test/scripts/types/number.js b/test/scripts/types/number.js index 6442196e..107b1f64 100644 --- a/test/scripts/types/number.js +++ b/test/scripts/types/number.js @@ -1,10 +1,10 @@ 'use strict'; require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeNumber', () => { - const SchemaTypeNumber = require('../../../lib/types/number'); + const SchemaTypeNumber = require('../../../built/types/number'); const type = new SchemaTypeNumber('type'); it('cast()', () => { diff --git a/test/scripts/types/object.js b/test/scripts/types/object.js index a5cd9c74..d6ef04e0 100644 --- a/test/scripts/types/object.js +++ b/test/scripts/types/object.js @@ -3,7 +3,7 @@ const should = require('chai').should(); // eslint-disable-line describe('SchemaTypeObject', () => { - const SchemaTypeObject = require('../../../lib/types/object'); + const SchemaTypeObject = require('../../../built/types/object'); const type = new SchemaTypeObject('test'); it('cast() - default', () => { diff --git a/test/scripts/types/string.js b/test/scripts/types/string.js index 2425d012..cbb601f1 100644 --- a/test/scripts/types/string.js +++ b/test/scripts/types/string.js @@ -1,10 +1,10 @@ 'use strict'; require('chai').should(); -const ValidationError = require('../../../lib/error/validation'); +const ValidationError = require('../../../built/error/validation'); describe('SchemaTypeString', () => { - const SchemaTypeString = require('../../../lib/types/string'); + const SchemaTypeString = require('../../../built/types/string'); const type = new SchemaTypeString('test'); it('cast()', () => { diff --git a/test/scripts/types/virtual.js b/test/scripts/types/virtual.js index 515cbbcb..23671158 100644 --- a/test/scripts/types/virtual.js +++ b/test/scripts/types/virtual.js @@ -3,7 +3,7 @@ const should = require('chai').should(); // eslint-disable-line describe('SchemaTypeVirtual', () => { - const SchemaTypeVirtual = require('../../../lib/types/virtual'); + const SchemaTypeVirtual = require('../../../built/types/virtual'); const type = new SchemaTypeVirtual('test'); it('get()', () => { diff --git a/test/scripts/util.js b/test/scripts/util.js index 5a23df2a..9a67c0e2 100644 --- a/test/scripts/util.js +++ b/test/scripts/util.js @@ -3,7 +3,7 @@ const should = require('chai').should(); // eslint-disable-line describe('util', () => { - const util = require('../../lib/util'); + const util = require('../../built/util'); it('shuffle()', () => { const src = Array(100).fill(0).map((_, i) => i);