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

Commit 263610d

Browse files
committed
Use typings.json/ambient to error on compile
1 parent 2ba8f8e commit 263610d

File tree

5 files changed

+65
-1
lines changed

5 files changed

+65
-1
lines changed

src/interfaces.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface ConfigJson {
2929
browserTypings?: string | Browser
3030
version?: string
3131
files?: string[]
32+
ambient?: boolean
3233

3334
// Meta information.
3435
name?: string
@@ -89,6 +90,7 @@ export interface DependencyTree {
8990
files?: string[]
9091
src: string
9192
raw: string
93+
ambient: boolean
9294
dependencies: DependencyBranch
9395
devDependencies: DependencyBranch
9496
peerDependencies: DependencyBranch

src/lib/compile.spec.ts

Lines changed: 40 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+
ambient: false,
2223
browser: {
2324
b: 'browser'
2425
},
@@ -33,6 +34,7 @@ test('compile', t => {
3334
src: join(FIXTURE_DIR, `a/${CONFIG_FILE}`),
3435
main: undefined,
3536
raw: undefined,
37+
ambient: false,
3638
typings: 'typed.d.ts',
3739
browserTypings: 'typed.browser.d.ts',
3840
dependencies: {},
@@ -46,6 +48,7 @@ test('compile', t => {
4648
src: join(FIXTURE_DIR, 'bower.json'),
4749
main: undefined,
4850
raw: undefined,
51+
ambient: false,
4952
typings: 'typings/b.d.ts',
5053
dependencies: {},
5154
devDependencies: {},
@@ -58,6 +61,7 @@ test('compile', t => {
5861
src: join(FIXTURE_DIR, 'package.json'),
5962
main: undefined,
6063
raw: undefined,
64+
ambient: false,
6165
typings: 'browser.d.ts',
6266
dependencies: {},
6367
devDependencies: {},
@@ -70,6 +74,7 @@ test('compile', t => {
7074
src: join(FIXTURE_DIR, `dep/${CONFIG_FILE}`),
7175
main: 'dep/main.d.ts',
7276
raw: undefined,
77+
ambient: false,
7378
dependencies: {},
7479
devDependencies: {},
7580
peerDependencies: {},
@@ -190,6 +195,7 @@ test('compile', t => {
190195
src: join(FIXTURE_DIR, CONFIG_FILE),
191196
main: 'file.d.ts',
192197
raw: undefined,
198+
ambient: false,
193199
dependencies: {},
194200
devDependencies: {},
195201
peerDependencies: {},
@@ -235,6 +241,7 @@ test('compile', t => {
235241
src: join(FIXTURE_DIR, CONFIG_FILE),
236242
main: 'index.d.ts',
237243
raw: undefined,
244+
ambient: false,
238245
dependencies: {},
239246
devDependencies: {},
240247
peerDependencies: {},
@@ -270,6 +277,7 @@ test('compile', t => {
270277
src: join(FIXTURE_DIR, CONFIG_FILE),
271278
main: 'index.d.ts',
272279
raw: undefined,
280+
ambient: false,
273281
dependencies: {},
274282
devDependencies: {},
275283
peerDependencies: {},
@@ -319,6 +327,7 @@ test('compile', t => {
319327
const node: DependencyTree = {
320328
src: __filename,
321329
raw: undefined,
330+
ambient: true,
322331
typings: join(FIXTURE_DIR, 'node.d.ts'),
323332
dependencies: {},
324333
devDependencies: {},
@@ -331,6 +340,7 @@ test('compile', t => {
331340
src: join(FIXTURE_DIR, 'fs.d.ts'),
332341
main: undefined,
333342
raw: undefined,
343+
ambient: false,
334344
typings: join(FIXTURE_DIR, 'fs.d.ts'),
335345
dependencies: {},
336346
devDependencies: {},
@@ -363,6 +373,7 @@ test('compile', t => {
363373
const node: DependencyTree = {
364374
src: __filename,
365375
raw: undefined,
376+
ambient: true,
366377
typings,
367378
dependencies: {},
368379
devDependencies: {},
@@ -399,6 +410,7 @@ test('compile', t => {
399410
const node: DependencyTree = {
400411
src: 'http://example.com/typings/typings.json',
401412
raw: undefined,
413+
ambient: false,
402414
typings: 'http://example.com/typings/index.d.ts',
403415
dependencies: {},
404416
devDependencies: {},
@@ -417,12 +429,36 @@ test('compile', t => {
417429
})
418430
})
419431

432+
t.test('ambient compile error', t => {
433+
const node: DependencyTree = {
434+
src: 'http://example.com/typings.json',
435+
raw: undefined,
436+
ambient: true,
437+
typings: 'http://example.com/index.d.ts',
438+
dependencies: {},
439+
devDependencies: {},
440+
peerDependencies: {},
441+
ambientDependencies: {},
442+
ambientDevDependencies: {}
443+
}
444+
445+
const emitter = new EventEmitter()
446+
447+
t.plan(1)
448+
449+
return compile(node, { name: 'name', cwd: __dirname, ambient: false, meta: false, emitter })
450+
.catch(function (result) {
451+
t.equal(result.message, 'Unable to compile "name", the typings are meant to be installed as ambient but attempted to be compiled as an external module')
452+
})
453+
})
454+
420455
t.test('no main or typings error', t => {
421456
const FIXTURE_DIR = join(FIXTURES_DIR, 'main-resolve-error')
422457

423458
const main: DependencyTree = {
424459
src: join(FIXTURE_DIR, 'package.json'),
425460
raw: undefined,
461+
ambient: false,
426462
dependencies: {},
427463
devDependencies: {},
428464
peerDependencies: {},
@@ -447,6 +483,7 @@ test('compile', t => {
447483
src: join(FIXTURE_DIR, 'package.json'),
448484
main: 'index.js',
449485
raw: undefined,
486+
ambient: false,
450487
dependencies: {},
451488
devDependencies: {},
452489
peerDependencies: {},
@@ -457,6 +494,7 @@ test('compile', t => {
457494
const dependency: DependencyTree = {
458495
main: 'index.js',
459496
raw: undefined,
497+
ambient: false,
460498
src: join(FIXTURE_DIR, 'node_modules/test/package.json'),
461499
dependencies: {},
462500
devDependencies: {},
@@ -566,6 +604,7 @@ test('compile', t => {
566604
const node: DependencyTree = {
567605
src: 'http://example.com/typings.json',
568606
raw: undefined,
607+
ambient: false,
569608
typings: 'http://example.com/index.d.ts',
570609
dependencies: {},
571610
devDependencies: {},
@@ -593,6 +632,7 @@ test('compile', t => {
593632
const tree: DependencyTree = {
594633
src: join(FIXTURE_DIR, 'typings.json'),
595634
raw: undefined,
635+
ambient: false,
596636
files: ['a.d.ts', 'b.d.ts'],
597637
dependencies: {},
598638
devDependencies: {},

src/lib/compile.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ export default function compile (tree: DependencyTree, options: Options): Promis
4141
const { name } = options
4242
const readFiles: ts.Map<Promise<string>> = {}
4343

44+
if (tree.ambient && !options.ambient) {
45+
return Promise.reject(new TypingsError(
46+
`Unable to compile "${options.name}", the typings are meant to be installed as ` +
47+
`ambient but attempted to be compiled as an external module`
48+
))
49+
}
50+
4451
return Promise.all([
4552
compileDependencyTree(tree, extend(options, { browser: false, readFiles })),
4653
compileDependencyTree(tree, extend(options, { browser: true, readFiles }))

src/lib/dependencies.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ test('dependencies', t => {
1212
t.test('resolve a dependency tree', t => {
1313
const expected: DependencyTree = {
1414
raw: undefined,
15+
ambient: false,
1516
name: 'foobar',
1617
src: join(RESOLVE_FIXTURE_DIR, 'typings.json'),
1718
main: 'foo.d.ts',
@@ -29,6 +30,7 @@ test('dependencies', t => {
2930

3031
const bowerDep: DependencyTree = {
3132
raw: 'bower:bower-dep',
33+
ambient: false,
3234
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/bower-dep/bower.json'),
3335
typings: 'bower-dep.d.ts',
3436
browserTypings: undefined,
@@ -46,6 +48,7 @@ test('dependencies', t => {
4648

4749
const exampleDep: DependencyTree = {
4850
raw: 'bower:example',
51+
ambient: false,
4952
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/example/bower.json'),
5053
main: undefined,
5154
browser: undefined,
@@ -63,6 +66,7 @@ test('dependencies', t => {
6366

6467
const typedDep: DependencyTree = {
6568
raw: 'file:typings/dep.d.ts',
69+
ambient: undefined,
6670
src: join(RESOLVE_FIXTURE_DIR, 'typings/dep.d.ts'),
6771
typings: join(RESOLVE_FIXTURE_DIR, 'typings/dep.d.ts'),
6872
main: undefined,
@@ -79,6 +83,7 @@ test('dependencies', t => {
7983

8084
const npmDep: DependencyTree = {
8185
raw: 'npm:npm-dep',
86+
ambient: false,
8287
src: join(RESOLVE_FIXTURE_DIR, 'node_modules/npm-dep/package.json'),
8388
main: './index.js',
8489
browser: undefined,
@@ -105,6 +110,7 @@ test('dependencies', t => {
105110
main: undefined,
106111
name: 'dep',
107112
raw: 'bower:dep',
113+
ambient: false,
108114
src: join(RESOLVE_FIXTURE_DIR, 'bower_components/dep/bower.json'),
109115
typings: undefined,
110116
files: undefined,

src/lib/dependencies.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const DEFAULT_DEPENDENCY: DependencyTree = {
2424
browserTypings: undefined,
2525
version: undefined,
2626
files: undefined,
27+
ambient: undefined,
2728
dependencies: {},
2829
devDependencies: {},
2930
peerDependencies: {},
@@ -231,6 +232,7 @@ function resolveBowerDependencyFrom (
231232
browser: bowerJson.browser,
232233
typings: bowerJson.typings,
233234
browserTypings: bowerJson.browserTypings,
235+
ambient: false,
234236
src,
235237
raw,
236238
parent
@@ -328,6 +330,7 @@ function resolveNpmDependencyFrom (src: string, raw: string, options: Options, p
328330
browser: packageJson.browser,
329331
typings: packageJson.typings,
330332
browserTypings: packageJson.browserTypings,
333+
ambient: false,
331334
src,
332335
raw,
333336
parent
@@ -409,6 +412,7 @@ function resolveTypeDependencyFrom (src: string, raw: string, options: Options,
409412
browserTypings: config.browserTypings,
410413
files: Array.isArray(config.files) ? config.files : undefined,
411414
type: PROJECT_NAME,
415+
ambient: !!config.ambient,
412416
src,
413417
raw,
414418
parent
@@ -507,13 +511,18 @@ function mergeDependencies (root: DependencyTree, ...trees: DependencyTree[]): D
507511
continue
508512
}
509513

510-
const { name, raw, src, main, browser, typings, browserTypings, parent, files } = tree
514+
const { name, raw, src, main, browser, typings, browserTypings, parent, files, ambient } = tree
511515

512516
// The parent needs to always be set.
513517
if (parent != null) {
514518
dependency.parent = parent
515519
}
516520

521+
// Merge known ambient properties.
522+
if (ambient != null) {
523+
dependency.ambient = ambient
524+
}
525+
517526
if (typeof name === 'string') {
518527
dependency.name = name
519528
}

0 commit comments

Comments
 (0)