semantifold 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -15
- package/build/index.d.ts +48 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +57 -8
- package/build/src/artifact-path.d.ts +23 -1
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +45 -3
- package/build/src/artifacts.d.ts.map +1 -1
- package/build/src/artifacts.js +66 -1
- package/build/src/backends/c-validation.d.ts.map +1 -1
- package/build/src/backends/c-validation.js +7 -3
- package/build/src/backends/cpp-validation.d.ts.map +1 -1
- package/build/src/backends/cpp-validation.js +7 -3
- package/build/src/backends/csharp.js +7 -1
- package/build/src/backends/dart-runtime.d.ts +2 -0
- package/build/src/backends/dart-runtime.d.ts.map +1 -0
- package/build/src/backends/dart-runtime.js +41 -0
- package/build/src/backends/dart.d.ts +20 -0
- package/build/src/backends/dart.d.ts.map +1 -0
- package/build/src/backends/dart.js +321 -0
- package/build/src/backends/effects.d.ts +60 -0
- package/build/src/backends/effects.d.ts.map +1 -0
- package/build/src/backends/effects.js +746 -0
- package/build/src/backends/go.js +18 -4
- package/build/src/backends/identifiers.d.ts +36 -4
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +154 -10
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +27 -4
- package/build/src/backends/ios.d.ts +68 -0
- package/build/src/backends/ios.d.ts.map +1 -0
- package/build/src/backends/ios.js +1503 -0
- package/build/src/backends/java.d.ts.map +1 -1
- package/build/src/backends/java.js +429 -36
- package/build/src/backends/javascript.d.ts +6 -0
- package/build/src/backends/javascript.d.ts.map +1 -1
- package/build/src/backends/javascript.js +380 -24
- package/build/src/backends/kotlin-runtime.d.ts +3 -0
- package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
- package/build/src/backends/kotlin-runtime.js +29 -0
- package/build/src/backends/kotlin.d.ts +23 -0
- package/build/src/backends/kotlin.d.ts.map +1 -0
- package/build/src/backends/kotlin.js +136 -0
- package/build/src/backends/native-validation.d.ts +2 -2
- package/build/src/backends/native-validation.d.ts.map +1 -1
- package/build/src/backends/native-validation.js +2 -2
- package/build/src/backends/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +39 -7
- package/build/src/backends/php-stdlib-support.d.ts +19 -0
- package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
- package/build/src/backends/php-stdlib-support.js +227 -0
- package/build/src/backends/php.d.ts.map +1 -1
- package/build/src/backends/php.js +448 -33
- package/build/src/backends/program.d.ts +81 -0
- package/build/src/backends/program.d.ts.map +1 -0
- package/build/src/backends/program.js +1308 -0
- package/build/src/backends/python.js +7 -1
- package/build/src/backends/ruby.d.ts.map +1 -1
- package/build/src/backends/ruby.js +310 -24
- package/build/src/backends/rust-runtime.d.ts +7 -0
- package/build/src/backends/rust-runtime.d.ts.map +1 -0
- package/build/src/backends/rust-runtime.js +32 -0
- package/build/src/backends/rust-validation.d.ts +9 -0
- package/build/src/backends/rust-validation.d.ts.map +1 -0
- package/build/src/backends/rust-validation.js +78 -0
- package/build/src/backends/rust.d.ts +24 -0
- package/build/src/backends/rust.d.ts.map +1 -0
- package/build/src/backends/rust.js +344 -0
- package/build/src/backends/scalars.d.ts +14 -6
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +167 -17
- package/build/src/backends/shared.d.ts +23 -4
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +2158 -62
- package/build/src/backends/stdlib-support.d.ts +14 -0
- package/build/src/backends/stdlib-support.d.ts.map +1 -0
- package/build/src/backends/stdlib-support.js +237 -0
- package/build/src/backends/swift-runtime.d.ts +3 -0
- package/build/src/backends/swift-runtime.d.ts.map +1 -0
- package/build/src/backends/swift-runtime.js +14 -0
- package/build/src/backends/swift.d.ts +8 -0
- package/build/src/backends/swift.d.ts.map +1 -0
- package/build/src/backends/swift.js +127 -0
- package/build/src/backends/typescript.d.ts.map +1 -1
- package/build/src/backends/typescript.js +344 -24
- package/build/src/backends/wasm.d.ts +43 -0
- package/build/src/backends/wasm.d.ts.map +1 -0
- package/build/src/backends/wasm.js +2164 -0
- package/build/src/backends/writer.d.ts +235 -4
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +468 -3
- package/build/src/diagnostic.d.ts +4 -3
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +5 -3
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +5 -3
- package/build/src/frontends/cpp.d.ts.map +1 -1
- package/build/src/frontends/cpp.js +5 -3
- package/build/src/frontends/csharp.d.ts.map +1 -1
- package/build/src/frontends/csharp.js +7 -3
- package/build/src/frontends/dart.d.ts +10 -0
- package/build/src/frontends/dart.d.ts.map +1 -0
- package/build/src/frontends/dart.js +913 -0
- package/build/src/frontends/index.d.ts +3 -1
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +15 -5
- package/build/src/frontends/java.d.ts +110 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +1725 -70
- package/build/src/frontends/javascript-typescript.d.ts +69 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +1825 -93
- package/build/src/frontends/kotlin.d.ts +10 -0
- package/build/src/frontends/kotlin.d.ts.map +1 -0
- package/build/src/frontends/kotlin.js +685 -0
- package/build/src/frontends/php.d.ts +118 -1
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +1583 -76
- package/build/src/frontends/program.d.ts +74 -0
- package/build/src/frontends/program.d.ts.map +1 -0
- package/build/src/frontends/program.js +989 -0
- package/build/src/frontends/ruby.d.ts +68 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +1446 -101
- package/build/src/frontends/rust-parser.d.ts +11 -0
- package/build/src/frontends/rust-parser.d.ts.map +1 -0
- package/build/src/frontends/rust-parser.js +15 -0
- package/build/src/frontends/rust.d.ts +14 -0
- package/build/src/frontends/rust.d.ts.map +1 -0
- package/build/src/frontends/rust.js +715 -0
- package/build/src/frontends/scalars.d.ts +10 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +28 -2
- package/build/src/frontends/swift.d.ts +10 -0
- package/build/src/frontends/swift.d.ts.map +1 -0
- package/build/src/frontends/swift.js +860 -0
- package/build/src/frontends/types.d.ts +186 -0
- package/build/src/frontends/types.d.ts.map +1 -0
- package/build/src/frontends/types.js +634 -0
- package/build/src/language-registry.d.ts +46 -4
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +167 -13
- package/build/src/mapping.d.ts +2 -2
- package/build/src/mapping.d.ts.map +1 -1
- package/build/src/mapping.js +31 -10
- package/build/src/semantic/capabilities.d.ts +66 -0
- package/build/src/semantic/capabilities.d.ts.map +1 -0
- package/build/src/semantic/capabilities.js +649 -0
- package/build/src/semantic/effects.d.ts +26 -0
- package/build/src/semantic/effects.d.ts.map +1 -0
- package/build/src/semantic/effects.js +764 -0
- package/build/src/semantic/generics.d.ts +23 -0
- package/build/src/semantic/generics.d.ts.map +1 -0
- package/build/src/semantic/generics.js +61 -0
- package/build/src/semantic/lifetime.d.ts +37 -0
- package/build/src/semantic/lifetime.d.ts.map +1 -0
- package/build/src/semantic/lifetime.js +527 -0
- package/build/src/semantic/provenance.d.ts +9 -2
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +462 -20
- package/build/src/semantic/scalars.d.ts +11 -0
- package/build/src/semantic/scalars.d.ts.map +1 -1
- package/build/src/semantic/scalars.js +16 -1
- package/build/src/semantic/stdlib.d.ts +254 -0
- package/build/src/semantic/stdlib.d.ts.map +1 -0
- package/build/src/semantic/stdlib.js +880 -0
- package/build/src/semantic/types.d.ts +2952 -202
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +688 -15
- package/build/src/semantic/validate.d.ts +85 -5
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +2576 -98
- package/build/src/stdlib-facades.d.ts +304 -0
- package/build/src/stdlib-facades.d.ts.map +1 -0
- package/build/src/stdlib-facades.js +1167 -0
- package/build/src/stdlib-negotiation.d.ts +69 -0
- package/build/src/stdlib-negotiation.d.ts.map +1 -0
- package/build/src/stdlib-negotiation.js +403 -0
- package/build/src/stdlib-providers.d.ts +72 -0
- package/build/src/stdlib-providers.d.ts.map +1 -0
- package/build/src/stdlib-providers.js +339 -0
- package/build/src/toolchains.d.ts +55 -1
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +15 -4
- package/docs/architecture.md +45 -13
- package/docs/dart.md +60 -0
- package/docs/goals.md +3 -3
- package/docs/ios.md +121 -0
- package/docs/kotlin.md +42 -0
- package/docs/language-support.md +231 -26
- package/docs/multi-file-modules.md +52 -0
- package/docs/parser-qualification.md +121 -8
- package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
- package/docs/rust.md +88 -0
- package/docs/source-maps.md +15 -7
- package/docs/standard-library-portability.md +39 -8
- package/docs/swift.md +44 -0
- package/docs/testing.md +366 -4
- package/docs/webassembly.md +52 -0
- package/index.js +63 -8
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
- package/package.json +5 -2
- package/src/artifact-path.js +47 -2
- package/src/artifacts.js +67 -0
- package/src/backends/c-validation.js +6 -1
- package/src/backends/cpp-validation.js +6 -1
- package/src/backends/csharp.js +3 -0
- package/src/backends/dart-runtime.js +41 -0
- package/src/backends/dart.js +326 -0
- package/src/backends/effects.js +705 -0
- package/src/backends/go.js +14 -2
- package/src/backends/identifiers.js +160 -9
- package/src/backends/index.js +27 -2
- package/src/backends/ios.js +1612 -0
- package/src/backends/java.js +454 -36
- package/src/backends/javascript.js +389 -23
- package/src/backends/kotlin-runtime.js +29 -0
- package/src/backends/kotlin.js +141 -0
- package/src/backends/native-validation.js +1 -1
- package/src/backends/ordered-expressions.js +40 -6
- package/src/backends/php-stdlib-support.js +239 -0
- package/src/backends/php.js +469 -32
- package/src/backends/program.js +1407 -0
- package/src/backends/python.js +3 -0
- package/src/backends/ruby.js +326 -23
- package/src/backends/rust-runtime.js +34 -0
- package/src/backends/rust-validation.js +75 -0
- package/src/backends/rust.js +335 -0
- package/src/backends/scalars.js +141 -16
- package/src/backends/shared.js +2304 -124
- package/src/backends/stdlib-support.js +234 -0
- package/src/backends/swift-runtime.js +14 -0
- package/src/backends/swift.js +132 -0
- package/src/backends/typescript.js +349 -23
- package/src/backends/wasm.js +2208 -0
- package/src/backends/writer.js +520 -2
- package/src/diagnostic.js +4 -2
- package/src/frontends/c.js +4 -2
- package/src/frontends/cpp.js +4 -2
- package/src/frontends/csharp.js +4 -2
- package/src/frontends/dart.js +963 -0
- package/src/frontends/index.js +14 -4
- package/src/frontends/java.js +1977 -69
- package/src/frontends/javascript-typescript.js +2046 -102
- package/src/frontends/kotlin.js +713 -0
- package/src/frontends/php.js +1725 -79
- package/src/frontends/program.js +1062 -0
- package/src/frontends/ruby.js +1624 -98
- package/src/frontends/rust-parser.js +18 -0
- package/src/frontends/rust.js +714 -0
- package/src/frontends/scalars.js +31 -1
- package/src/frontends/swift.js +893 -0
- package/src/frontends/types.js +750 -0
- package/src/language-registry.js +172 -12
- package/src/mapping.js +33 -9
- package/src/semantic/capabilities.js +671 -0
- package/src/semantic/effects.js +737 -0
- package/src/semantic/generics.js +58 -0
- package/src/semantic/lifetime.js +517 -0
- package/src/semantic/provenance.js +412 -19
- package/src/semantic/scalars.js +17 -0
- package/src/semantic/stdlib.js +921 -0
- package/src/semantic/types.js +765 -14
- package/src/semantic/validate.js +2934 -209
- package/src/stdlib-facades.js +1211 -0
- package/src/stdlib-negotiation.js +446 -0
- package/src/stdlib-providers.js +377 -0
- package/src/toolchains.js +16 -3
|
@@ -6,6 +6,7 @@ import { validateNativeGraph } from "./native-validation.js";
|
|
|
6
6
|
import { validateBackendModule } from "./shared.js";
|
|
7
7
|
import { SourceWriter } from "./writer.js";
|
|
8
8
|
import { finalizeMapping, toSourceMapV3 } from "../mapping.js";
|
|
9
|
+
import { preflightEffectCapabilities } from "./effects.js";
|
|
9
10
|
const syntheticArtifactBase = Object.freeze(["__semantifold_artifacts__"]);
|
|
10
11
|
/**
|
|
11
12
|
* Generates target source from a semantic module.
|
|
@@ -37,12 +38,27 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
|
|
|
37
38
|
filename = record.defaultFilename;
|
|
38
39
|
if (sourceMapFilename === undefined)
|
|
39
40
|
sourceMapFilename = `${filename}.map`;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const genericDeclaration = [...module?.records ?? [], ...module?.functions ?? []]
|
|
42
|
+
.find((declaration) => (declaration?.typeParameters?.length ?? 0) > 0);
|
|
43
|
+
if (genericDeclaration && !record.features.typeParametersAndGenerics) {
|
|
44
|
+
unsupportedCapability(/** @type {import("../semantic/types.js").BackendLanguage} */ (language), "Task 012 type parameters and generics", genericDeclaration.location ?? module.location);
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(module?.records) && module.records.length > 0 && !record.features.closedRecords) {
|
|
47
|
+
unsupportedCapability(/** @type {import("../semantic/types.js").BackendLanguage} */ (language), "Task 009 closed records", module.records[0].location ?? module.location);
|
|
48
|
+
}
|
|
49
|
+
preflightEffectCapabilities(module, /** @type {import("../semantic/types.js").BackendLanguage} */ (language));
|
|
50
|
+
if (language == "cpp" || language == "kotlin" || language == "swift")
|
|
51
|
+
validateNativeGraph(module, language);
|
|
52
|
+
validateBackendModule(module, /** @type {import("../semantic/types.js").BackendLanguage} */ (language));
|
|
43
53
|
if (language == "cpp" && (mapDirective != "none" || sourceMapFilename != "program.cpp.map")) {
|
|
44
54
|
unsupportedCapability(language, "CPP map directive or alternate source-map filename", module.location);
|
|
45
55
|
}
|
|
56
|
+
if (language == "swift" && (mapDirective != "none" || sourceMapFilename != "program.swift.map")) {
|
|
57
|
+
unsupportedCapability(language, "Swift map directive or alternate source-map filename", module.location);
|
|
58
|
+
}
|
|
59
|
+
if (language == "kotlin" && (mapDirective != "none" || sourceMapFilename != "Program.kt.map")) {
|
|
60
|
+
unsupportedCapability(language, "Kotlin map directive or alternate source-map filename", module.location);
|
|
61
|
+
}
|
|
46
62
|
if (!isValidFilenameMetadata(filename)) {
|
|
47
63
|
throw new TypeError("Generated filename must be a non-empty single-line string.");
|
|
48
64
|
}
|
|
@@ -51,6 +67,10 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
|
|
|
51
67
|
}
|
|
52
68
|
if (language == "cpp" && filename != "program.cpp")
|
|
53
69
|
unsupportedCapability(language, "artifact filename other than program.cpp", module.location);
|
|
70
|
+
if (language == "swift" && filename != "program.swift")
|
|
71
|
+
unsupportedCapability(language, "artifact filename other than program.swift", module.location);
|
|
72
|
+
if (language == "kotlin" && filename != "Program.kt")
|
|
73
|
+
unsupportedCapability(language, "artifact filename other than Program.kt", module.location);
|
|
54
74
|
if (language == "java" && filename.split(/[\\/]/u).at(-1) != "Main.java") {
|
|
55
75
|
unsupportedCapability(language, "artifact filename basename other than Main.java", module.location);
|
|
56
76
|
}
|
|
@@ -74,6 +94,9 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
|
|
|
74
94
|
writer.synthetic(`//# sourceMappingURL=data:application/json;charset=utf-8;base64,${encoded}\n`, "inline source map directive", [module]);
|
|
75
95
|
}
|
|
76
96
|
const mapping = finalizeMapping(writer.finish());
|
|
97
|
+
if (language == "swift" || language == "kotlin") {
|
|
98
|
+
languageRegistry.resolve(language, "frontend", module.location)({ filename, source: mapping.generated.content });
|
|
99
|
+
}
|
|
77
100
|
return {
|
|
78
101
|
code: mapping.generated.content,
|
|
79
102
|
filename,
|
|
@@ -136,4 +159,4 @@ function base64Utf8(value) {
|
|
|
136
159
|
binary += String.fromCharCode(byte);
|
|
137
160
|
return btoa(binary);
|
|
138
161
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUE7QUFFMUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUM7SUFDL0MsT0FBTyxzQkFBc0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDO0lBQ3BILE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuRixNQUFNLE1BQU0sR0FBRyxnQkFB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QUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV2RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5LCB1bnN1cHBvcnRlZFJvbGV9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7aXNWYWxpZEZpbGVuYW1lTWV0YWRhdGF9IGZyb20gXCIuLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4uL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7dmFsaWRhdGVOYXRpdmVHcmFwaH0gZnJvbSBcIi4vbmF0aXZlLXZhbGlkYXRpb24uanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRNb2R1bGV9IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge1NvdXJjZVdyaXRlcn0gZnJvbSBcIi4vd3JpdGVyLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5jb25zdCBzeW50aGV0aWNBcnRpZmFjdEJhc2UgPSBPYmplY3QuZnJlZXplKFtcIl9fc2VtYW50aWZvbGRfYXJ0aWZhY3RzX19cIl0pXG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldCBzb3VyY2UgZnJvbSBhIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW5lcmF0ZWQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTb3VyY2Uoe2xhbmd1YWdlLCBtb2R1bGV9KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtsYW5ndWFnZSwgbW9kdWxlfSkuY29kZVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzb3VyY2UgdG9nZXRoZXIgd2l0aCBhdXRob3JpdGF0aXZlIHJpY2ggYW5kIFNvdXJjZSBNYXAgdjMgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5maWxlbmFtZV0gLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBzb3VyY2UgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgc291cmNlIG1hcCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbaW5wdXQuc291cmNlc10gLSBTb3VyY2UgY29udGVudCBmb3IgbGVnYWN5IG9yIGFzc2VtYmxlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtsYW5ndWFnZSwgZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSA9IFwibm9uZVwiLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkge1xuICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCBcInRleHRCYWNrZW5kXCIsIG1vZHVsZT8ubG9jYXRpb24pXG4gIGNvbnN0IHJlY29yZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGxhbmd1YWdlKVxuXG4gIGlmIChyZWNvcmQuYXJ0aWZhY3RNdWx0aXBsaWNpdHkgIT0gXCJzaW5nbGVcIikgdW5zdXBwb3J0ZWRSb2xlKGxhbmd1YWdlLCBcInNpbmdsZS10ZXh0IGJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcbiAgaWYgKGZpbGVuYW1lID09PSB1bmRlZmluZWQpIGZpbGVuYW1lID0gcmVjb3JkLmRlZmF1bHRGaWxlbmFtZVxuICBpZiAoc291cmNlTWFwRmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgc291cmNlTWFwRmlsZW5hbWUgPSBgJHtmaWxlbmFtZX0ubWFwYFxuICBpZiAobGFuZ3VhZ2UgPT0gXCJjcHBcIikgdmFsaWRhdGVOYXRpdmVHcmFwaChtb2R1bGUsIFwiY3BwXCIpXG4gIHZhbGlkYXRlQmFja2VuZE1vZHVsZShtb2R1bGUsIGxhbmd1YWdlKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImNwcFwiICYmIChtYXBEaXJlY3RpdmUgIT0gXCJub25lXCIgfHwgc291cmNlTWFwRmlsZW5hbWUgIT0gXCJwcm9ncmFtLmNwcC5tYXBcIikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiQ1BQIG1hcCBkaXJlY3RpdmUgb3IgYWx0ZXJuYXRlIHNvdXJjZS1tYXAgZmlsZW5hbWVcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKCFpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YShmaWxlbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdGVkIGZpbGVuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc2luZ2xlLWxpbmUgc3RyaW5nLlwiKVxuICB9XG4gIGlmICghaXNWYWxpZEZpbGVuYW1lTWV0YWRhdGEoc291cmNlTWFwRmlsZW5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNvdXJjZSBtYXAgZmlsZW5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzaW5nbGUtbGluZSBzdHJpbmcuXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgJiYgZmlsZW5hbWUgIT0gXCJwcm9ncmFtLmNwcFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgb3RoZXIgdGhhbiBwcm9ncmFtLmNwcFwiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBmaWxlbmFtZS5zcGxpdCgvW1xcXFwvXS91KS5hdCgtMSkgIT0gXCJNYWluLmphdmFcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBiYXNlbmFtZSBvdGhlciB0aGFuIE1haW4uamF2YVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgZmlsZW5hbWUuc3BsaXQoL1tcXFxcL10vdSkuYXQoLTEpICE9IFwicHJvZ3JhbS5weVwiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImFydGlmYWN0IGZpbGVuYW1lIGJhc2VuYW1lIG90aGVyIHRoYW4gcHJvZ3JhbS5weVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKCFbXCJub25lXCIsIFwiZXh0ZXJuYWxcIiwgXCJpbmxpbmVcIl0uaW5jbHVkZXMobWFwRGlyZWN0aXZlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgbWFwIGRpcmVjdGl2ZTogJHttYXBEaXJlY3RpdmV9YClcbiAgaWYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFzY3JpcHRcIiAmJiBsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTb3VyY2UgbWFwIGRpcmVjdGl2ZXMgYXJlIHN1cHBvcnRlZCBvbmx5IGZvciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IG91dHB1dHMuXCIpXG4gIH1cblxuICBjb25zdCB3cml0ZXIgPSBuZXcgU291cmNlV3JpdGVyKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1vZHVsZSwgc291cmNlc30pXG5cbiAgYmFja2VuZChtb2R1bGUsIHdyaXRlcilcblxuICBjb25zdCBzb3VyY2VNYXAgPSB0b1NvdXJjZU1hcFYzKHdyaXRlci5maW5pc2goKSlcblxuICBpZiAobWFwRGlyZWN0aXZlID09IFwiZXh0ZXJuYWxcIikge1xuICAgIGNvbnN0IHNvdXJjZU1hcFVybCA9IGVuY29kZUFydGlmYWN0UGF0aChyZWxhdGl2ZUFydGlmYWN0UGF0aChmaWxlbmFtZSwgc291cmNlTWFwRmlsZW5hbWUpKVxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgLy8jIHNvdXJjZU1hcHBpbmdVUkw9JHtzb3VyY2VNYXBVcmx9XFxuYCwgXCJleHRlcm5hbCBzb3VyY2UgbWFwIGRpcmVjdGl2ZVwiLCBbbW9kdWxlXSlcbiAgfSBlbHNlIGlmIChtYXBEaXJlY3RpdmUgPT0gXCJpbmxpbmVcIikge1xuICAgIGNvbnN0IGVuY29kZWQgPSBiYXNlNjRVdGY4KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpXG5cbiAgICB3cml0ZXIuc3ludGhldGljKGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJHtlbmNvZGVkfVxcbmAsIFwiaW5saW5lIHNvdXJjZSBtYXAgZGlyZWN0aXZlXCIsIFttb2R1bGVdKVxuICB9XG5cbiAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyh3cml0ZXIuZmluaXNoKCkpXG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50LFxuICAgIGZpbGVuYW1lLFxuICAgIGxhbmd1YWdlLFxuICAgIG1hcHBpbmcsXG4gICAgc291cmNlTWFwLFxuICAgIHNvdXJjZU1hcEZpbGVuYW1lXG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmUgbG9naWNhbCBhcnRpZmFjdCBmaWxlbmFtZSByZWxhdGl2ZSB0byBhbm90aGVyIGFydGlmYWN0J3MgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGdlbmVyYXRlZEZpbGVuYW1lIC0gR2VuZXJhdGVkIGNvZGUgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRlZEZpbGVuYW1lIC0gUmVsYXRlZCBhcnRpZmFjdCBmaWxlbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFBvcnRhYmxlIGZvcndhcmQtc2xhc2ggcmVsYXRpdmUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmVBcnRpZmFjdFBhdGgoZ2VuZXJhdGVkRmlsZW5hbWUsIHJlbGF0ZWRGaWxlbmFtZSkge1xuICBjb25zdCBnZW5lcmF0ZWREaXJlY3RvcnkgPSByZXNvbHZlZEFydGlmYWN0UGF0aFBhcnRzKGdlbmVyYXRlZEZpbGVuYW1lKVxuICBjb25zdCByZWxhdGVkID0gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhyZWxhdGVkRmlsZW5hbWUpXG5cbiAgZ2VuZXJhdGVkRGlyZWN0b3J5LnBvcCgpXG4gIGxldCBjb21tb24gPSAwXG5cbiAgd2hpbGUgKGNvbW1vbiA8IGdlbmVyYXRlZERpcmVjdG9yeS5sZW5ndGggJiYgY29tbW9uIDwgcmVsYXRlZC5sZW5ndGggJiYgZ2VuZXJhdGVkRGlyZWN0b3J5W2NvbW1vbl0gPT0gcmVsYXRlZFtjb21tb25dKSBjb21tb24rK1xuXG4gIHJldHVybiBbLi4uZ2VuZXJhdGVkRGlyZWN0b3J5LnNsaWNlKGNvbW1vbikubWFwKCgpID0+IFwiLi5cIiksIC4uLnJlbGF0ZWQuc2xpY2UoY29tbW9uKV0uam9pbihcIi9cIikgfHwgXCIuXCJcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBzZXBhcmF0b3JzIGFuZCBkb3Qgc2VnbWVudHMgYWdhaW5zdCB0aGUgc2hhcmVkIHN5bnRoZXRpYyBhcnRpZmFjdCBiYXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gTG9naWNhbCBhcnRpZmFjdCBmaWxlbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gUmVzb2x2ZWQgcGF0aCBwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhmaWxlbmFtZSkge1xuICBjb25zdCBwYXJ0cyA9IFsuLi5zeW50aGV0aWNBcnRpZmFjdEJhc2VdXG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGZpbGVuYW1lLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKS5zcGxpdChcIi9cIikpIHtcbiAgICBpZiAocGFydCA9PSBcIlwiIHx8IHBhcnQgPT0gXCIuXCIpIGNvbnRpbnVlXG4gICAgaWYgKHBhcnQgPT0gXCIuLlwiKSB7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gc3ludGhldGljQXJ0aWZhY3RCYXNlLmxlbmd0aCkgcGFydHMucG9wKClcbiAgICB9IGVsc2UgcGFydHMucHVzaChwYXJ0KVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzXG59XG5cbi8qKlxuICogRW5jb2RlcyBsaXRlcmFsIGZpbGVzeXN0ZW0gcGF0aCBzZWdtZW50cyB3aXRob3V0IGVuY29kaW5nIHN0cnVjdHVyYWwgc2xhc2hlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUmVsYXRpdmUgYXJ0aWZhY3QgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVSTC1zYWZlIHJlbGF0aXZlIGFydGlmYWN0IHBhdGguXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFydGlmYWN0UGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoKHBhcnQpID0+IGVuY29kZVVSSUNvbXBvbmVudChwYXJ0KSkuam9pbihcIi9cIilcbn1cblxuLyoqXG4gKiBFbmNvZGVzIFVuaWNvZGUgSlNPTiB3aXRob3V0IHJlbHlpbmcgb24gYSBOb2RlLW9ubHkgYXJ0aWZhY3QgY29udHJhY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBVbmljb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBVVEYtOC5cbiAqL1xuZnVuY3Rpb24gYmFzZTY0VXRmOCh2YWx1ZSkge1xuICBsZXQgYmluYXJ5ID0gXCJcIlxuXG4gIGZvciAoY29uc3QgYnl0ZSBvZiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKSBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuXG4gIHJldHVybiBidG9hKGJpbmFyeSlcbn1cbiJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFBO0FBRTFFOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQy9DLE9BQU8sc0JBQXNCLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUNwSCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVB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QUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHO1lBQUUsU0FBUTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUMsTUFBTTtnQkFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDOUQsQ0FBQzs7WUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJO0lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzFFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsS0FBSztJQUN2QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFFZixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXZGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHksIHVuc3VwcG9ydGVkUm9sZX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YX0gZnJvbSBcIi4uL2FydGlmYWN0LXBhdGguanNcIlxuaW1wb3J0IHtsYW5ndWFnZVJlZ2lzdHJ5fSBmcm9tIFwiLi4vbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZU5hdGl2ZUdyYXBofSBmcm9tIFwiLi9uYXRpdmUtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZE1vZHVsZX0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuLi9tYXBwaW5nLmpzXCJcbmltcG9ydCB7cHJlZmxpZ2h0RWZmZWN0Q2FwYWJpbGl0aWVzfSBmcm9tIFwiLi9lZmZlY3RzLmpzXCJcbmNvbnN0IHN5bnRoZXRpY0FydGlmYWN0QmFzZSA9IE9iamVjdC5mcmVlemUoW1wiX19zZW1hbnRpZm9sZF9hcnRpZmFjdHNfX1wiXSlcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGFyZ2V0IHNvdXJjZSBmcm9tIGEgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEdlbmVyYXRlZCBzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNvdXJjZSh7bGFuZ3VhZ2UsIG1vZHVsZX0pIHtcbiAgcmV0dXJuIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe2xhbmd1YWdlLCBtb2R1bGV9KS5jb2RlXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNvdXJjZSB0b2dldGhlciB3aXRoIGF1dGhvcml0YXRpdmUgcmljaCBhbmQgU291cmNlIE1hcCB2MyBtYXBwaW5ncy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIE91dHB1dCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJub25lXCIgfCBcImV4dGVybmFsXCIgfCBcImlubGluZVwifSBbaW5wdXQubWFwRGlyZWN0aXZlXSAtIEphdmFTY3JpcHQtZmFtaWx5IHNvdXJjZSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBzb3VyY2UgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZSBjb250ZW50IGZvciBsZWdhY3kgb3IgYXNzZW1ibGVkIG1vZHVsZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3R9IEdlbmVyYXRlZCBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe2xhbmd1YWdlLCBmaWxlbmFtZSwgbWFwRGlyZWN0aXZlID0gXCJub25lXCIsIG1vZHVsZSwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9KSB7XG4gIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIFwidGV4dEJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcbiAgY29uc3QgcmVjb3JkID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG5cbiAgaWYgKHJlY29yZC5hcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcInNpbmdsZVwiKSB1bnN1cHBvcnRlZFJvbGUobGFuZ3VhZ2UsIFwic2luZ2xlLXRleHQgYmFja2VuZFwiLCBtb2R1bGU/LmxvY2F0aW9uKVxuICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgZmlsZW5hbWUgPSByZWNvcmQuZGVmYXVsdEZpbGVuYW1lXG4gIGlmIChzb3VyY2VNYXBGaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSBzb3VyY2VNYXBGaWxlbmFtZSA9IGAke2ZpbGVuYW1lfS5tYXBgXG4gIGNvbnN0IGdlbmVyaWNEZWNsYXJhdGlvbiA9IFsuLi5tb2R1bGU/LnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZT8uZnVuY3Rpb25zID8/IFtdXVxuICAgIC5maW5kKChkZWNsYXJhdGlvbikgPT4gKGRlY2xhcmF0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID8/IDApID4gMClcblxuICBpZiAoZ2VuZXJpY0RlY2xhcmF0aW9uICYmICFyZWNvcmQuZmVhdHVyZXMudHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljcykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSgvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljc1wiLCBnZW5lcmljRGVjbGFyYXRpb24ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8ucmVjb3JkcykgJiYgbW9kdWxlLnJlY29yZHMubGVuZ3RoID4gMCAmJiAhcmVjb3JkLmZlYXR1cmVzLmNsb3NlZFJlY29yZHMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIG1vZHVsZS5yZWNvcmRzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBwcmVmbGlnaHRFZmZlY3RDYXBhYmlsaXRpZXMobW9kdWxlLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSlcbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpIHZhbGlkYXRlTmF0aXZlR3JhcGgobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSkpXG5cbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgJiYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPSBcInByb2dyYW0uY3BwLm1hcFwiKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJDUFAgbWFwIGRpcmVjdGl2ZSBvciBhbHRlcm5hdGUgc291cmNlLW1hcCBmaWxlbmFtZVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwic3dpZnRcIiAmJiAobWFwRGlyZWN0aXZlICE9IFwibm9uZVwiIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9IFwicHJvZ3JhbS5zd2lmdC5tYXBcIikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiU3dpZnQgbWFwIGRpcmVjdGl2ZSBvciBhbHRlcm5hdGUgc291cmNlLW1hcCBmaWxlbmFtZVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPSBcIlByb2dyYW0ua3QubWFwXCIpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIktvdGxpbiBtYXAgZGlyZWN0aXZlIG9yIGFsdGVybmF0ZSBzb3VyY2UtbWFwIGZpbGVuYW1lXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmICghaXNWYWxpZEZpbGVuYW1lTWV0YWRhdGEoZmlsZW5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRlZCBmaWxlbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHNpbmdsZS1saW5lIHN0cmluZy5cIilcbiAgfVxuICBpZiAoIWlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhKHNvdXJjZU1hcEZpbGVuYW1lKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTb3VyY2UgbWFwIGZpbGVuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc2luZ2xlLWxpbmUgc3RyaW5nLlwiKVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcImNwcFwiICYmIGZpbGVuYW1lICE9IFwicHJvZ3JhbS5jcHBcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gcHJvZ3JhbS5jcHBcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJzd2lmdFwiICYmIGZpbGVuYW1lICE9IFwicHJvZ3JhbS5zd2lmdFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgb3RoZXIgdGhhbiBwcm9ncmFtLnN3aWZ0XCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgZmlsZW5hbWUgIT0gXCJQcm9ncmFtLmt0XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBvdGhlciB0aGFuIFByb2dyYW0ua3RcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgZmlsZW5hbWUuc3BsaXQoL1tcXFxcL10vdSkuYXQoLTEpICE9IFwiTWFpbi5qYXZhXCIpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgYmFzZW5hbWUgb3RoZXIgdGhhbiBNYWluLmphdmFcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIGZpbGVuYW1lLnNwbGl0KC9bXFxcXC9dL3UpLmF0KC0xKSAhPSBcInByb2dyYW0ucHlcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBiYXNlbmFtZSBvdGhlciB0aGFuIHByb2dyYW0ucHlcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghW1wibm9uZVwiLCBcImV4dGVybmFsXCIsIFwiaW5saW5lXCJdLmluY2x1ZGVzKG1hcERpcmVjdGl2ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIG1hcCBkaXJlY3RpdmU6ICR7bWFwRGlyZWN0aXZlfWApXG4gIGlmIChtYXBEaXJlY3RpdmUgIT0gXCJub25lXCIgJiYgbGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU291cmNlIG1hcCBkaXJlY3RpdmVzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3IgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBvdXRwdXRzLlwiKVxuICB9XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IFNvdXJjZVdyaXRlcih7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGJhY2tlbmQobW9kdWxlLCB3cml0ZXIpXG5cbiAgY29uc3Qgc291cmNlTWFwID0gdG9Tb3VyY2VNYXBWMyh3cml0ZXIuZmluaXNoKCkpXG5cbiAgaWYgKG1hcERpcmVjdGl2ZSA9PSBcImV4dGVybmFsXCIpIHtcbiAgICBjb25zdCBzb3VyY2VNYXBVcmwgPSBlbmNvZGVBcnRpZmFjdFBhdGgocmVsYXRpdmVBcnRpZmFjdFBhdGgoZmlsZW5hbWUsIHNvdXJjZU1hcEZpbGVuYW1lKSlcblxuICAgIHdyaXRlci5zeW50aGV0aWMoYC8vIyBzb3VyY2VNYXBwaW5nVVJMPSR7c291cmNlTWFwVXJsfVxcbmAsIFwiZXh0ZXJuYWwgc291cmNlIG1hcCBkaXJlY3RpdmVcIiwgW21vZHVsZV0pXG4gIH0gZWxzZSBpZiAobWFwRGlyZWN0aXZlID09IFwiaW5saW5lXCIpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gYmFzZTY0VXRmOChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKVxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCR7ZW5jb2RlZH1cXG5gLCBcImlubGluZSBzb3VyY2UgbWFwIGRpcmVjdGl2ZVwiLCBbbW9kdWxlXSlcbiAgfVxuXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInN3aWZ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIikge1xuICAgIGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgXCJmcm9udGVuZFwiLCBtb2R1bGUubG9jYXRpb24pKHtmaWxlbmFtZSwgc291cmNlOiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50fSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29kZTogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCxcbiAgICBmaWxlbmFtZSxcbiAgICBsYW5ndWFnZSxcbiAgICBtYXBwaW5nLFxuICAgIHNvdXJjZU1hcCxcbiAgICBzb3VyY2VNYXBGaWxlbmFtZVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIGxvZ2ljYWwgYXJ0aWZhY3QgZmlsZW5hbWUgcmVsYXRpdmUgdG8gYW5vdGhlciBhcnRpZmFjdCdzIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnZW5lcmF0ZWRGaWxlbmFtZSAtIEdlbmVyYXRlZCBjb2RlIGFydGlmYWN0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0ZWRGaWxlbmFtZSAtIFJlbGF0ZWQgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQb3J0YWJsZSBmb3J3YXJkLXNsYXNoIHJlbGF0aXZlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlQXJ0aWZhY3RQYXRoKGdlbmVyYXRlZEZpbGVuYW1lLCByZWxhdGVkRmlsZW5hbWUpIHtcbiAgY29uc3QgZ2VuZXJhdGVkRGlyZWN0b3J5ID0gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhnZW5lcmF0ZWRGaWxlbmFtZSlcbiAgY29uc3QgcmVsYXRlZCA9IHJlc29sdmVkQXJ0aWZhY3RQYXRoUGFydHMocmVsYXRlZEZpbGVuYW1lKVxuXG4gIGdlbmVyYXRlZERpcmVjdG9yeS5wb3AoKVxuICBsZXQgY29tbW9uID0gMFxuXG4gIHdoaWxlIChjb21tb24gPCBnZW5lcmF0ZWREaXJlY3RvcnkubGVuZ3RoICYmIGNvbW1vbiA8IHJlbGF0ZWQubGVuZ3RoICYmIGdlbmVyYXRlZERpcmVjdG9yeVtjb21tb25dID09IHJlbGF0ZWRbY29tbW9uXSkgY29tbW9uKytcblxuICByZXR1cm4gWy4uLmdlbmVyYXRlZERpcmVjdG9yeS5zbGljZShjb21tb24pLm1hcCgoKSA9PiBcIi4uXCIpLCAuLi5yZWxhdGVkLnNsaWNlKGNvbW1vbildLmpvaW4oXCIvXCIpIHx8IFwiLlwiXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgc2VwYXJhdG9ycyBhbmQgZG90IHNlZ21lbnRzIGFnYWluc3QgdGhlIHNoYXJlZCBzeW50aGV0aWMgYXJ0aWZhY3QgYmFzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIExvZ2ljYWwgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IFJlc29sdmVkIHBhdGggcGFydHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVkQXJ0aWZhY3RQYXRoUGFydHMoZmlsZW5hbWUpIHtcbiAgY29uc3QgcGFydHMgPSBbLi4uc3ludGhldGljQXJ0aWZhY3RCYXNlXVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBmaWxlbmFtZS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikuc3BsaXQoXCIvXCIpKSB7XG4gICAgaWYgKHBhcnQgPT0gXCJcIiB8fCBwYXJ0ID09IFwiLlwiKSBjb250aW51ZVxuICAgIGlmIChwYXJ0ID09IFwiLi5cIikge1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IHN5bnRoZXRpY0FydGlmYWN0QmFzZS5sZW5ndGgpIHBhcnRzLnBvcCgpXG4gICAgfSBlbHNlIHBhcnRzLnB1c2gocGFydClcbiAgfVxuXG4gIHJldHVybiBwYXJ0c1xufVxuXG4vKipcbiAqIEVuY29kZXMgbGl0ZXJhbCBmaWxlc3lzdGVtIHBhdGggc2VnbWVudHMgd2l0aG91dCBlbmNvZGluZyBzdHJ1Y3R1cmFsIHNsYXNoZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFJlbGF0aXZlIGFydGlmYWN0IHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwtc2FmZSByZWxhdGl2ZSBhcnRpZmFjdCBwYXRoLlxuICovXG5mdW5jdGlvbiBlbmNvZGVBcnRpZmFjdFBhdGgocGF0aCkge1xuICByZXR1cm4gcGF0aC5zcGxpdChcIi9cIikubWFwKChwYXJ0KSA9PiBlbmNvZGVVUklDb21wb25lbnQocGFydCkpLmpvaW4oXCIvXCIpXG59XG5cbi8qKlxuICogRW5jb2RlcyBVbmljb2RlIEpTT04gd2l0aG91dCByZWx5aW5nIG9uIGEgTm9kZS1vbmx5IGFydGlmYWN0IGNvbnRyYWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgVVRGLTguXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NFV0ZjgodmFsdWUpIHtcbiAgbGV0IGJpbmFyeSA9IFwiXCJcblxuICBmb3IgKGNvbnN0IGJ5dGUgb2YgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSkgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSlcblxuICByZXR1cm4gYnRvYShiaW5hcnkpXG59XG4iXX0=
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type ConfigurationFragment = {
|
|
2
|
+
content: string;
|
|
3
|
+
field: string;
|
|
4
|
+
};
|
|
5
|
+
export type ConfigurationTextPart = string | ConfigurationFragment;
|
|
6
|
+
export type ConfigurationLine = string | readonly ConfigurationTextPart[];
|
|
7
|
+
export type ConfigurationSpan = {
|
|
8
|
+
end: number;
|
|
9
|
+
field: string;
|
|
10
|
+
start: number;
|
|
11
|
+
};
|
|
12
|
+
export type RenderedConfigurationText = {
|
|
13
|
+
content: string;
|
|
14
|
+
configurationSpans: ConfigurationSpan[];
|
|
15
|
+
};
|
|
16
|
+
export type ConfigurationArtifactSpan = {
|
|
17
|
+
end: number;
|
|
18
|
+
field: string;
|
|
19
|
+
path: string;
|
|
20
|
+
start: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Preflights one complete project against the delivered Swift Tasks 001-004 profile.
|
|
24
|
+
* @param {object} input - iOS application generation input.
|
|
25
|
+
* @param {import("../semantic/types.js").SemanticModule} [input.module] - Single module to normalize.
|
|
26
|
+
* @param {import("../semantic/types.js").SemanticProgram} [input.program] - Caller-owned Task 010 project.
|
|
27
|
+
* @param {import("../semantic/types.js").IosApplicationConfigurationInput} [input.configuration] - Closed application configuration.
|
|
28
|
+
* @param {import("../semantic/types.js").IosApplicationAssetInput[]} [input.assets] - Exact caller-provided assets.
|
|
29
|
+
* @returns {{assets: import("../semantic/types.js").IosApplicationAssetInput[], configuration: import("../semantic/types.js").IosApplicationConfiguration, modulePaths: Map<string, string>, modules: import("../semantic/types.js").SemanticModule[], program: import("../semantic/types.js").SemanticProgram, sources: {content: string, filename: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} Prepared application program.
|
|
30
|
+
*/
|
|
31
|
+
export declare function preflightIosApplication(input: {
|
|
32
|
+
module?: import("../semantic/types.js").SemanticModule;
|
|
33
|
+
program?: import("../semantic/types.js").SemanticProgram;
|
|
34
|
+
configuration?: import("../semantic/types.js").IosApplicationConfigurationInput;
|
|
35
|
+
assets?: import("../semantic/types.js").IosApplicationAssetInput[];
|
|
36
|
+
}): {
|
|
37
|
+
assets: import("../semantic/types.js").IosApplicationAssetInput[];
|
|
38
|
+
configuration: import("../semantic/types.js").IosApplicationConfiguration;
|
|
39
|
+
modulePaths: Map<string, string>;
|
|
40
|
+
modules: import("../semantic/types.js").SemanticModule[];
|
|
41
|
+
program: import("../semantic/types.js").SemanticProgram;
|
|
42
|
+
sources: {
|
|
43
|
+
content: string;
|
|
44
|
+
filename: string;
|
|
45
|
+
language?: import("../semantic/types.js").SemanticLanguage;
|
|
46
|
+
}[];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Generates the deterministic semantic Swift portion of one iOS application artifact set.
|
|
50
|
+
* @param {Parameters<typeof preflightIosApplication>[0]} input - iOS generation request.
|
|
51
|
+
* @returns {{artifacts: import("../semantic/types.js").GeneratedSetArtifact[], metadata: {applicationManifest: string, platformQualification: string}, target: "ios"}} Candidate artifact set.
|
|
52
|
+
*/
|
|
53
|
+
export declare function generateIosApplication(input: Parameters<typeof preflightIosApplication>[0]): {
|
|
54
|
+
artifacts: import("../semantic/types.js").GeneratedSetArtifact[];
|
|
55
|
+
metadata: {
|
|
56
|
+
applicationManifest: string;
|
|
57
|
+
platformQualification: string;
|
|
58
|
+
};
|
|
59
|
+
target: "ios";
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Derives collision-checked uppercase 24-hex Xcode object IDs from normalized identities.
|
|
63
|
+
* @param {readonly string[]} identities - Complete ordered object identities.
|
|
64
|
+
* @param {(identity: string) => string} [digest] - Test-only digest seam; production uses built-in SHA-256.
|
|
65
|
+
* @returns {Map<string, string>} Object ID by full input identity.
|
|
66
|
+
*/
|
|
67
|
+
export declare function allocateXcodeObjectIds(identities: readonly string[], digest?: (identity: string) => string): Map<string, string>;
|
|
68
|
+
//# sourceMappingURL=ios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../../src/backends/ios.js"],"names":[],"mappings":"AA8EI,YAA4C,qBAAqB,GAAvD;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAuB;AACjE,YAA0C,qBAAqB,GAArD,MAAM,GAAG,qBAAqB,CAAuB;AAC/D,YAAqD,iBAAiB,GAA5D,MAAM,GAAG,SAAS,qBAAqB,EAAE,CAAmB;AACtE,YAAuD,iBAAiB,GAA9D;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAmB;AACxE,YAAsE,yBAAyB,GAArF;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;CAAC,CAA2B;AAC/F,YAAqE,yBAAyB,GAApF;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAA2B;AAgDlG;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAN1C;IAA8D,MAAM,AAApE,CACA,EADQ,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAA+D,OAAO,AAAtE,CACA,EADQ,OAAO,sBAAsB,EAAE,eAAe,CACtD;IAAgF,aAAa,AAA7F,CACA,EADQ,OAAO,sBAAsB,EAAE,gCAAgC,CACvE;IAA0E,MAAM,AAAhF,CACA,EADQ,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,CACjE;CAE0C,GAFhC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,CAAC;IAAC,aAAa,EAAE,OAAO,sBAAsB,EAAE,2BAA2B,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAAC,CAiC3Z;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAHjC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAGX,GAF/B;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAA;KAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAC,CAiFrK;AAoPD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAJtC,SAAS,MAAM,EAIuB,EAAE,MAAM,AAHtD,CACA,EADQ,CAAC,QAAQ,EAAE,MAAM,KAAK,MAG0F,GAF9G,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8B/B"}
|