From 0c6b18a10099c3c4fcc91467639b138a29b2c537 Mon Sep 17 00:00:00 2001 From: rorticus Date: Mon, 31 Jul 2017 12:59:04 -0400 Subject: [PATCH 1/4] Adding support for npm namespaces, issue #134 --- src/loader.ts | 2 +- tests/unit/require.ts | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/loader.ts b/src/loader.ts index 9c25093..14b903e 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -544,7 +544,7 @@ declare const Packages: {} | undefined; } function getModuleInformation(moduleId: string, referenceModule?: DojoLoader.Module): DojoLoader.Module { - let match = moduleId.match(/^([^\/]+)(\/(.+))?$/); + let match = moduleId.match(/^((?:@[^\/]*\/)?[^\/]+)(\/(.+))?$/); let packageId = match ? match[1] : ''; let pack = config && config.pkgs ? config.pkgs[packageId] : {}; let moduleIdInPackage = ''; diff --git a/tests/unit/require.ts b/tests/unit/require.ts index e92fd4e..b2111ed 100644 --- a/tests/unit/require.ts +++ b/tests/unit/require.ts @@ -505,6 +505,27 @@ registerSuite({ ], dfd.callback(function (app: any) { assert.strictEqual(app, 'app', '"app" module should load'); })); + }, + 'slashes in package name'(this: any) { + let dfd = this.async(DEFAULT_TIMEOUT); + + setErrorHandler(dfd); + + global.require.config({ + packages: [ + { + name: '@test/common', + location: './_build/tests/common', + main: 'app' + } + ] + }); + + global.require([ + '@test/common' + ], dfd.callback(function (app: any) { + assert.strictEqual(app, 'app', '"app" module should load'); + })); } }, From cfcc8343d850cc6f57d1b5a720e6331ecb91d3e1 Mon Sep 17 00:00:00 2001 From: rorticus Date: Tue, 1 Aug 2017 07:39:38 -0400 Subject: [PATCH 2/4] Adding functional test for @ package, issue #134 --- .../functional/require/config/packages3.html | 27 +++++++++++++++++++ tests/functional/require/require.ts | 6 +++++ 2 files changed, 33 insertions(+) create mode 100644 tests/functional/require/config/packages3.html diff --git a/tests/functional/require/config/packages3.html b/tests/functional/require/config/packages3.html new file mode 100644 index 0000000..29f419d --- /dev/null +++ b/tests/functional/require/config/packages3.html @@ -0,0 +1,27 @@ + + + + + require.config Test + + + + + + + diff --git a/tests/functional/require/require.ts b/tests/functional/require/require.ts index e395504..d187512 100644 --- a/tests/functional/require/require.ts +++ b/tests/functional/require/require.ts @@ -97,6 +97,12 @@ registerSuite({ return executeTest(this, './config/packages2.html', function (results: any) { assert.strictEqual(results, appMessage, '"app" module should load'); }); + }, + + 'package name with slashes'(this: any) { + return executeTest(this, './config/packages3.html', function (results: any) { + assert.strictEqual(results, appMessage, '"app" module should load'); + }); } }, From e764bcebf86eaaaa980b397396c6d13492c80672 Mon Sep 17 00:00:00 2001 From: rorticus Date: Tue, 1 Aug 2017 08:08:54 -0400 Subject: [PATCH 3/4] Fixing support for @ root packages, issue #134 --- src/loader.ts | 17 +++++++++-------- tests/unit/require.ts | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/loader.ts b/src/loader.ts index 14b903e..6329c0a 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -1,6 +1,7 @@ 'use strict'; import ModuleShim = DojoLoader.ModuleShim; import Module = DojoLoader.Module; +import Package = DojoLoader.Package; declare const load: (module: string) => any; declare const Packages: {} | undefined; @@ -544,16 +545,16 @@ declare const Packages: {} | undefined; } function getModuleInformation(moduleId: string, referenceModule?: DojoLoader.Module): DojoLoader.Module { - let match = moduleId.match(/^((?:@[^\/]*\/)?[^\/]+)(\/(.+))?$/); - let packageId = match ? match[1] : ''; - let pack = config && config.pkgs ? config.pkgs[packageId] : {}; + let packageId = ''; + let pack: Package = {}; let moduleIdInPackage = ''; - if (pack) { - moduleId = packageId + '/' + (moduleIdInPackage = ((match && match[3]) || pack.main || 'main')); - } - else { - packageId = ''; + const matches = Object.keys((config && config.pkgs || {})).filter(pkg => moduleId.indexOf(pkg) === 0).sort((a, b) => a.length > b.length ? -1 : 1); + + if (matches.length) { + packageId = matches.shift() as string; + pack = config.pkgs![packageId]; + moduleId = packageId + '/' + (moduleIdInPackage = (moduleId.substr(packageId.length + 1) || pack.main || 'main')); } let module = modules[moduleId]; diff --git a/tests/unit/require.ts b/tests/unit/require.ts index b2111ed..f7dabcb 100644 --- a/tests/unit/require.ts +++ b/tests/unit/require.ts @@ -526,6 +526,27 @@ registerSuite({ ], dfd.callback(function (app: any) { assert.strictEqual(app, 'app', '"app" module should load'); })); + }, + 'single @ package'(this: any) { + let dfd = this.async(DEFAULT_TIMEOUT); + + setErrorHandler(dfd); + + global.require.config({ + packages: [ + { + name: '@test', + location: './_build/tests', + main: 'app' + } + ] + }); + + global.require([ + '@test/common/app' + ], dfd.callback(function (app: any) { + assert.strictEqual(app, 'app', '"app" module should load'); + })); } }, From d87e5937c13ba8701204057d00b15156908ccfa8 Mon Sep 17 00:00:00 2001 From: rorticus Date: Tue, 1 Aug 2017 08:35:31 -0400 Subject: [PATCH 4/4] Improving package check, issue #134 --- src/loader.ts | 2 +- .../functional/require/config/packages4.html | 26 +++++++++++++++++++ tests/functional/require/require.ts | 6 +++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/functional/require/config/packages4.html diff --git a/src/loader.ts b/src/loader.ts index 6329c0a..9634b54 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -549,7 +549,7 @@ declare const Packages: {} | undefined; let pack: Package = {}; let moduleIdInPackage = ''; - const matches = Object.keys((config && config.pkgs || {})).filter(pkg => moduleId.indexOf(pkg) === 0).sort((a, b) => a.length > b.length ? -1 : 1); + const matches = Object.keys((config && config.pkgs || {})).filter(pkg => (moduleId + '/').indexOf(pkg + '/') === 0).sort((a, b) => a.length > b.length ? -1 : 1); if (matches.length) { packageId = matches.shift() as string; diff --git a/tests/functional/require/config/packages4.html b/tests/functional/require/config/packages4.html new file mode 100644 index 0000000..1ed9d1c --- /dev/null +++ b/tests/functional/require/config/packages4.html @@ -0,0 +1,26 @@ + + + + + require.config Test + + + + + + + diff --git a/tests/functional/require/require.ts b/tests/functional/require/require.ts index d187512..c8e9310 100644 --- a/tests/functional/require/require.ts +++ b/tests/functional/require/require.ts @@ -103,6 +103,12 @@ registerSuite({ return executeTest(this, './config/packages3.html', function (results: any) { assert.strictEqual(results, appMessage, '"app" module should load'); }); + }, + + 'nested packages'(this: any) { + return executeTest(this, './config/packages4.html', function (results: any) { + assert.strictEqual(results, appMessage, '"app" module should load'); + }); } },