# HG changeset patch # User cin # Date 2019-01-13 00:46:08 # Node ID b23fe4a1683adcfb2dc233e7e509105eeeb80e0e # Parent ba3ff79c283299dc47122a2627575dc154dfd943 Added support for commonjs module format, all tests are pass. diff --git a/build.gradle b/build.gradle --- a/build.gradle +++ b/build.gradle @@ -46,10 +46,11 @@ def createSoursetTasks = { String name, into outDir } - def compileTypingsTask = task "compileTypings$setName"(dependsOn: beforeBuildTask, type: Exec) { + def compileTsTask = task "compileTs$setName"(dependsOn: beforeBuildTask, type: Exec) { inputs.dir("$setDir/ts") inputs.file("$srcDir/tsconfig.json") inputs.file("$setDir/tsconfig.json") + outputs.dir(destDir) outputs.dir(declDir) commandLine 'node_modules/.bin/tsc', @@ -57,36 +58,20 @@ def createSoursetTasks = { String name, '-t', target, '-m', jsmodule, '-d', - '--emitDeclarationOnly', + '--outDir', destDir, '--declarationDir', declDir if (lib) args '--lib', lib } - def compileTsTask = task "compileTs$setName"(dependsOn: beforeBuildTask, type: Exec) { - inputs.dir("$setDir/ts") - inputs.file("$srcDir/tsconfig.json") - inputs.file("$setDir/tsconfig.json") - outputs.dir(destDir) - - commandLine 'node_modules/.bin/tsc', - '-p', "$setDir/tsconfig.json", - '-t', target, - '-m', jsmodule, - '--outDir', destDir - - if (lib) - args '--lib', lib - } - def copyTsOutputTask = task "copyTsOutput$setName"(dependsOn: compileTsTask, type: Copy) { - from compileTsTask + from destDir into outDir } - def copyTypingsTask = task "copyTypings$setName"(dependsOn: compileTypingsTask, type: Copy) { - from compileTypingsTask + def copyTypingsTask = task "copyTypings$setName"(dependsOn: compileTsTask, type: Copy) { + from declDir into outDir } @@ -153,16 +138,18 @@ sourceSets.each { createSoursetTasks(it, testSets.each { createSoursetTasks(it, testDir) } compileTsAmd { - dependsOn compileTypingsMain + dependsOn compileTsMain } -compileTypingsAmd { - dependsOn compileTypingsMain +compileTsCjs { + dependsOn compileTsMain } task build(dependsOn: buildMain) { if (jsmodule == "amd") dependsOn buildAmd + if (jsmodule == "commonjs") + dependsOn buildCjs } compileTsTest { @@ -170,11 +157,33 @@ compileTsTest { } compileTsTestAmd { - dependsOn compileTypingsTestAmd + dependsOn compileTsTest +} + +compileTsTestCjs { + dependsOn compileTsTest } -task test(dependsOn: [buildTest, buildTestAmd], type: Exec) { - commandLine 'node', "$testDir/run-amd-tests.js" +task _installLocalCjsDependency(dependsOn: [buildTestCjs, "_packageMeta"], type: Exec) { + inputs.file("$distDir/package.json") + outputs.upToDateWhen { + new File("$testDir/$packageName").exists() + } + + workingDir testDir + + commandLine 'npm', 'install', '--no-save', '--force', distDir +} + +task test(dependsOn: [buildTest], type: Exec) { + if (jsmodule == "amd") + dependsOn buildTestAmd + if (jsmodule == "commonjs") { + dependsOn buildTestCjs + dependsOn _installLocalCjsDependency + } + + commandLine 'node', "$testDir/run-tests.js" } task _packageMeta(type: Copy) { diff --git a/package-lock.json b/package-lock.json --- a/package-lock.json +++ b/package-lock.json @@ -90,7 +90,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -144,7 +144,7 @@ "dependencies": { "tape": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/tape/-/tape-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", "dev": true, "requires": { @@ -277,7 +277,7 @@ }, "minimist": { "version": "0.0.5", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", "dev": true }, @@ -316,7 +316,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -369,7 +369,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, @@ -432,7 +432,7 @@ }, "through2": { "version": "0.2.3", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", "dev": true, "requires": { diff --git a/src/amd/ts/di/ResolverHelper.ts b/src/amd/ts/di/ResolverHelper.ts --- a/src/amd/ts/di/ResolverHelper.ts +++ b/src/amd/ts/di/ResolverHelper.ts @@ -59,6 +59,12 @@ class ModuleResolver { } export function makeResolver(moduleName: string, contextRequire: Require) { + trace.debug( + "makeResolver moduleName={0}, contextRequire={1}", + moduleName || "", + contextRequire ? typeof (contextRequire) : "" + ); + const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); const resolver = new ModuleResolver(contextRequire, base); diff --git a/src/main/ts/di/Configuration.ts b/src/main/ts/di/Configuration.ts --- a/src/main/ts/di/Configuration.ts +++ b/src/main/ts/di/Configuration.ts @@ -91,7 +91,11 @@ export class Configuration { async loadConfiguration(moduleName: string, contextRequire?: any, ct = Cancellation.none) { argumentNotEmptyString(moduleName, "moduleName"); - trace.log("loadConfiguration moduleName={0}", moduleName); + trace.log( + "loadConfiguration moduleName={0}, contextRequire={1}", + moduleName, + contextRequire ? typeof (contextRequire) : "" + ); this._configName = moduleName; @@ -109,7 +113,7 @@ export class Configuration { applyConfiguration(data: object, contextRequire?: any, ct = Cancellation.none) { argumentNotNull(data, "data"); - return this._applyConfiguration(data, makeResolver(void(0), contextRequire), ct); + return this._applyConfiguration(data, makeResolver(void (0), contextRequire), ct); } async _applyConfiguration(data: object, resolver?: ModuleResolver, ct = Cancellation.none) { diff --git a/src/test/ts/ContainerTests.ts b/src/test/ts/ContainerTests.ts --- a/src/test/ts/ContainerTests.ts +++ b/src/test/ts/ContainerTests.ts @@ -79,7 +79,7 @@ test("Container configure/resolve tests" test("Load configuration from module", async t => { const container = new Container(); - await container.configure("test/mock/config1"); + await container.configure("./mock/config1", { contextRequire: require }); t.pass("The configuration should load"); const f1 = container.resolve("foo"); diff --git a/src/testAmd/js/run-amd-tests.js b/src/testAmd/js/run-amd-tests.js deleted file mode 100644 --- a/src/testAmd/js/run-amd-tests.js +++ /dev/null @@ -1,22 +0,0 @@ -var rjs = require('requirejs'); - -rjs.config({ - baseUrl: '.', - packages: [{ - name: "@implab/core", - location: "build/dist" - }, - { - name: "test", - location: "build/test" - }, - { - name: "dojo", - location: "node_modules/dojo" - } - ], - nodeRequire: require -}); - - -rjs(['test/plan']); \ No newline at end of file diff --git a/src/testAmd/js/run-tests.js b/src/testAmd/js/run-tests.js new file mode 100644 --- /dev/null +++ b/src/testAmd/js/run-tests.js @@ -0,0 +1,22 @@ +var rjs = require('requirejs'); + +rjs.config({ + baseUrl: '.', + packages: [{ + name: "@implab/core", + location: "build/dist" + }, + { + name: "test", + location: "build/test" + }, + { + name: "dojo", + location: "node_modules/dojo" + } + ], + nodeRequire: require +}); + + +rjs(['test/plan']); \ No newline at end of file diff --git a/src/testCjs/js/mock/config1.js b/src/testCjs/js/mock/config1.js new file mode 100644 --- /dev/null +++ b/src/testCjs/js/mock/config1.js @@ -0,0 +1,20 @@ +module.exports = { + foo: { + $type: "./Foo:Foo" + }, + + bar: { + $type: "./Bar:Bar", + params: { + db: { + provider: { + $dependency: "db" + } + }, + foo: { + $type: "./Foo:Foo" + } + } + }, + db: "db://localhost" +}; diff --git a/src/testCjs/js/package.json b/src/testCjs/js/package.json new file mode 100644 --- /dev/null +++ b/src/testCjs/js/package.json @@ -0,0 +1,11 @@ +{ + "name": "@implab/core-test", + "version": "0.0.1-dev", + "main": "main.js", + "author": "Implab team", + "license": "BSD-2-Clause", + "repository": "https://bitbucket.org/implab/implabjs", + "publishConfig": { + "access": "public" + } +} diff --git a/src/testCjs/ts/plan.ts b/src/testCjs/ts/plan.ts new file mode 100644 --- /dev/null +++ b/src/testCjs/ts/plan.ts @@ -0,0 +1,5 @@ +import "./ActivatableTests"; +import "./TraceSourceTests"; +import "./CancellationTests"; +import "./ObservableTests"; +import "./ContainerTests"; diff --git a/src/testCjs/ts/run-tests.ts b/src/testCjs/ts/run-tests.ts new file mode 100644 --- /dev/null +++ b/src/testCjs/ts/run-tests.ts @@ -0,0 +1,1 @@ +import "./plan"; diff --git a/src/testCjs/tsconfig.json b/src/testCjs/tsconfig.json new file mode 100644 --- /dev/null +++ b/src/testCjs/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../tsconfig", + "compilerOptions": { + "rootDir": "ts", + "baseUrl": ".", + "paths": { + "@implab/core/*": [ + "../../build/dist/*" + ] + }, + "types": [ + "node" + ], + "rootDirs": [ + "ts", + "../typings/test" + ] + }, + "include" : [ + "ts/**/*.ts" + ] +} \ No newline at end of file