@directus/schema Utility for extracting information about the database schema
Usage The package is initialized by passing it an instance of Knex:
``ts import knex from 'knex'; import schema from '@directus/schema';
const database = knex({ client: 'mysql', connection: { host: '127.0.0.1', user: 'your_database_user', password: 'your_database_password', database: 'myapp_test', charset: 'utf8', }, });
const inspector = schema(database);
export default inspector; `
Examples `ts import inspector from './inspector';
async function logTables() { const tables = await inspector.tables(); console.log(tables); } `
API Note: MySQL doesn't support the schema parameter, as schema and database are ambiguous in MySQL.
Note 2: Some database types might return slightly more information than others. See the type files for a specific overview what to expect from driver to driver.
Note 3: MSSQL doesn't support comment for either tables or columns
$3 #### tables(): Promise
Retrieve all tables in the current database.
`ts await inspector.tables(); // => ['articles', 'images', 'reviews']`
#### tableInfo(table?: string): Promise
Retrieve the table info for the given table, or all tables if no table is specified
`ts await inspector.tableInfo('articles'); // => { // name: 'articles', // schema: 'project', // comment: 'Informational blog posts' // }await inspector.tableInfo(); // => [ // { // name: 'articles', // schema: 'project', // comment: 'Informational blog posts' // }, // { ... }, // { ... } // ]
`####
hasTable(table: string): PromiseCheck if a table exists in the current database.
`ts await inspector.hasTable('articles'); // => true`
$3 ####
columns(table?: string): Promise<{ table: string, column: string }[]>Retrieve all columns in a given table, or all columns if no table is specified
`ts await inspector.columns(); // => [ // { // "table": "articles", // "column": "id" // }, // { // "table": "articles", // "column": "title" // }, // { // "table": "images", // "column": "id" // } // ]await inspector.columns('articles'); // => [ // { // "table": "articles", // "column": "id" // }, // { // "table": "articles", // "column": "title" // } // ]
`####
columnInfo(table?: string, column?: string): PromiseRetrieve all columns from a given table. Returns all columns if
table parameter is undefined.
`ts await inspector.columnInfo('articles'); // => [ // { // name: "id", // table: "articles", // type: "VARCHAR", // defaultValue: null, // maxLength: null, // isNullable: false, // isPrimaryKey: true, // hasAutoIncrement: true, // foreignKeyColumn: null, // foreignKeyTable: null, // comment: "Primary key for the articles collection" // }, // { ... }, // { ... } // ]await inspector.columnInfo('articles', 'id'); // => { // name: "id", // table: "articles", // type: "VARCHAR", // defaultValue: null, // maxLength: null, // isNullable: false, // isPrimaryKey: true, // hasAutoIncrement: true, // foreignKeyColumn: null, // foreignKeyTable: null, // comment: "Primary key for the articles collection" // }
`####
primary(table: string): PromiseRetrieve the primary key column for a given table
`ts await inspector.primary('articles'); // => "id"`
$3 ####
withSchema(schema: string): void_Not supported in MySQL_
Set the schema to use. Note: this is set on the inspector instance and only has to be done once:
`ts inspector.withSchema('my-schema');`
Contributing Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
$3 First start docker containers:
`shell $ docker compose up`Then run tests:
`shell $ npm test`Standard mocha filter (grep) can be used:
`shell $ npm test -- -g '.tableInfo'``@directus/schema - npm explorer