Skip to content
This repository was archived by the owner on Dec 12, 2023. It is now read-only.

Commit ccba4f6

Browse files
committed
Emit helpful warning events throughout lifecycle
1 parent c3acd8c commit ccba4f6

File tree

5 files changed

+85
-2
lines changed

5 files changed

+85
-2
lines changed

src/install.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,15 @@ function installTo (expression: InstallExpression, options: InstallDependencyOpt
125125
meta: true
126126
})
127127
.then(result => {
128-
return writeToConfig(name, tree.raw, options).then(() => result)
128+
return writeToConfig(name, tree.raw, options)
129+
.then(() => {
130+
// Emit postinstall messages.
131+
if (tree.postmessage) {
132+
emitter.emit('postmessage', { name, message: tree.postmessage })
133+
}
134+
135+
return result
136+
})
129137
})
130138
})
131139
}

src/interfaces.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface ConfigJson {
3030
version?: string
3131
files?: string[]
3232
ambient?: boolean
33+
postmessage?: string
3334

3435
// Meta information.
3536
name?: string
@@ -88,6 +89,7 @@ export interface DependencyTree {
8889
browserTypings?: Browser
8990
parent?: DependencyTree
9091
files?: string[]
92+
postmessage?: string
9193
src: string
9294
raw: string
9395
ambient: boolean
@@ -116,6 +118,9 @@ export interface Emitter extends EventEmitter {
116118
on (event: 'compile', listener: (e: CompileEvent) => any): this
117119
on (event: 'compiled', listener: (e: CompiledEvent) => any): this
118120
on (event: 'hastypings', listener: (e: HasTypingsEvent) => any): this
121+
on (event: 'postmessage', listener: (e: PostMessageEvent) => any): this
122+
on (event: 'ambientdependencies', listener: (e: AmbientDependenciesEvent) => any): this
123+
on (event: 'badlocation', listener: (e: BadLocationEvent) => any): this
119124
on (event: string, listener: Function): this
120125

121126
emit (event: 'reference', e: ReferenceEvent): boolean
@@ -125,6 +130,9 @@ export interface Emitter extends EventEmitter {
125130
emit (event: 'compile', e: CompileEvent): boolean
126131
emit (event: 'compiled', e: CompiledEvent): boolean
127132
emit (event: 'hastypings', e: HasTypingsEvent): boolean
133+
emit (event: 'postmessage', e: PostMessageEvent): boolean
134+
emit (event: 'ambientdependencies', e: AmbientDependenciesEvent): boolean
135+
emit (event: 'badlocation', e: BadLocationEvent): boolean
128136
emit (event: string, ...args: any[]): boolean
129137
}
130138

@@ -187,4 +195,30 @@ export interface HasTypingsEvent {
187195
name: string
188196
path: string
189197
typings: string
198+
}
199+
200+
/**
201+
* Message emitted from a module after installation.
202+
*/
203+
export interface PostMessageEvent {
204+
name: string
205+
message: string
206+
}
207+
208+
/**
209+
* Emits known ambient module dependencies by top-level Typings.
210+
*/
211+
export interface AmbientDependenciesEvent {
212+
name: string
213+
raw: string
214+
dependencies: Dependencies
215+
}
216+
217+
/**
218+
* Emitted when a known mutable source is being installed.
219+
*/
220+
export interface BadLocationEvent {
221+
type: string
222+
raw: string
223+
location: string
190224
}

src/lib/compile.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ test('compile', t => {
1919
src: join(FIXTURE_DIR, CONFIG_FILE),
2020
main: 'root',
2121
raw: undefined,
22+
postmessage: undefined,
2223
ambient: false,
2324
browser: {
2425
b: 'browser'
@@ -34,6 +35,7 @@ test('compile', t => {
3435
src: join(FIXTURE_DIR, `a/${CONFIG_FILE}`),
3536
main: undefined,
3637
raw: undefined,
38+
postmessage: undefined,
3739
ambient: false,
3840
typings: 'typed.d.ts',
3941
browserTypings: 'typed.browser.d.ts',
@@ -48,6 +50,7 @@ test('compile', t => {
4850
src: join(FIXTURE_DIR, 'bower.json'),
4951
main: undefined,
5052
raw: undefined,
53+
postmessage: undefined,
5154
ambient: false,
5255
typings: 'typings/b.d.ts',
5356
dependencies: {},
@@ -61,6 +64,7 @@ test('compile', t => {
6164
src: join(FIXTURE_DIR, 'package.json'),
6265
main: undefined,
6366
raw: undefined,
67+
postmessage: undefined,
6468
ambient: false,
6569
typings: 'browser.d.ts',
6670
dependencies: {},
@@ -74,6 +78,7 @@ test('compile', t => {
7478
src: join(FIXTURE_DIR, `dep/${CONFIG_FILE}`),
7579
main: 'dep/main.d.ts',
7680
raw: undefined,
81+
postmessage: undefined,
7782
ambient: false,
7883
dependencies: {},
7984
devDependencies: {},
@@ -195,6 +200,7 @@ test('compile', t => {
195200
src: join(FIXTURE_DIR, CONFIG_FILE),
196201
main: 'file.d.ts',
197202
raw: undefined,
203+
postmessage: undefined,
198204
ambient: false,
199205
dependencies: {},
200206
devDependencies: {},
@@ -241,6 +247,7 @@ test('compile', t => {
241247
src: join(FIXTURE_DIR, CONFIG_FILE),
242248
main: 'index.d.ts',
243249
raw: undefined,
250+
postmessage: undefined,
244251
ambient: false,
245252
dependencies: {},
246253
devDependencies: {},
@@ -277,6 +284,7 @@ test('compile', t => {
277284
src: join(FIXTURE_DIR, CONFIG_FILE),
278285
main: 'index.d.ts',
279286
raw: undefined,
287+
postmessage: undefined,
280288
ambient: false,
281289
dependencies: {},
282290
devDependencies: {},
@@ -327,6 +335,7 @@ test('compile', t => {
327335
const node: DependencyTree = {
328336
src: __filename,
329337
raw: undefined,
338+
postmessage: undefined,
330339
ambient: true,
331340
typings: join(FIXTURE_DIR, 'node.d.ts'),
332341
dependencies: {},
@@ -340,6 +349,7 @@ test('compile', t => {
340349
src: join(FIXTURE_DIR, 'fs.d.ts'),
341350
main: undefined,
342351
raw: undefined,
352+
postmessage: undefined,
343353
ambient: false,
344354
typings: join(FIXTURE_DIR, 'fs.d.ts'),
345355
dependencies: {},
@@ -373,6 +383,7 @@ test('compile', t => {
373383
const node: DependencyTree = {
374384
src: __filename,
375385
raw: undefined,
386+
postmessage: undefined,
376387
ambient: true,
377388
typings,
378389
dependencies: {},
@@ -410,6 +421,7 @@ test('compile', t => {
410421
const node: DependencyTree = {
411422
src: 'http://example.com/typings/typings.json',
412423
raw: undefined,
424+
postmessage: undefined,
413425
ambient: false,
414426
typings: 'http://example.com/typings/index.d.ts',
415427
dependencies: {},
@@ -433,6 +445,7 @@ test('compile', t => {
433445
const node: DependencyTree = {
434446
src: 'http://example.com/typings.json',
435447
raw: undefined,
448+
postmessage: undefined,
436449
ambient: true,
437450
typings: 'http://example.com/index.d.ts',
438451
dependencies: {},
@@ -458,6 +471,7 @@ test('compile', t => {
458471
const main: DependencyTree = {
459472
src: join(FIXTURE_DIR, 'package.json'),
460473
raw: undefined,
474+
postmessage: undefined,
461475
ambient: false,
462476
dependencies: {},
463477
devDependencies: {},
@@ -483,6 +497,7 @@ test('compile', t => {
483497
src: join(FIXTURE_DIR, 'package.json'),
484498
main: 'index.js',
485499
raw: undefined,
500+
postmessage: undefined,
486501
ambient: false,
487502
dependencies: {},
488503
devDependencies: {},
@@ -494,6 +509,7 @@ test('compile', t => {
494509
const dependency: DependencyTree = {
495510
main: 'index.js',
496511
raw: undefined,
512+
postmessage: undefined,
497513
ambient: false,
498514
src: join(FIXTURE_DIR, 'node_modules/test/package.json'),
499515
dependencies: {},
@@ -604,6 +620,7 @@ test('compile', t => {
604620
const node: DependencyTree = {
605621
src: 'http://example.com/typings.json',
606622
raw: undefined,
623+
postmessage: undefined,
607624
ambient: false,
608625
typings: 'http://example.com/index.d.ts',
609626
dependencies: {},
@@ -632,6 +649,7 @@ test('compile', t => {
632649
const tree: DependencyTree = {
633650
src: join(FIXTURE_DIR, 'typings.json'),
634651
raw: undefined,
652+
postmessage: undefined,
635653
ambient: false,
636654
files: ['a.d.ts', 'b.d.ts'],
637655
dependencies: {},

src/lib/dependencies.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ test('dependencies', t => {
1313
const expected: DependencyTree = {
1414
raw: undefined,
1515
ambient: false,
16+
postmessage: undefined,
1617
name: 'foobar',
1718
src: join(RESOLVE_FIXTURE_DIR, 'typings.json'),
1819
main: 'foo.d.ts',
@@ -31,6 +32,7 @@ test('dependencies', t => {
3132
const bowerDep: DependencyTree = {
3233
raw: 'bower:bower-dep',
3334
ambient: false,
35+
postmessage: undefined,
3436
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/bower-dep/bower.json'),
3537
typings: 'bower-dep.d.ts',
3638
browserTypings: undefined,
@@ -49,6 +51,7 @@ test('dependencies', t => {
4951
const exampleDep: DependencyTree = {
5052
raw: 'bower:example',
5153
ambient: false,
54+
postmessage: undefined,
5255
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/example/bower.json'),
5356
main: undefined,
5457
browser: undefined,
@@ -67,6 +70,7 @@ test('dependencies', t => {
6770
const typedDep: DependencyTree = {
6871
raw: 'file:typings/dep.d.ts',
6972
ambient: undefined,
73+
postmessage: undefined,
7074
src: join(RESOLVE_FIXTURE_DIR, 'typings/dep.d.ts'),
7175
typings: join(RESOLVE_FIXTURE_DIR, 'typings/dep.d.ts'),
7276
main: undefined,
@@ -84,6 +88,7 @@ test('dependencies', t => {
8488
const npmDep: DependencyTree = {
8589
raw: 'npm:npm-dep',
8690
ambient: false,
91+
postmessage: undefined,
8792
src: join(RESOLVE_FIXTURE_DIR, 'node_modules/npm-dep/package.json'),
8893
main: './index.js',
8994
browser: undefined,
@@ -111,6 +116,7 @@ test('dependencies', t => {
111116
name: 'dep',
112117
raw: 'bower:dep',
113118
ambient: false,
119+
postmessage: undefined,
114120
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/dep/bower.json'),
115121
typings: undefined,
116122
files: undefined,

src/lib/dependencies.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const DEFAULT_DEPENDENCY: DependencyTree = {
2525
version: undefined,
2626
files: undefined,
2727
ambient: undefined,
28+
postmessage: undefined,
2829
dependencies: {},
2930
devDependencies: {},
3031
peerDependencies: {},
@@ -59,12 +60,18 @@ export function resolveAllDependencies (options: Options): Promise<DependencyTre
5960
* Resolve a single dependency object.
6061
*/
6162
export function resolveDependency (dependency: Dependency, options: Options, parent?: DependencyTree): Promise<DependencyTree> {
62-
const { type, location, raw } = dependency
63+
const { type, location, raw, meta } = dependency
6364

6465
if (type === 'registry') {
6566
return resolveDependencyRegistry(dependency, options, parent)
6667
}
6768

69+
if (type === 'github' || type === 'bitbucket') {
70+
if (meta.sha === 'master') {
71+
options.emitter.emit('badlocation', { type, raw, location })
72+
}
73+
}
74+
6875
return resolveDependencyInternally(type, location, raw, options, parent)
6976
}
7077

@@ -413,6 +420,7 @@ function resolveTypeDependencyFrom (src: string, raw: string, options: Options,
413420
files: Array.isArray(config.files) ? config.files : undefined,
414421
type: PROJECT_NAME,
415422
ambient: !!config.ambient,
423+
postmessagee: typeof config.postmessage === 'string' ? config.postmessage : undefined,
416424
src,
417425
raw,
418426
parent
@@ -426,6 +434,15 @@ function resolveTypeDependencyFrom (src: string, raw: string, options: Options,
426434
const ambientDependencyMap = extend(ambient ? config.ambientDependencies : {})
427435
const ambientDevDependencyMap = extend(ambient && dev ? config.ambientDevDependencies : {})
428436

437+
// Emit "expected" ambient modules when installing top-level.
438+
if (parent == null && config.ambientDependencies) {
439+
options.emitter.emit('ambientdependencies', {
440+
name: config.name,
441+
raw: raw,
442+
dependencies: config.ambientDependencies
443+
})
444+
}
445+
429446
return Promise.all([
430447
resolveTypeDependencyMap(src, dependencyMap, options, tree),
431448
resolveTypeDependencyMap(src, devDependencyMap, options, tree),

0 commit comments

Comments
 (0)