From e981ce20d9338528d93051a1af51f0cf1dd98ab4 Mon Sep 17 00:00:00 2001 From: Robert Rossmann Date: Thu, 6 Dec 2018 12:56:13 +0100 Subject: [PATCH] feat(sequelize): add typings --- packages/sequelize/package-lock.json | 34 ++++++++++++++++++ packages/sequelize/package.json | 1 + packages/sequelize/src/index.d.ts | 26 ++++++++++++++ packages/sequelize/src/migration.d.ts | 52 +++++++++++++++++++++++++++ packages/sequelize/src/models.d.ts | 26 ++++++++++++++ packages/sequelize/src/relations.d.ts | 10 ++++++ packages/sequelize/src/service.d.ts | 33 +++++++++++++++++ 7 files changed, 182 insertions(+) create mode 100644 packages/sequelize/src/index.d.ts create mode 100644 packages/sequelize/src/migration.d.ts create mode 100644 packages/sequelize/src/models.d.ts create mode 100644 packages/sequelize/src/relations.d.ts create mode 100644 packages/sequelize/src/service.d.ts diff --git a/packages/sequelize/package-lock.json b/packages/sequelize/package-lock.json index 34a9587..64e37ce 100644 --- a/packages/sequelize/package-lock.json +++ b/packages/sequelize/package-lock.json @@ -4,16 +4,50 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/bluebird": { + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.24.tgz", + "integrity": "sha512-YeQoDpq4Lm8ppSBqAnAeF/xy1cYp/dMTif2JFcvmAbETMRlvKHT2iLcWu+WyYiJO3b3Ivokwo7EQca/xfLVJmg==" + }, + "@types/continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha1-oz4N+dzptCTRyY/E/evYV43O7H4=", + "requires": { + "@types/node": "*" + } + }, "@types/geojson": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" }, + "@types/lodash": { + "version": "4.14.119", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", + "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==" + }, "@types/node": { "version": "10.12.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.10.tgz", "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w==" }, + "@types/sequelize": { + "version": "4.27.32", + "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.27.32.tgz", + "integrity": "sha512-M4iFjZLXDdjqnyKaxz9I5XlVFr4/WBvFYyd8oLU5YsKcXGeppMl6nNo9EBsdDgOOirJcyH2JkJEUhbhegZ6MqA==", + "requires": { + "@types/bluebird": "*", + "@types/continuation-local-storage": "*", + "@types/lodash": "*", + "@types/validator": "*" + } + }, + "@types/validator": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-9.4.3.tgz", + "integrity": "sha512-D4zRrAs2pTg5cva6+hJ6GrQlb/UX5NxNtk/da3Gw27enoLvbRMTTloZ1w6CCqc+kHyZvT3DsyWQZ8baTGgSg0g==" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", diff --git a/packages/sequelize/package.json b/packages/sequelize/package.json index 305b633..fbcbb9c 100644 --- a/packages/sequelize/package.json +++ b/packages/sequelize/package.json @@ -10,6 +10,7 @@ "@atlas.js/errors": "^0.2.1", "@atlas.js/hook": "^2.0.1", "@atlas.js/service": "^1.1.1", + "@types/sequelize": "^4.27.32", "sequelize": "^4.37.6", "umzug": "^2.0.0" }, diff --git a/packages/sequelize/src/index.d.ts b/packages/sequelize/src/index.d.ts new file mode 100644 index 0000000..92600ed --- /dev/null +++ b/packages/sequelize/src/index.d.ts @@ -0,0 +1,26 @@ +import Service from './service' +import ModelsHook from './models' +import RelationsHook from './relations' +import MigrationAction from './migration' +import { + Model, + DataTypes, + Deferrable, + Op, +} from 'sequelize' +import * as sequelize from 'sequelize' + +declare module '@atlas.js/sequelize' { + + export { + Service, + ModelsHook, + RelationsHook, + MigrationAction, + Op, + Model, + DataTypes, + Deferrable, + sequelize, + } +} diff --git a/packages/sequelize/src/migration.d.ts b/packages/sequelize/src/migration.d.ts new file mode 100644 index 0000000..7f1d7b6 --- /dev/null +++ b/packages/sequelize/src/migration.d.ts @@ -0,0 +1,52 @@ +import Action from '@atlas.js/action' + +/** + * This action allows you to programmatically execute migrations using the Umzug migrator. + * + * ## Usage: + * + * First, add this action to your Atlas instance, and then: + * + * `await atlas.actions.migration.up()` + * `await atlas.actions.migration.down()` + * + * You can also execute the action's methods from the Atlas CLI: + * + * `npx atlas exec migration up` + * + * @see https://www.npmjs.com/package/umzug + */ +declare class Migration extends Action { + /** + * Migrate upwards/apply + * + * @see https://www.npmjs.com/package/umzug#executing-pending-migrations + */ + up(options: { from?: string, to?: string, migrations?: string[] }): Promise + up(migration: string): Promise + up(migrations: string[]): Promise + + /** + * Migrate downwards/revert + * + * @see https://www.npmjs.com/package/umzug#reverting-executed-migration + */ + down(options: { to?: string | 0, migration?: string[] }): Promise + down(migration: string): Promise + down(migrations: string[]): Promise + + /** Get a list of all pending migrations */ + pending(): Promise +} + +declare namespace Migration { + interface Config { + /** + * Module location, relative to `atlas.root`, from which to load migration files + * @default migration + */ + module: string + } +} + +export default Migration diff --git a/packages/sequelize/src/models.d.ts b/packages/sequelize/src/models.d.ts new file mode 100644 index 0000000..3790e73 --- /dev/null +++ b/packages/sequelize/src/models.d.ts @@ -0,0 +1,26 @@ +import AtlasHook from '@atlas.js/hook' +import * as sequelize from 'sequelize' + +/** + * This hook allows you to import your Sequelize models from a particular module location into the + * sequelize service + */ +declare class ModelsHook extends AtlasHook { + /** Hook runtime configuration values */ + config: ModelsHook.Config + + afterPrepare(): void +} + +declare namespace ModelsHook { + /** Configuration schema available to this hook */ + interface Config { + /** + * Module location from which to load Sequelize models + * @default models + */ + module: string + } +} + +export default ModelsHook diff --git a/packages/sequelize/src/relations.d.ts b/packages/sequelize/src/relations.d.ts new file mode 100644 index 0000000..4fd2b5b --- /dev/null +++ b/packages/sequelize/src/relations.d.ts @@ -0,0 +1,10 @@ +import AtlasHook from '@atlas.js/hook' + +/** + * This hook allows you to describe your model's associations (relations) directly on the model + */ +declare class RelationsHook extends AtlasHook { + afterPrepare(): void +} + +export default RelationsHook diff --git a/packages/sequelize/src/service.d.ts b/packages/sequelize/src/service.d.ts new file mode 100644 index 0000000..02c135b --- /dev/null +++ b/packages/sequelize/src/service.d.ts @@ -0,0 +1,33 @@ +import AtlasService from '@atlas.js/service' +import * as sequelize from 'sequelize' + +/** + * Use Sequelize ORM from within Atlas + * + * This service allows you to use Sequelize for connecting to various SQL databases + */ +declare class Service extends AtlasService { + /** Service runtime configuration values */ + config: Service.Config + + prepare(): Promise + start(service: sequelize.Sequelize): Promise + stop(service: sequelize.Sequelize): Promise +} + +declare namespace Service { + /** Configuration schema available to this service */ + interface Config { + /** + * URI to connect to + * @default sqlite://atlas-db.sqlite + */ + uri?: string + /** + * Connection options + */ + options?: sequelize.Options + } +} + +export default Service