Skip to content

Commit 73e19ff

Browse files
committed
feat: use resolveJsonModule to load datasource config
Enable TypeScript feature "resolveJsonModule" to load datasource configurations in a type-safe way using regular "import" statements.
1 parent 0e80e27 commit 73e19ff

File tree

12 files changed

+23
-22
lines changed

12 files changed

+23
-22
lines changed

docs/site/Repositories.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ context.
326326
```ts
327327
import {inject} from '@loopback/core';
328328
import {juggler, AnyObject} from '@loopback/repository';
329-
const config = require('./redis.datasource.json');
329+
import * as config from './redis.datasource.json';
330330

331331
export class RedisDataSource extends juggler.DataSource {
332332
static dataSourceName = 'redis';

docs/site/Testing-your-application.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -652,8 +652,7 @@ instance:
652652

653653
```ts
654654
import {merge} from 'lodash';
655-
656-
const GEO_CODER_CONFIG = require('../src/datasources/geo.datasource.json');
655+
import * as GEO_CODER_CONFIG from '../src/datasources/geo.datasource.json';
657656

658657
function givenGeoService() {
659658
const config = merge({}, GEO_CODER_CONFIG, {

examples/soap-calculator/src/datasources/calculator.datasource.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import {inject} from '@loopback/core';
2-
import {juggler, AnyObject} from '@loopback/repository';
3-
const config = require('./calculator.datasource.json');
2+
import {juggler} from '@loopback/repository';
3+
import * as config from './calculator.datasource.json';
44

55
export class CalculatorDataSource extends juggler.DataSource {
66
static dataSourceName = 'calculator';
77

88
constructor(
99
@inject('datasources.config.calculator', {optional: true})
10-
dsConfig: AnyObject = config,
10+
dsConfig: object = config,
1111
) {
1212
dsConfig = Object.assign({}, dsConfig, {
1313
// A workaround for the current design flaw where inside our monorepo,

examples/todo-list/src/datasources/db.datasource.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
// License text available at https://opensource.org/licenses/MIT
55

66
import {inject} from '@loopback/core';
7-
import {juggler, DataSource} from '@loopback/repository';
8-
const config = require('./db.datasource.json');
7+
import {juggler} from '@loopback/repository';
8+
import * as config from './db.datasource.json';
99

1010
export class DbDataSource extends juggler.DataSource {
1111
static dataSourceName = 'db';
1212

1313
constructor(
1414
@inject('datasources.config.db', {optional: true})
15-
dsConfig: DataSource = config,
15+
dsConfig: object = config,
1616
) {
1717
super(dsConfig);
1818
}

examples/todo/src/datasources/db.datasource.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
// License text available at https://opensource.org/licenses/MIT
55

66
import {inject} from '@loopback/core';
7-
import {juggler, DataSource} from '@loopback/repository';
8-
const config = require('./db.datasource.json');
7+
import {juggler} from '@loopback/repository';
8+
import * as config from './db.datasource.json';
99

1010
export class DbDataSource extends juggler.DataSource {
1111
static dataSourceName = 'db';
1212

1313
constructor(
1414
@inject('datasources.config.db', {optional: true})
15-
dsConfig: DataSource = config,
15+
dsConfig: object = config,
1616
) {
1717
super(dsConfig);
1818
}

examples/todo/src/datasources/geocoder.datasource.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {inject} from '@loopback/core';
77
import {juggler, AnyObject} from '@loopback/repository';
8-
const config = require('./geocoder.datasource.json');
8+
import * as config from './geocoder.datasource.json';
99

1010
export class GeocoderDataSource extends juggler.DataSource {
1111
static dataSourceName = 'geocoder';

examples/todo/test/helpers.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {merge} from 'lodash';
88
import * as path from 'path';
99
import {Todo} from '../src/models/index';
1010
import {GeoPoint} from '../src/services/geocoder.service';
11+
import * as GEO_CODER_CONFIG from '../src/datasources/geocoder.datasource.json';
1112

1213
/*
1314
==============================================================================
@@ -54,8 +55,6 @@ export const aLocation = {
5455
},
5556
};
5657

57-
const GEO_CODER_CONFIG = require('../src/datasources/geocoder.datasource.json');
58-
5958
export function getProxiedGeoCoderConfig(proxy: HttpCachingProxy) {
6059
return merge({}, GEO_CODER_CONFIG, {
6160
options: {

packages/build/config/tsconfig.common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"experimentalDecorators": true,
66
"noImplicitAny": true,
77
"strictNullChecks": true,
8+
"resolveJsonModule": true,
89

910
"lib": ["es2018", "dom", "esnext.asynciterable"],
1011
"module": "commonjs",

packages/cli/generators/datasource/templates/datasource.ts.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import {inject} from '@loopback/core';
2-
import {juggler, AnyObject} from '@loopback/repository';
3-
const config = require('./<%= jsonFileName %>');
2+
import {juggler} from '@loopback/repository';
3+
import * as config from './<%= jsonFileName %>';
44

55
export class <%= className %>DataSource extends juggler.DataSource {
66
static dataSourceName = '<%= name %>';
77

88
constructor(
99
@inject('datasources.config.<%= name %>', {optional: true})
10-
dsConfig: AnyObject = config,
10+
dsConfig: object = config,
1111
) {
1212
super(dsConfig);
1313
}

packages/cli/test/integration/generators/datasource.integration.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,11 @@ function checkBasicDataSourceFiles() {
163163
assert.fileContent(expectedTSFile, /import {inject} from '@loopback\/core';/);
164164
assert.fileContent(
165165
expectedTSFile,
166-
/import {juggler, AnyObject} from '@loopback\/repository';/,
166+
/import {juggler} from '@loopback\/repository';/,
167167
);
168168
assert.fileContent(
169169
expectedTSFile,
170-
/const config = require\('.\/ds.datasource.json'\)/,
170+
/import \* as config from '.\/ds.datasource.json';/,
171171
);
172172
assert.fileContent(
173173
expectedTSFile,

0 commit comments

Comments
 (0)