# HG changeset patch # User cin # Date 2018-12-17 01:28:49 # Node ID 43a2828f8abeb9f2f9bfaf9e6d0e0b370c8a6456 # Parent 7a4fac383b1030cb2471f7a04d0122e84e166c95 working version all tests are passed removed _localInstall task diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -2,3 +2,4 @@ syntax: glob .gradle/ build/ node_modules/ +src/typings/ diff --git a/build.gradle b/build.gradle --- a/build.gradle +++ b/build.gradle @@ -5,25 +5,38 @@ if (release != 'rtm') { if(!npmName) npmName = name; -ext.packageName="$npmScope/$npmName"; +if(!["amd", "cjs"].contains(platform)) + throw new Exception("Invalid platform specified: $platform"); + +def moduleTypes = [ + "amd": "amd", + "cjs": "commonjs" +] -def packageDir = "$buildDir/dist" -def distDir = "$packageDir/$platform" -def testDir = "$packageDir/$platform" +ext.packageName="$npmScope/$npmName-$platform"; + +def srcDir = "$projectDir/src" +def typingsDir = "$srcDir/typings" +def distDir = "$buildDir/dist/$platform" +def testDir = "$buildDir/test/$platform" +def moduleType = moduleTypes[platform] + +def sourceSets = ["main", "amd", "cjs", "test"]; task printVersion { doLast { println "version: $version" println "packageName: $packageName" println "platform: $platform" + println "module: $moduleType" } } - task clean { doLast { delete buildDir delete "node_modules/$packageName" + delete typingsDir } } @@ -43,68 +56,79 @@ task _npmInstall() { } } -task _legacyJs(type:Copy) { - from 'src/main/js/' - into distDir +sourceSets.each { + def setName = it.capitalize(); + + def destDir = "$buildDir/compile/$it" + def declDir = "$typingsDir/$it" + def setDir = "$projectDir/src/$it" + + task "_copyJs$setName"(type:Copy) { + from "$setDir/js" + into distDir + } + + task "_compileTs$setName"(dependsOn: _npmInstall, 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', + '-p', "$setDir/tsconfig.json", + '-m', moduleType, + '--outDir', destDir, + '--declarationDir', declDir + } + + task "_buildTs$setName"(dependsOn: "_compileTs$setName", type:Copy) { + from tasks.getByPath("_compileTs$setName"); + into distDir + } } -task _buildTs(dependsOn: _npmInstall, type:Exec) { - inputs.dir('src/main/ts') - inputs.file('src/tsconfig.json') - inputs.file('src/main/tsconfig.json') - outputs.dir(distDir) +_compileTsAmd { + dependsOn _buildTsMain +} - commandLine 'node_modules/.bin/tsc', - '-p', 'src/main/tsconfig.json', - '--outDir', distDir +_buildTsTest { + into testDir +} + +_copyJsTest { + into testDir } task _packageMeta(type: Copy) { inputs.property("version", version) from('.') { - include 'package.json', '.npmignore', 'readme.md', 'license', 'history.md' + include '.npmignore', 'readme.md', 'license', 'history.md' + } + from("$srcDir/package.template.json") { + expand project.properties + rename { "package.json" } } into distDir - doLast { - exec { - workingDir distDir - commandLine 'npm', 'version', version - } - } } -task build(dependsOn: [_legacyJs, _npmInstall, _buildTs, _packageMeta]) { +task build(dependsOn: [_copyJsMain, _copyJsAmd, _npmInstall, _buildTsMain, _buildTsAmd, _packageMeta]) { } -task _localInstall(dependsOn: build, type: Exec) { - inputs.file("$distDir/package.json") - outputs.upToDateWhen { - new File("$projectDir/node_modules/$packageName").exists() - } - - commandLine 'npm', 'install', '--no-save', '--force', distDir +_compileTsTest { + dependsOn build } -task copyJsTests(type: Copy) { - from 'test/js' - into testDir +task buildTests(dependsOn: [_copyJsTest, _buildTsTest]) { } -task buildTests(dependsOn: _localInstall, type: Exec) { - inputs.dir('test/ts') - inputs.file('test/tsconfig.json') - outputs.dir(testDir) - - commandLine 'node_modules/.bin/tsc', '-p', 'test/tsconfig.json', '--outDir', distDir -} - -task test(dependsOn: [copyJsTests, buildTests], type: Exec) { - commandLine 'node', 'run-amd-tests.js' +task test(dependsOn: buildTests, type: Exec) { + commandLine 'node', "$testDir/run-amd-tests.js" } task pack(dependsOn: build, type: Exec) { - workingDir = distDir + workingDir distDir commandLine 'npm', 'pack' } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,8 @@ version=1.2.0 release=rc +author=Implab team platform=amd -descriptrion=Dependency injection, logging, simple and fast text template engine +description=Dependency injection, logging, simple and fast text template engine license=BSD-2-Clause repository=https://bitbucket.org/implab/implabjs npmScope=@implab diff --git a/package-lock.json b/package-lock.json --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@types/node": { - "version": "10.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz", - "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==", + "version": "10.12.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.15.tgz", + "integrity": "sha512-9kROxduaN98QghwwHmxXO2Xz3MaWf+I1sLVAA6KJDF5xix+IyXVhds0MAfdNwtcpSrzhaTsNB0/jnL86fgUhqA==", "dev": true }, "@types/requirejs": { @@ -90,7 +90,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -135,7 +135,7 @@ "dependencies": { "tape": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", + "resolved": "http://registry.npmjs.org/tape/-/tape-2.3.3.tgz", "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", "dev": true, "requires": { @@ -295,7 +295,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -307,7 +307,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -325,7 +325,7 @@ }, "resolve": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { @@ -360,7 +360,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, @@ -417,13 +417,13 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", "dev": true, "requires": { @@ -431,10 +431,16 @@ "xtend": "~2.1.1" } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "typescript": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.1.tgz", - "integrity": "sha512-jw7P2z/h6aPT4AENXDGjcfHTu5CSqzsbZc6YlUIebTyBAq8XaKp78x7VcSh30xwSCcsu5irZkYZUSFP1MrAMbg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", + "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", "dev": true }, "wrappy": { diff --git a/package.json b/package.json --- a/package.json +++ b/package.json @@ -17,16 +17,19 @@ "access": "public" }, "peerDependencies": { - "dojo": "^1.10.0" + "dojo": "^1.10.0", + "tslib": "latest" }, "devDependencies": { "typescript": "latest", "tape": "latest", "@types/tape": "latest", "@types/requirejs": "latest", + "@types/node": "latest", "requirejs": "latest", "faucet": "latest", - "dojo": "^1.10.0" + "dojo": "^1.10.0", + "tslib": "latest" }, "types": "main.d.ts" } diff --git a/src/main/js/Uri.js b/src/amd/js/Uri.js rename from src/main/js/Uri.js rename to src/amd/js/Uri.js diff --git a/src/main/js/data/DataContext.js b/src/amd/js/data/DataContext.js rename from src/main/js/data/DataContext.js rename to src/amd/js/data/DataContext.js diff --git a/src/main/js/data/MapSchema.js b/src/amd/js/data/MapSchema.js rename from src/main/js/data/MapSchema.js rename to src/amd/js/data/MapSchema.js diff --git a/src/main/js/data/ObjectStore.js b/src/amd/js/data/ObjectStore.js rename from src/main/js/data/ObjectStore.js rename to src/amd/js/data/ObjectStore.js diff --git a/src/main/js/data/RestStore.js b/src/amd/js/data/RestStore.js rename from src/main/js/data/RestStore.js rename to src/amd/js/data/RestStore.js diff --git a/src/main/js/data/StatefullStoreAdapter.js b/src/amd/js/data/StatefullStoreAdapter.js rename from src/main/js/data/StatefullStoreAdapter.js rename to src/amd/js/data/StatefullStoreAdapter.js diff --git a/src/main/js/data/StoreAdapter.js b/src/amd/js/data/StoreAdapter.js rename from src/main/js/data/StoreAdapter.js rename to src/amd/js/data/StoreAdapter.js diff --git a/src/main/js/data/_ModelBase.js b/src/amd/js/data/_ModelBase.js rename from src/main/js/data/_ModelBase.js rename to src/amd/js/data/_ModelBase.js diff --git a/src/main/js/data/_StatefulModelMixin.js b/src/amd/js/data/_StatefulModelMixin.js rename from src/main/js/data/_StatefulModelMixin.js rename to src/amd/js/data/_StatefulModelMixin.js diff --git a/src/main/js/data/declare-model.js b/src/amd/js/data/declare-model.js rename from src/main/js/data/declare-model.js rename to src/amd/js/data/declare-model.js diff --git a/src/main/js/declare/_load.js b/src/amd/js/declare/_load.js rename from src/main/js/declare/_load.js rename to src/amd/js/declare/_load.js diff --git a/src/main/js/declare/override.js b/src/amd/js/declare/override.js rename from src/main/js/declare/override.js rename to src/amd/js/declare/override.js diff --git a/src/main/js/log/trace.js b/src/amd/js/log/trace.js rename from src/main/js/log/trace.js rename to src/amd/js/log/trace.js diff --git a/src/main/js/messaging/Client.js b/src/amd/js/messaging/Client.js rename from src/main/js/messaging/Client.js rename to src/amd/js/messaging/Client.js diff --git a/src/main/js/messaging/Destination.js b/src/amd/js/messaging/Destination.js rename from src/main/js/messaging/Destination.js rename to src/amd/js/messaging/Destination.js diff --git a/src/main/js/messaging/Listener.js b/src/amd/js/messaging/Listener.js rename from src/main/js/messaging/Listener.js rename to src/amd/js/messaging/Listener.js diff --git a/src/main/js/messaging/Session.js b/src/amd/js/messaging/Session.js rename from src/main/js/messaging/Session.js rename to src/amd/js/messaging/Session.js diff --git a/src/main/js/text/format-compile.js b/src/amd/js/text/format-compile.js rename from src/main/js/text/format-compile.js rename to src/amd/js/text/format-compile.js diff --git a/src/main/js/text/format.js b/src/amd/js/text/format.js rename from src/main/js/text/format.js rename to src/amd/js/text/format.js diff --git a/src/main/js/text/template-compile.js b/src/amd/js/text/template-compile.js rename from src/main/js/text/template-compile.js rename to src/amd/js/text/template-compile.js diff --git a/src/amd/ts/di/RequireJsHelper.ts b/src/amd/ts/di/RequireJsHelper.ts --- a/src/amd/ts/di/RequireJsHelper.ts +++ b/src/amd/ts/di/RequireJsHelper.ts @@ -1,8 +1,9 @@ import { Uuid } from "../Uuid"; import { argumentNotEmptyString, argumentNotNull } from "../safe"; import { TraceSource } from "../log/TraceSource"; +import m = require("module"); -const trace = TraceSource.get("@implab/core/di/RequireJsHelper"); +const trace = TraceSource.get(m.id); export async function createContextRequire(moduleName: string): Promise { argumentNotEmptyString(moduleName, "moduleName"); diff --git a/src/amd/tsconfig.json b/src/amd/tsconfig.json --- a/src/amd/tsconfig.json +++ b/src/amd/tsconfig.json @@ -1,8 +1,13 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig", "compilerOptions": { "types": [ - "@types/requirejs" + "requirejs" + ], + "rootDir": "ts", + "rootDirs": [ + "ts", + "../typings/main" ] }, "include": [ diff --git a/src/cjs/ts/di/CjsConfiguration.ts b/src/cjs/ts/di/CjsConfiguration.ts deleted file mode 100644 diff --git a/src/cjs/ts/di/CommonJsHelper.ts b/src/cjs/ts/di/CommonJsHelper.ts new file mode 100644 --- /dev/null +++ b/src/cjs/ts/di/CommonJsHelper.ts @@ -0,0 +1,3 @@ +export function createContextResolver(moduleName: string) { + return (m: string) => { }; +} diff --git a/src/cjs/tsconfig.json b/src/cjs/tsconfig.json --- a/src/cjs/tsconfig.json +++ b/src/cjs/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig", "compilerOptions": { "types": [ "@types/node" 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 @@ -26,6 +26,13 @@ import { Cancellation } from "../Cancell const trace = TraceSource.get("@implab/core/di/Configuration"); +declare const define; +declare const require; + +function hasAmdLoader() { + return (typeof define === "function" && define.amd); +} + async function mapAll(data: object | any[], map?: (v, k) => any): Promise { if (data instanceof Array) { return Promise.all(map ? data.map(map) : data); @@ -65,6 +72,25 @@ export class Configuration { this._path = []; } + async loadConfiguration(moduleName: string, ct = Cancellation.none) { + argumentNotEmptyString(moduleName, "moduleName"); + // TODO remove the code below somewehere else + if (hasAmdLoader()) { + // if we have a requirejs loader, use it directly + // don't rely on typescript 'import' function + const m = await new Promise(cb => require(["./RequireJsHelper"], cb)); + const r = m.makeResolver(require); + const config = await r(moduleName); + + return this.applyConfiguration( + config, + m.makeResolver(await m.createContextRequire(moduleName)) + ); + } else { + throw new Error("This feature is supported only with the amd loader"); + } + } + async applyConfiguration(data: object, resolver?: Resolver, ct = Cancellation.none) { argumentNotNull(data, "data"); diff --git a/src/main/tsconfig.json b/src/main/tsconfig.json --- a/src/main/tsconfig.json +++ b/src/main/tsconfig.json @@ -1,5 +1,8 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig", + "compilerOptions": { + "rootDir": "ts" + }, "include": [ "ts/**/*.ts" ] diff --git a/src/package.template.json b/src/package.template.json --- a/src/package.template.json +++ b/src/package.template.json @@ -1,6 +1,6 @@ { "name": "${packageName}", - "version": "${verstion}", + "version": "${version}", "description": "${description}", "main": "main.js", "keywords": [ diff --git a/src/test/js/plan.js b/src/test/js/plan.js --- a/src/test/js/plan.js +++ b/src/test/js/plan.js @@ -1,4 +1,8 @@ -//define(["./ActivatableTests", "./trace-test", "./TraceSourceTests", "./CancellationTests"]); -//define(["./CancellationTests"]); -//define(["./ObservableTests"]); -define(["./ContainerTests"]); \ No newline at end of file +define([ + "./ActivatableTests", + "./trace-test", + "./TraceSourceTests", + "./CancellationTests", + "./ObservableTests", + "./ContainerTests" +]); \ No newline at end of file diff --git a/run-amd-tests.js b/src/test/js/run-amd-tests.js rename from run-amd-tests.js rename to src/test/js/run-amd-tests.js --- a/run-amd-tests.js +++ b/src/test/js/run-amd-tests.js @@ -2,18 +2,13 @@ var requirejs = require('requirejs'); requirejs.config({ baseUrl: '.', - map: { - "*": { - "@implab/core": "core" - } - }, packages: [{ - name: "core", - location: "build/dist" + name: "@implab/core", + location: "build/dist/amd" }, { name: "test", - location: "build/test" + location: "build/test/amd" }, { name: "dojo", diff --git a/src/test/js/trace-test.js b/src/test/js/trace-test.js --- a/src/test/js/trace-test.js +++ b/src/test/js/trace-test.js @@ -3,7 +3,7 @@ define(["tape"], function(tape) { var sourceId = '73a633f3-eab8-49b0-8601-07cae710f234'; var sourceId2 = '3ba9c7cd-ed77-437b-9a2f-1cbeb1226b5b'; tape('Load TraceSource for the module', function(t) { - require(["core/log/trace!" + sourceId, "core/log/TraceSource"], function(trace, TraceSource_1) { + require(["@implab/core/log/trace!" + sourceId, "@implab/core/log/TraceSource"], function(trace, TraceSource_1) { var TraceSource = TraceSource_1.TraceSource; t.equal(trace && trace.id, sourceId, "trace should be taken from the loader plugin parameter"); diff --git a/src/test/tsconfig.json b/src/test/tsconfig.json --- a/src/test/tsconfig.json +++ b/src/test/tsconfig.json @@ -1,12 +1,13 @@ { + "extends": "../tsconfig", "compilerOptions": { - "target": "es3", - "module": "amd", - "sourceMap": true, - "moduleResolution": "node", - "lib": [ - "es2015" - ] + "rootDir": "ts", + "baseUrl": ".", + "paths": { + "@implab/core/*": [ + "../../build/dist/amd/*" + ] + } }, "include" : [ "ts/**/*.ts" diff --git a/src/tsconfig.json b/src/tsconfig.json --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { "target": "es3", - "module": "amd", "sourceMap": true, "declaration": true, "moduleResolution": "node", + "noEmitOnError": true, "listFiles": true, "lib": [ "es5", @@ -12,11 +12,7 @@ "es2015.symbol", "dom" ], - "rootDirs": [ - "main/ts", - "amd/ts", - "cjs/ts" - ], "types": [] - } + }, + "files": [] } \ No newline at end of file