# HG changeset patch # User cin # Date 2025-12-07 13:07:34 # Node ID fc69b40ceb984650498d29502a5414b8bc498fb2 # Parent b00d3153045c92a45d9e3103c0539ba031958fd6 restructuring diff --git a/build.gradle b/build.gradle --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,17 @@ typescript { compilerOptions { incremental = true } + + jsVariants { + node { + jsRuntime = "node" + jsModule = "commonjs" + } + browser { + jsRuntime = "browser" + jsModule = "amd" + } + } } def typingsFromMain = { @@ -21,7 +32,15 @@ def typingsFromMain = { } variants { + all { + + } +} + +// варианты сборки +variants { configureEach { variant -> + // для каждого варианта есть стандартные настройки def sourceSetLocation = { setName, self -> self.sourceSetDir = layout.projectDirectory.dir("src/${setName}") self.outputsDir = layout.buildDirectory.dir("${variant.name}/${setName}") @@ -30,82 +49,150 @@ variants { def main = sources.register("${variant.name}Main", sourceSetLocation.curry("main")) def test = sources.register("${variant.name}Test", sourceSetLocation.curry("test")) + // явно добавляем наборы в вариант для применения политик и агрегации результатов sourceSets { - add(main) { - role "main" - } - add(test) { - role "test" - } + add(main, role: "main") + add(test, role: "test") } } register("browser") { - def srcAmd = sources.register("amd", typingsFromMain) + // специфичные наборы для варианта + def srcMainAmd = sources.register("mainAmd", typingsFromMain) def srcTestAmd = sources.register("testAmd", typingsFromMain) + // применение аспекта компиляции ts для данного варианта // advice to all TypescriptCompile tasks typescriptCompile { baseTsConfig = file("src/tsconfig.browser.json") } - // creates npmPackBrowser, npmPublishBrowser - npmPackage { - usePackageJson() - metadata { - name = "@implab/core-amd" - } - content { - from sourceSets.byRoles("main").allOutputs() - } + sourceSets { + add(srcMainAmd, role: "main") + add(srcTestAmd, role: "test") + } + } + register("node") { + // специфичные наборы для варианта + def srcMainCjs = sources.register("mainCjs", typingsFromMain) + def srcTestCjs = sources.register("testCjs", typingsFromMain) + + // применение аспекта компиляции ts для данного варианта + typescriptCompile { + baseTsConfig = file("src/tsconfig.node.json") } sourceSets { - add(srcAmd) { - role "main" - } - add(srcTestAmd) { - role "test" - } + add(srcMainCjs, role: "main") + add(srcTestCjs, role: "test") } } - register("node") { - def srcCjs = sources.register("cjs", typingsFromMain) - def srcTestCjs = sources.register("testCjs", typingsFromMain) - - compileTasks { - baseTsConfig = file("src/tsconfig.node.json") - } - - npmPackage { - name = "@implab/core" - } - - sourceSets { - add srcAmd - add srcTestAmd - } } -npmPackage { +npmPackaging { usePackageJson() metadata { name = "@implab/core" version = project.provider { project.version.toString() } } + + // creates writeBrowserPackageJson npmPackBrowser, npmPublishBrowser + variant("browser") { + metadata { + name = "@implab/core-amd" + } + variantOutputs("main") + } + // creates writeNodePackageJson, npmPackNode, npmPublishNode + variant("node") { + metadata { + name = "@implab/core-node" + } + variantOutputs("main") + } + + // creates writePackageJson, npmPack, npmPublish + package { + metadata { + name = "@implab/core-amd" + } + content { // CopySpec + // как-то кривенько + from(variants.named("node").map { it.outputs("main") }) { + into "dist/node" + } + from(variants.named("browser").map { it.outputs("main") }) { + into "dist/node" + } + } + } +} + +outgoingJs { + +} + +outgoingVariants { + // registers nodeElements configuration + variant("node") { // ConfigurationPublications + // как-то шумно + attribute(JS_RUNTIME, "node") + attribute(JS_MODULE, "commonjs") + attribute(JS_TARGET, "es2020") + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "npm-module")) + + // основной артефакт, связь по имени задачи, неудачный вариант + artifact(tasks.named("npmPackNode")) + + // variants... кругом variants + variants { + exploded { + attributes { + // шумновато, но это стандартное API gradle + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "exploded-npm-module")) + } + // связь по имени задачи, неудачный вариант + artifact(tasks.named("assembleNodeModule")) + } + typings { + attributes { + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "typescript-typings")) + } + // связь по имени задачи, неудачный вариант + artifact(tasks.named("assembleNode")) + } + } + } + variant("browser") { + // все те же проблемы что и для variant("node") + + attribute(JS_RUNTIME, "browser") + attribute(JS_MODULE, "amd") + attribute(JS_TARGET, "es2015") + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "npm-module")) + artifact(tasks.named("npmPackBrowser")) + + variants { + variants { + typings { + attributes { + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, "typescript-typings")) + } + artifact(tasks.named("assembleNode")) + } + } + } + } } publishing { - publications { - local(IvyPublication) { - artifact(packJsTar) { - type = "js" - } + repositories { + ivy { + url "${System.properties["user.home"]}/ivy-repo" } } - - repositories { - ivy { - url "ivy-repo" + publications { + ivy(IvyPublication) { + from components.js } } } \ No newline at end of file diff --git a/src/amd/js/Uri.js b/src/mainAmd/js/Uri.js rename from src/amd/js/Uri.js rename to src/mainAmd/js/Uri.js diff --git a/src/amd/js/data/DataContext.js b/src/mainAmd/js/data/DataContext.js rename from src/amd/js/data/DataContext.js rename to src/mainAmd/js/data/DataContext.js diff --git a/src/amd/js/data/MapSchema.js b/src/mainAmd/js/data/MapSchema.js rename from src/amd/js/data/MapSchema.js rename to src/mainAmd/js/data/MapSchema.js diff --git a/src/amd/js/data/RestStore.js b/src/mainAmd/js/data/RestStore.js rename from src/amd/js/data/RestStore.js rename to src/mainAmd/js/data/RestStore.js diff --git a/src/amd/js/data/StoreAdapter.js b/src/mainAmd/js/data/StoreAdapter.js rename from src/amd/js/data/StoreAdapter.js rename to src/mainAmd/js/data/StoreAdapter.js diff --git a/src/amd/js/data/_ModelBase.js b/src/mainAmd/js/data/_ModelBase.js rename from src/amd/js/data/_ModelBase.js rename to src/mainAmd/js/data/_ModelBase.js diff --git a/src/amd/js/data/_StatefulModelMixin.js b/src/mainAmd/js/data/_StatefulModelMixin.js rename from src/amd/js/data/_StatefulModelMixin.js rename to src/mainAmd/js/data/_StatefulModelMixin.js diff --git a/src/amd/js/declare/override.js b/src/mainAmd/js/declare/override.js rename from src/amd/js/declare/override.js rename to src/mainAmd/js/declare/override.js diff --git a/src/amd/js/messaging/Client.js b/src/mainAmd/js/messaging/Client.js rename from src/amd/js/messaging/Client.js rename to src/mainAmd/js/messaging/Client.js diff --git a/src/amd/js/messaging/Destination.js b/src/mainAmd/js/messaging/Destination.js rename from src/amd/js/messaging/Destination.js rename to src/mainAmd/js/messaging/Destination.js diff --git a/src/amd/js/messaging/Listener.js b/src/mainAmd/js/messaging/Listener.js rename from src/amd/js/messaging/Listener.js rename to src/mainAmd/js/messaging/Listener.js diff --git a/src/amd/js/messaging/Session.js b/src/mainAmd/js/messaging/Session.js rename from src/amd/js/messaging/Session.js rename to src/mainAmd/js/messaging/Session.js diff --git a/src/amd/ts/di/ResolverHelper.ts b/src/mainAmd/ts/di/ResolverHelper.ts rename from src/amd/ts/di/ResolverHelper.ts rename to src/mainAmd/ts/di/ResolverHelper.ts diff --git a/src/amd/ts/log/trace.ts b/src/mainAmd/ts/log/trace.ts rename from src/amd/ts/log/trace.ts rename to src/mainAmd/ts/log/trace.ts diff --git a/src/amd/ts/text/TemplateCompiler.ts b/src/mainAmd/ts/text/TemplateCompiler.ts rename from src/amd/ts/text/TemplateCompiler.ts rename to src/mainAmd/ts/text/TemplateCompiler.ts diff --git a/src/amd/ts/text/TemplateParser.ts b/src/mainAmd/ts/text/TemplateParser.ts rename from src/amd/ts/text/TemplateParser.ts rename to src/mainAmd/ts/text/TemplateParser.ts diff --git a/src/amd/ts/text/format-compile.ts b/src/mainAmd/ts/text/format-compile.ts rename from src/amd/ts/text/format-compile.ts rename to src/mainAmd/ts/text/format-compile.ts diff --git a/src/amd/ts/text/format.ts b/src/mainAmd/ts/text/format.ts rename from src/amd/ts/text/format.ts rename to src/mainAmd/ts/text/format.ts diff --git a/src/amd/ts/text/template-compile.ts b/src/mainAmd/ts/text/template-compile.ts rename from src/amd/ts/text/template-compile.ts rename to src/mainAmd/ts/text/template-compile.ts diff --git a/src/amd/tsconfig.json b/src/mainAmd/tsconfig.json rename from src/amd/tsconfig.json rename to src/mainAmd/tsconfig.json diff --git a/src/cjs/ts/di/ResolverHelper.ts b/src/mainCjs/ts/di/ResolverHelper.ts rename from src/cjs/ts/di/ResolverHelper.ts rename to src/mainCjs/ts/di/ResolverHelper.ts diff --git a/src/cjs/tsconfig.json b/src/mainCjs/tsconfig.json rename from src/cjs/tsconfig.json rename to src/mainCjs/tsconfig.json