├── .editorconfig ├── .github └── workflows │ ├── integration-tests.yml │ ├── release.yml │ └── unit-tests.yml ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── BaseEslintConfig.js ├── BaseTsConfig.json ├── CreateInstallerCommon.bat ├── CreateInstallerLinux.bat ├── CreateInstallerOSX.bat ├── CreateInstallerWin.bat ├── Directory.Build.props ├── LICENSE ├── README.md ├── RunTests.bat ├── SQLSchemaCompare.CLI ├── Options.cs ├── Program.cs ├── Properties │ └── launchSettings.json └── SQLSchemaCompare.CLI.csproj ├── SQLSchemaCompare.Core ├── Entities │ ├── Api │ │ ├── ApiResponse.cs │ │ ├── ApiResponse{TResult}.cs │ │ └── EErrorCode.cs │ ├── AppSettings.cs │ ├── Compare │ │ ├── ABaseCompareResultItem.cs │ │ ├── CompareResult.cs │ │ ├── CompareResultItem.cs │ │ ├── CompareResultItemScripts.cs │ │ ├── CompareResultItems.cs │ │ └── ObjectMap.cs │ ├── Database │ │ ├── ABaseDb.cs │ │ ├── ABaseDbColumn.cs │ │ ├── ABaseDbConstraint.cs │ │ ├── ABaseDbDataType.cs │ │ ├── ABaseDbForeignKey.cs │ │ ├── ABaseDbFunction.cs │ │ ├── ABaseDbIndex.cs │ │ ├── ABaseDbObject.cs │ │ ├── ABaseDbPrimaryKey.cs │ │ ├── ABaseDbSchema.cs │ │ ├── ABaseDbSequence.cs │ │ ├── ABaseDbStoredProcedure.cs │ │ ├── ABaseDbTable.cs │ │ ├── ABaseDbTrigger.cs │ │ ├── ABaseDbView.cs │ │ ├── MicrosoftSql │ │ │ ├── MicrosoftSqlColumn.cs │ │ │ ├── MicrosoftSqlDataType.cs │ │ │ ├── MicrosoftSqlDb.cs │ │ │ ├── MicrosoftSqlForeignKey.cs │ │ │ ├── MicrosoftSqlFunction.cs │ │ │ ├── MicrosoftSqlIndex.cs │ │ │ ├── MicrosoftSqlPrimaryKey.cs │ │ │ ├── MicrosoftSqlSequence.cs │ │ │ ├── MicrosoftSqlStoredProcedure.cs │ │ │ ├── MicrosoftSqlTable.cs │ │ │ └── MicrosoftSqlView.cs │ │ ├── MySql │ │ │ ├── MySqlColumn.cs │ │ │ ├── MySqlDb.cs │ │ │ ├── MySqlForeignKey.cs │ │ │ ├── MySqlFunction.cs │ │ │ ├── MySqlIndex.cs │ │ │ ├── MySqlStoredProcedure.cs │ │ │ ├── MySqlTable.cs │ │ │ ├── MySqlTrigger.cs │ │ │ └── MySqlView.cs │ │ └── PostgreSql │ │ │ ├── PostgreSqlColumn.cs │ │ │ ├── PostgreSqlDataType.cs │ │ │ ├── PostgreSqlDataTypeComposite.cs │ │ │ ├── PostgreSqlDataTypeDomain.cs │ │ │ ├── PostgreSqlDataTypeEnumerated.cs │ │ │ ├── PostgreSqlDataTypeRange.cs │ │ │ ├── PostgreSqlDb.cs │ │ │ ├── PostgreSqlForeignKey.cs │ │ │ ├── PostgreSqlFunction.cs │ │ │ ├── PostgreSqlIndex.cs │ │ │ ├── PostgreSqlSequence.cs │ │ │ ├── PostgreSqlTable.cs │ │ │ ├── PostgreSqlTrigger.cs │ │ │ └── PostgreSqlView.cs │ ├── DatabaseProvider │ │ ├── ADatabaseProviderOptions.cs │ │ ├── MariaDbDatabaseProviderOptions.cs │ │ ├── MicrosoftSqlDatabaseProviderOptions.cs │ │ ├── MySqlDatabaseProviderOptions.cs │ │ └── PostgreSqlDatabaseProviderOptions.cs │ ├── Exceptions │ │ ├── AccountServiceException.cs │ │ ├── PropertyNotFoundException.cs │ │ └── WrongTypeException.cs │ ├── Project │ │ ├── CompareProject.cs │ │ ├── FilterClause.cs │ │ ├── FilteringOptions.cs │ │ ├── ProjectOptions.cs │ │ └── ScriptingOptions.cs │ ├── TaskInfo.cs │ └── TaskWork.cs ├── Enums │ ├── CompareDirection.cs │ ├── DatabaseObjectType.cs │ ├── DatabaseType.cs │ ├── FilterField.cs │ ├── FilterOperator.cs │ ├── Language.cs │ ├── LogLevel.cs │ └── ProjectState.cs ├── Extensions │ └── StringBuilderExtensions.cs ├── Interfaces │ ├── IAppGlobals.cs │ ├── IDatabaseFilter.cs │ ├── IDatabaseMapper.cs │ ├── IDatabaseProvider.cs │ ├── IDatabaseProviderFactory.cs │ ├── IDatabaseScripter.cs │ ├── IDatabaseScripterFactory.cs │ ├── Repository │ │ ├── IAppSettingsRepository.cs │ │ └── IProjectRepository.cs │ └── Services │ │ ├── IAppSettingsService.cs │ │ ├── ICipherService.cs │ │ ├── IDatabaseCompareService.cs │ │ ├── IDatabaseService.cs │ │ ├── ILocalizationService.cs │ │ ├── IProjectService.cs │ │ └── ITaskService.cs └── SQLSchemaCompare.Core.csproj ├── SQLSchemaCompare.Infrastructure ├── DatabaseProviders │ ├── ADatabaseProvider.cs │ ├── DatabaseProviderFactory.cs │ ├── MariaDbDatabaseProvider.cs │ ├── MicrosoftSqlDatabaseProvider.cs │ ├── MySqlDatabaseProvider.cs │ └── PostgreSqlDatabaseProvider.cs ├── DatabaseUtilities │ ├── DatabaseFilter.cs │ └── DatabaseMapper.cs ├── EntityFramework │ ├── ADatabaseContext.cs │ ├── MicrosoftSqlDatabaseContext.cs │ ├── MySqlDatabaseContext.cs │ └── PostgreSqlDatabaseContext.cs ├── InternalsVisibleTo.cs ├── Repository │ ├── AppSettingsRepository.cs │ └── ProjectRepository.cs ├── SQLSchemaCompare.Infrastructure.csproj └── SqlScripters │ ├── ADatabaseScripter.cs │ ├── AScriptHelper.cs │ ├── DatabaseScripterFactory.cs │ ├── MicrosoftSqlScriptHelper.cs │ ├── MicrosoftSqlScripter.cs │ ├── MySqlScriptHelper.cs │ ├── MySqlScripter.cs │ ├── PostgreSqlScriptHelper.cs │ └── PostgreSqlScripter.cs ├── SQLSchemaCompare.Services ├── AppSettingsService.cs ├── CipherService.cs ├── CustomResourceManager.cs ├── DatabaseCompareService.cs ├── DatabaseService.cs ├── Localization.Designer.cs ├── Localization.de.resx ├── Localization.it.resx ├── Localization.resx ├── LocalizationService.cs ├── ProjectService.cs ├── SQLSchemaCompare.Services.csproj └── TaskService.cs ├── SQLSchemaCompare.Test ├── BaseTests.cs ├── Core │ └── Exceptions │ │ └── PropertyNotFoundExceptionTest.cs ├── DatabaseFixture.cs ├── DatabaseFixtureMariaDb.cs ├── DatabaseFixtureMicrosoftSql.cs ├── DatabaseFixtureMySql.cs ├── DatabaseFixturePostgreSql.cs ├── Datasources │ ├── ScriptMicrosoftSqlColumnTest.xlsx │ ├── ScriptMicrosoftSqlDataTypeTest.xlsx │ ├── sakila-schema-mariadb.sql │ ├── sakila-schema-microsoftsql.sql │ ├── sakila-schema-mysql.sql │ └── sakila-schema-postgresql.sql ├── ExcelDataAttribute.cs ├── GlobalSuppressions.cs ├── Infrastructure │ ├── DatabaseUtilities │ │ └── DatabaseFilterTests.cs │ ├── Repository │ │ ├── AppSettingsRepositoryTests.cs │ │ └── ProjectRepositoryTests.cs │ └── SqlScripter │ │ ├── ADatabaseScripterTests.cs │ │ └── MicrosoftSqlScripterTests.cs ├── Integration │ ├── MariaDbTests.cs │ ├── MicrosoftSqlTests.cs │ ├── MySqlTests.cs │ └── PostgreSqlTests.cs ├── SQLSchemaCompare.Test.csproj ├── Services │ ├── CipherServiceTests.cs │ └── LocalizationServiceTests.cs ├── XunitLogger.cs └── XunitLoggerFactory.cs ├── SQLSchemaCompare.UI ├── AppGlobals.cs ├── Enums │ ├── ButtonSize.cs │ ├── ButtonState.cs │ └── ButtonStyle.cs ├── Extensions │ └── RequestValidatorExtensions.cs ├── Middlewares │ ├── RequestValidatorMiddleware.cs │ └── RequestValidatorSettings.cs ├── Models │ ├── FeedbackRequest.cs │ ├── LoadProjectRequest.cs │ ├── NewProjectRequest.cs │ └── Project │ │ └── CompareProjectOptions.cs ├── Pages │ ├── AboutPageModel.cshtml │ ├── AboutPageModel.cshtml.cs │ ├── ErrorPage.cshtml │ ├── ErrorPage.cshtml.cs │ ├── Index.cshtml │ ├── Index.cshtml.cs │ ├── Main │ │ ├── MainPageModel.cshtml │ │ ├── MainPageModel.cshtml.cs │ │ ├── SqlScriptPageModel.cshtml │ │ ├── SqlScriptPageModel.cshtml.cs │ │ └── _ResultTable.cshtml │ ├── Project │ │ ├── ProjectPageModel.cshtml │ │ ├── ProjectPageModel.cshtml.cs │ │ ├── _DataSourcesTab.cshtml │ │ ├── _DatabaseProviderOptions.cshtml │ │ ├── _FilteringTab.cshtml │ │ └── _OptionsTab.cshtml │ ├── SettingsPageModel.cshtml │ ├── SettingsPageModel.cshtml.cs │ ├── TaskStatusPageModel.cshtml │ ├── TaskStatusPageModel.cshtml.cs │ ├── ToolbarPageModel.cshtml │ ├── ToolbarPageModel.cshtml.cs │ ├── WelcomePageModel.cshtml │ ├── WelcomePageModel.cshtml.cs │ ├── _ModalDialog.cshtml │ ├── _ScriptSetup.cshtml │ └── _ViewImports.cshtml ├── Program.cs ├── Properties │ └── launchSettings.json ├── SQLSchemaCompare.UI.csproj ├── TagHelpers │ ├── ButtonTagHelper.cs │ ├── ErrorTagHelper.cs │ ├── InputTagHelper.cs │ ├── OptionTagHelper.cs │ └── SelectTagHelper.cs ├── WebServer │ ├── Utility.cs │ └── WebServerStartup.cs ├── certificate.pfx ├── compilerconfig.json ├── compilerconfig.json.defaults ├── eslint.config.js ├── package.json ├── tsconfig.json ├── wwwroot │ ├── css │ │ ├── Index.scss │ │ ├── _common.scss │ │ └── _font.scss │ ├── font │ │ └── OpenSans-Regular.ttf │ ├── img │ │ ├── background.jpg │ │ ├── gutter-horizontal.png │ │ ├── gutter-vertical.png │ │ ├── logo-transparent.png │ │ ├── logo.png │ │ └── ticodex.png │ ├── js │ │ ├── Entities │ │ │ ├── ApiResponse.ts │ │ │ └── CompareResultItemScripts.ts │ │ ├── Enums.ts │ │ ├── Index.ts │ │ ├── Localization.ts │ │ ├── Logger.ts │ │ ├── Main.ts │ │ ├── Managers │ │ │ ├── DialogManager.ts │ │ │ ├── EditorManager.ts │ │ │ ├── MenuManager.ts │ │ │ ├── PageManager.ts │ │ │ └── TaskManager.ts │ │ ├── Project.ts │ │ ├── Settings.ts │ │ └── Utility.ts │ └── lib │ │ ├── bootstrap │ │ ├── bootstrap.min.js │ │ └── scss │ │ │ ├── _alert.scss │ │ │ ├── _badge.scss │ │ │ ├── _breadcrumb.scss │ │ │ ├── _button-group.scss │ │ │ ├── _buttons.scss │ │ │ ├── _card.scss │ │ │ ├── _carousel.scss │ │ │ ├── _close.scss │ │ │ ├── _code.scss │ │ │ ├── _custom-forms.scss │ │ │ ├── _dropdown.scss │ │ │ ├── _forms.scss │ │ │ ├── _functions.scss │ │ │ ├── _grid.scss │ │ │ ├── _images.scss │ │ │ ├── _input-group.scss │ │ │ ├── _jumbotron.scss │ │ │ ├── _list-group.scss │ │ │ ├── _media.scss │ │ │ ├── _mixins.scss │ │ │ ├── _modal.scss │ │ │ ├── _nav.scss │ │ │ ├── _navbar.scss │ │ │ ├── _pagination.scss │ │ │ ├── _popover.scss │ │ │ ├── _print.scss │ │ │ ├── _progress.scss │ │ │ ├── _reboot.scss │ │ │ ├── _root.scss │ │ │ ├── _tables.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _transitions.scss │ │ │ ├── _type.scss │ │ │ ├── _utilities.scss │ │ │ ├── _variables.scss │ │ │ ├── bootstrap-grid.scss │ │ │ ├── bootstrap-reboot.scss │ │ │ ├── bootstrap.scss │ │ │ ├── mixins │ │ │ ├── _alert.scss │ │ │ ├── _background-variant.scss │ │ │ ├── _badge.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-shadow.scss │ │ │ ├── _breakpoints.scss │ │ │ ├── _buttons.scss │ │ │ ├── _caret.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _float.scss │ │ │ ├── _forms.scss │ │ │ ├── _gradients.scss │ │ │ ├── _grid-framework.scss │ │ │ ├── _grid.scss │ │ │ ├── _hover.scss │ │ │ ├── _image.scss │ │ │ ├── _list-group.scss │ │ │ ├── _lists.scss │ │ │ ├── _nav-divider.scss │ │ │ ├── _pagination.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _resize.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _size.scss │ │ │ ├── _table-row.scss │ │ │ ├── _text-emphasis.scss │ │ │ ├── _text-hide.scss │ │ │ ├── _text-truncate.scss │ │ │ ├── _transition.scss │ │ │ └── _visibility.scss │ │ │ └── utilities │ │ │ ├── _align.scss │ │ │ ├── _background.scss │ │ │ ├── _borders.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _display.scss │ │ │ ├── _embed.scss │ │ │ ├── _flex.scss │ │ │ ├── _float.scss │ │ │ ├── _position.scss │ │ │ ├── _screenreaders.scss │ │ │ ├── _shadows.scss │ │ │ ├── _sizing.scss │ │ │ ├── _spacing.scss │ │ │ ├── _text.scss │ │ │ └── _visibility.scss │ │ ├── fontawesome │ │ ├── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _shims.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ ├── brands.scss │ │ │ ├── fontawesome.scss │ │ │ ├── regular.scss │ │ │ ├── solid.scss │ │ │ └── v4-shims.scss │ │ └── webfonts │ │ │ ├── fa-brands-400.eot │ │ │ ├── fa-brands-400.svg │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.eot │ │ │ ├── fa-regular-400.svg │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.eot │ │ │ ├── fa-solid-900.svg │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-solid-900.woff │ │ │ └── fa-solid-900.woff2 │ │ ├── jquery │ │ ├── jquery-3.3.1.min.js │ │ ├── jquery-editable-select.min.css │ │ ├── jquery-editable-select.min.js │ │ ├── jquery.matchHeight.min.js │ │ └── jquery.serializejson.min.js │ │ ├── monaco-editor │ │ └── vs │ │ │ ├── base │ │ │ └── worker │ │ │ │ └── workerMain.js │ │ │ ├── basic-languages │ │ │ ├── bat │ │ │ │ └── bat.js │ │ │ ├── coffee │ │ │ │ └── coffee.js │ │ │ ├── cpp │ │ │ │ └── cpp.js │ │ │ ├── csharp │ │ │ │ └── csharp.js │ │ │ ├── csp │ │ │ │ └── csp.js │ │ │ ├── css │ │ │ │ └── css.js │ │ │ ├── dockerfile │ │ │ │ └── dockerfile.js │ │ │ ├── fsharp │ │ │ │ └── fsharp.js │ │ │ ├── go │ │ │ │ └── go.js │ │ │ ├── handlebars │ │ │ │ └── handlebars.js │ │ │ ├── html │ │ │ │ └── html.js │ │ │ ├── ini │ │ │ │ └── ini.js │ │ │ ├── java │ │ │ │ └── java.js │ │ │ ├── less │ │ │ │ └── less.js │ │ │ ├── lua │ │ │ │ └── lua.js │ │ │ ├── markdown │ │ │ │ └── markdown.js │ │ │ ├── msdax │ │ │ │ └── msdax.js │ │ │ ├── mysql │ │ │ │ └── mysql.js │ │ │ ├── objective-c │ │ │ │ └── objective-c.js │ │ │ ├── pgsql │ │ │ │ └── pgsql.js │ │ │ ├── php │ │ │ │ └── php.js │ │ │ ├── postiats │ │ │ │ └── postiats.js │ │ │ ├── powershell │ │ │ │ └── powershell.js │ │ │ ├── pug │ │ │ │ └── pug.js │ │ │ ├── python │ │ │ │ └── python.js │ │ │ ├── r │ │ │ │ └── r.js │ │ │ ├── razor │ │ │ │ └── razor.js │ │ │ ├── redis │ │ │ │ └── redis.js │ │ │ ├── redshift │ │ │ │ └── redshift.js │ │ │ ├── ruby │ │ │ │ └── ruby.js │ │ │ ├── rust │ │ │ │ └── rust.js │ │ │ ├── sb │ │ │ │ └── sb.js │ │ │ ├── scss │ │ │ │ └── scss.js │ │ │ ├── solidity │ │ │ │ └── solidity.js │ │ │ ├── sql │ │ │ │ └── sql.js │ │ │ ├── swift │ │ │ │ └── swift.js │ │ │ ├── vb │ │ │ │ └── vb.js │ │ │ ├── xml │ │ │ │ └── xml.js │ │ │ └── yaml │ │ │ │ └── yaml.js │ │ │ ├── editor │ │ │ ├── contrib │ │ │ │ └── suggest │ │ │ │ │ └── media │ │ │ │ │ ├── String_16x.svg │ │ │ │ │ └── String_inverse_16x.svg │ │ │ ├── editor.main.css │ │ │ ├── editor.main.js │ │ │ ├── editor.main.nls.js │ │ │ └── standalone │ │ │ │ └── browser │ │ │ │ └── quickOpen │ │ │ │ └── symbol-sprite.svg │ │ │ ├── language │ │ │ ├── css │ │ │ │ ├── cssMode.js │ │ │ │ └── cssWorker.js │ │ │ ├── html │ │ │ │ ├── htmlMode.js │ │ │ │ └── htmlWorker.js │ │ │ ├── json │ │ │ │ ├── jsonMode.js │ │ │ │ └── jsonWorker.js │ │ │ └── typescript │ │ │ │ ├── lib │ │ │ │ └── typescriptServices.js │ │ │ │ ├── tsMode.js │ │ │ │ └── tsWorker.js │ │ │ └── loader.js │ │ ├── popperjs │ │ └── popper.min.js │ │ ├── splitjs │ │ └── split.min.js │ │ └── typings │ │ ├── bootstrap.d.ts │ │ ├── electron.d.ts │ │ ├── electronRemote.d.ts │ │ ├── jquery-editable-select.d.ts │ │ ├── jquery.d.ts │ │ ├── jquery.matchHeight.d.ts │ │ ├── jquery.serializeJSON.d.ts │ │ ├── monaco.d.ts │ │ ├── node.d.ts │ │ ├── popper.js.d.ts │ │ ├── promise.d.ts │ │ ├── requirejs.d.ts │ │ └── splitjs.d.ts └── yarn.lock ├── SQLSchemaCompare.sln ├── SQLSchemaCompare ├── .vscode │ └── launch.json ├── SQLSchemaCompare.esproj ├── app.ts ├── build │ ├── icon.icns │ ├── icon.ico │ ├── installer.nsh │ ├── installerHeader.bmp │ └── installerSidebar.bmp ├── eslint.config.js ├── font │ └── OpenSans-Regular.ttf ├── img │ ├── Logo.png │ └── background.jpg ├── package.json ├── splash.html ├── tsconfig.json └── yarn.lock ├── SonarLint.xml ├── global.json ├── images ├── sqlcompare-screenshot1.png ├── sqlcompare-screenshot2.png └── sqlcompare-screenshot3.png └── pre-commit-hook.sh /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # All Files 7 | [*] 8 | charset = utf-8 9 | end_of_line = crlf 10 | indent_style = space 11 | #indent_size = 4 12 | # (Please don't specify an indent_size here; that has too many unintended consequences.) 13 | insert_final_newline = false 14 | trim_trailing_whitespace = true 15 | 16 | # Neolution.CodeAnalysis rules 17 | dotnet_diagnostic.S1200.severity = none 18 | dotnet_diagnostic.S1694.severity = none 19 | dotnet_diagnostic.S3358.severity = none 20 | dotnet_diagnostic.S3956.severity = none 21 | dotnet_diagnostic.S4049.severity = none 22 | 23 | # Solution Files 24 | [*.sln] 25 | indent_size = 4 26 | indent_style = tab 27 | 28 | # XML Project Files 29 | [*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,esproj}] 30 | indent_size = 2 31 | 32 | # Configuration Files 33 | [*.{json,xml,yml,config,props,targets,nuspec,resx,ruleset,js}] 34 | indent_size = 2 35 | 36 | # .NET Config Files 37 | [*.{config}] 38 | indent_size = 4 39 | charset = utf-8-bom 40 | 41 | # Markdown Files 42 | [*.md] 43 | trim_trailing_whitespace = false 44 | 45 | # Web Files 46 | [*.{htm,html,ts,css,scss,less}] 47 | indent_size = 4 48 | insert_final_newline = true 49 | 50 | # Razor Files 51 | [*.cshtml] 52 | indent_size = 4 53 | charset = utf-8-bom 54 | 55 | # Bash Files 56 | [*.sh] 57 | indent_size = 4 58 | end_of_line = lf 59 | 60 | # Dotnet Code Files 61 | [*.{cs,csx,cake,vb}] 62 | indent_size = 4 63 | insert_final_newline = true 64 | charset = utf-8-bom 65 | -------------------------------------------------------------------------------- /.github/workflows/unit-tests.yml: -------------------------------------------------------------------------------- 1 | name: Unit Tests 2 | 3 | on: 4 | pull_request: 5 | branches: [ master ] 6 | workflow_dispatch: 7 | 8 | jobs: 9 | unit_tests: 10 | if: github.event.pull_request.draft == false 11 | runs-on: windows-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Setup .NET 15 | uses: actions/setup-dotnet@v4 16 | with: 17 | dotnet-version: 8.0.x 18 | - name: Setup Node.js 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: 20 22 | - name: Add msbuild to PATH 23 | uses: microsoft/setup-msbuild@v2 24 | - name: Restore dependencies 25 | run: dotnet restore 26 | - name: Build 27 | run: msbuild SQLSchemaCompare.sln /p:Configuration=Release 28 | - name: Test 29 | run: dotnet test SQLSchemaCompare.Test --no-build --configuration Release --logger trx --filter Category!=IntegrationTest 30 | - name: Publish Test Results 31 | uses: EnricoMi/publish-unit-test-result-action/composite@v2 32 | if: always() 33 | with: 34 | check_name: "Unit Test Results" 35 | files: SQLSchemaCompare.Test/TestResults/*.trx 36 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "ms-dotnettools.csharp", 4 | "ms-dotnettools.csdevkit", 5 | "EditorConfig.EditorConfig", 6 | "dbaeumer.vscode-eslint", 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "UI", 6 | "type": "coreclr", 7 | "request": "launch", 8 | "preLaunchTask": "Build UI", 9 | "program": "${workspaceFolder}/SQLSchemaCompare.UI/bin/Debug/net8.0/TiCodeX.SQLSchemaCompare.UI.dll", 10 | "cwd": "${workspaceFolder}/SQLSchemaCompare.UI", 11 | "presentation": { 12 | "hidden": true, 13 | }, 14 | }, 15 | { 16 | "name": "App", 17 | "type": "node", 18 | "request": "launch", 19 | "preLaunchTask": "Build App", 20 | "runtimeExecutable": "${workspaceFolder}/SQLSchemaCompare/node_modules/.bin/electron", 21 | "program": "${workspaceFolder}/SQLSchemaCompare/app.js", 22 | "outputCapture": "std", 23 | "presentation": { 24 | "hidden": true, 25 | }, 26 | } 27 | ], 28 | "compounds": [ 29 | { 30 | "name": "SQL Schema Compare", 31 | "configurations": [ 32 | "UI", 33 | "App" 34 | ] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "eslint.enable": true, 4 | "eslint.format.enable": true, 5 | "eslint.validate": [ 6 | "typescript", 7 | ], 8 | "eslint.experimental.useFlatConfig": true, 9 | "eslint.workingDirectories": [{ "mode": "auto" }], 10 | "eslint.options": { 11 | "overrideConfigFile": "./eslint.config.js" 12 | }, 13 | "editor.codeActionsOnSave": { 14 | "source.fixAll.eslint": "explicit" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BaseEslintConfig.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | getBaseConfig: (dir) => { 3 | const eslint = require(dir + "/node_modules/@eslint/js"); 4 | const tseslint = require(dir + "/node_modules/typescript-eslint/dist"); 5 | const pluginOnlyError = require(dir + "/node_modules/eslint-plugin-only-error"); 6 | const pluginSonarJS = require(dir + "/node_modules/eslint-plugin-sonarjs"); 7 | const pluginUnicorn = require(dir + "/node_modules/eslint-plugin-unicorn"); 8 | 9 | return { 10 | files: ["**/*.ts"], 11 | extends: [ 12 | eslint.configs.recommended, 13 | ...tseslint.configs.recommended, 14 | ...tseslint.configs.recommendedTypeChecked, 15 | pluginSonarJS.configs.recommended, 16 | pluginUnicorn.configs["flat/recommended"], 17 | ], 18 | plugins: { 19 | pluginOnlyError, 20 | pluginSonarJS, 21 | pluginUnicorn, 22 | }, 23 | languageOptions: { 24 | parser: tseslint.parser, 25 | parserOptions: { 26 | project: true, 27 | tsconfigRootDir: dir, 28 | }, 29 | }, 30 | rules: { 31 | "@typescript-eslint/no-require-imports": "off", 32 | "sonarjs/sonar-no-fallthrough": "off", // Rule crashes on eslint 9.x 33 | "unicorn/prefer-module": "off", // Electron uses CommonJS 34 | }, 35 | }; 36 | }, 37 | }; 38 | -------------------------------------------------------------------------------- /BaseTsConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": true, 3 | "compilerOptions": { 4 | "checkJs": false, 5 | "allowJs": false, 6 | "noEmitOnError": true, 7 | "removeComments": true, 8 | "exactOptionalPropertyTypes": false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CreateInstallerWin.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set "target=win-x64" 4 | set "publishDir=%~dp0\.publish" 5 | 6 | call CreateInstallerCommon.bat %target% 7 | 8 | if ERRORLEVEL 1 goto:error 9 | 10 | echo. 11 | echo _____________________ 12 | echo /\ \ 13 | echo \_^| Packaging ^| 14 | echo ^| electron ^| 15 | echo ^| _________________^|_ 16 | echo \_/___________________/ 17 | echo. 18 | 19 | REM Cleanup folders 20 | if exist %~dp0\installer\win-unpacked ( rmdir /S /Q %~dp0\installer\win-unpacked ) 21 | 22 | call yarn --cwd SQLSchemaCompare dist-%target% 23 | 24 | if ERRORLEVEL 1 goto:error 25 | 26 | REM Cleanup folders 27 | if exist %publishDir% ( rmdir /S /Q %publishDir% ) 28 | if exist %~dp0\installer\win-unpacked ( rmdir /S /Q %~dp0\installer\win-unpacked ) 29 | 30 | if ERRORLEVEL 1 goto:error 31 | 32 | echo. 33 | echo. 34 | echo DONE. 35 | 36 | REM processes done correctly 37 | goto:exit 38 | 39 | :error 40 | echo. 41 | echo. 42 | echo FAILED. 43 | 44 | :exit 45 | echo Press any key to close... 46 | pause > nul 47 | -------------------------------------------------------------------------------- /RunTests.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set filter= 3 | set RunDockerTests= 4 | 5 | Choice /M "Run integration tests" 6 | 7 | If %ERRORLEVEL% == 2 ( 8 | set "filter=--filter Category!=IntegrationTest" 9 | goto:start 10 | ) 11 | 12 | Choice /M "Include docker tests" 13 | 14 | If %ERRORLEVEL% == 1 ( 15 | set RunDockerTests=true 16 | ) 17 | 18 | :start 19 | 20 | REM dotnet restore -r win-x64 21 | REM if ERRORLEVEL 1 goto:exit 22 | 23 | dotnet build SQLSchemaCompare.Test --configuration release 24 | if ERRORLEVEL 1 goto:exit 25 | 26 | dotnet test SQLSchemaCompare.Test --no-build --configuration release %filter% 27 | 28 | :exit 29 | echo Press any key to close... 30 | pause > nul 31 | -------------------------------------------------------------------------------- /SQLSchemaCompare.CLI/Options.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.CLI 2 | { 3 | using CommandLine; 4 | 5 | /// 6 | /// The CLI options 7 | /// 8 | internal class Options 9 | { 10 | /// 11 | /// Gets or sets the project file 12 | /// 13 | [Option( 14 | shortName: 'p', 15 | longName: "project", 16 | Required = true, 17 | HelpText = "The project file")] 18 | public string ProjectFile { get; set; } 19 | 20 | /// 21 | /// Gets or sets the output file 22 | /// 23 | [Option( 24 | shortName: 'o', 25 | longName: "output", 26 | Required = true, 27 | HelpText = "The output file")] 28 | public string OutputFile { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SQLSchemaCompare.CLI/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "SQLSchemaCompare.CLI": { 4 | "commandName": "Project", 5 | "commandLineArgs": "--help" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | TiCodeX.SQLSchemaCompare.CLI 4 | TiCodeX.SQLSchemaCompare.CLI 5 | Exe 6 | ..\.publish 7 | true 8 | 9 | 10 | 11 | 12 | 13 | 14 | runtime; build; native; contentfiles; analyzers; buildtransitive 15 | all 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Api/ApiResponse.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Api 2 | { 3 | /// 4 | /// Represents the response for Api requests 5 | /// 6 | public class ApiResponse 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether the request succeeded or returned an error 10 | /// 11 | public bool Success { get; set; } = true; 12 | 13 | /// 14 | /// Gets or sets the response error code 15 | /// 16 | public EErrorCode ErrorCode { get; set; } = EErrorCode.Success; 17 | 18 | /// 19 | /// Gets or sets the response error message 20 | /// 21 | public string ErrorMessage { get; set; } = string.Empty; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Api/ApiResponse{TResult}.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Api 2 | { 3 | /// 4 | /// Represents response for the Api requests with a result 5 | /// 6 | /// The result type 7 | public class ApiResponse : ApiResponse 8 | { 9 | /// 10 | /// Gets or sets the response result 11 | /// 12 | public TResult Result { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/AppSettings.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities 2 | { 3 | /// 4 | /// User configurable settings of the application 5 | /// 6 | public class AppSettings 7 | { 8 | /// 9 | /// Gets or sets the language of the application 10 | /// 11 | public Language Language { get; set; } = Language.English; 12 | 13 | /// 14 | /// Gets or sets the minimum log level 15 | /// 16 | public LogLevel LogLevel { get; set; } = LogLevel.Info; 17 | 18 | /// 19 | /// Gets the recently opened projects 20 | /// 21 | public List RecentProjects { get; } = new List(); 22 | 23 | /// 24 | /// Gets or sets the saved login session 25 | /// 26 | public string Session { get; set; } 27 | 28 | /// 29 | /// Gets or sets the version of the application when the feedback has been sent 30 | /// 31 | public string FeedbackSent { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Compare/ABaseCompareResultItem.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Compare 2 | { 3 | /// 4 | /// Represent the result of the comparison of a generic item 5 | /// 6 | public abstract class ABaseCompareResultItem 7 | { 8 | /// 9 | /// Gets the unique identifier of the result item 10 | /// 11 | public Guid Id { get; } = Guid.NewGuid(); 12 | 13 | /// 14 | /// Gets or sets the source item name 15 | /// 16 | public string SourceItemName { get; set; } 17 | 18 | /// 19 | /// Gets or sets the target item name 20 | /// 21 | public string TargetItemName { get; set; } 22 | 23 | /// 24 | /// Gets or sets the item type 25 | /// 26 | public Type ItemType { get; set; } 27 | 28 | /// 29 | /// Gets or sets the scripts 30 | /// 31 | public CompareResultItemScripts Scripts { get; set; } = new CompareResultItemScripts(); 32 | 33 | /// 34 | /// Gets a value indicating whether the items are equal 35 | /// 36 | public bool Equal => this.Scripts.SourceCreateScript == this.Scripts.TargetCreateScript; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Compare/CompareResult.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Compare 2 | { 3 | /// 4 | /// Represent the result of a comparison 5 | /// 6 | public class CompareResult 7 | { 8 | /// 9 | /// Gets or sets the source full script 10 | /// 11 | public string SourceFullScript { get; set; } 12 | 13 | /// 14 | /// Gets or sets the target full script 15 | /// 16 | public string TargetFullScript { get; set; } 17 | 18 | /// 19 | /// Gets or sets the full alter script 20 | /// 21 | public string FullAlterScript { get; set; } 22 | 23 | /// 24 | /// Gets the list of different items 25 | /// 26 | public List DifferentItems { get; } = new List(); 27 | 28 | /// 29 | /// Gets the list of items only on the source 30 | /// 31 | public List OnlySourceItems { get; } = new List(); 32 | 33 | /// 34 | /// Gets the list of items only on the target 35 | /// 36 | public List OnlyTargetItems { get; } = new List(); 37 | 38 | /// 39 | /// Gets the list of items which are the same in both 40 | /// 41 | public List SameItems { get; } = new List(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Compare/CompareResultItem.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Compare 2 | { 3 | /// 4 | /// Represent the result of the comparison of a specific item 5 | /// 6 | /// Type of the item compared 7 | public class CompareResultItem : ABaseCompareResultItem 8 | where T : ABaseDbObject 9 | { 10 | /// 11 | /// Initializes a new instance of the class 12 | /// 13 | public CompareResultItem() 14 | { 15 | this.ItemType = typeof(T); 16 | } 17 | 18 | /// 19 | /// Gets or sets the Source item 20 | /// 21 | public T SourceItem { get; set; } 22 | 23 | /// 24 | /// Gets or sets the Target item 25 | /// 26 | public T TargetItem { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Compare/CompareResultItemScripts.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Compare 2 | { 3 | /// 4 | /// Represent the SQL scripts of a specific item 5 | /// 6 | public class CompareResultItemScripts 7 | { 8 | /// 9 | /// Gets or sets the creation script of the source item 10 | /// 11 | public string SourceCreateScript { get; set; } = string.Empty; 12 | 13 | /// 14 | /// Gets or sets the creation script of the target item 15 | /// 16 | public string TargetCreateScript { get; set; } = string.Empty; 17 | 18 | /// 19 | /// Gets or sets the alter script 20 | /// 21 | public string AlterScript { get; set; } = string.Empty; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Compare/ObjectMap.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Compare 2 | { 3 | /// 4 | /// Structure class useful for mapping objects 5 | /// 6 | public class ObjectMap 7 | { 8 | /// 9 | /// Gets or sets a generic title for the objects list 10 | /// 11 | public string ObjectTitle { get; set; } 12 | 13 | /// 14 | /// Gets or sets the database objects 15 | /// 16 | public IEnumerable DbObjects { get; set; } 17 | 18 | /// 19 | /// Gets or sets the mappable database objects 20 | /// 21 | public IEnumerable MappableDbObjects { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbColumn.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information of database column classes 5 | /// 6 | public abstract class ABaseDbColumn : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Column; 10 | 11 | /// 12 | /// Gets or sets the column ordinal position 13 | /// 14 | public long? OrdinalPosition { get; set; } 15 | 16 | /// 17 | /// Gets or sets the database table name 18 | /// 19 | public string TableName { get; set; } 20 | 21 | /// 22 | /// Gets or sets the column default value 23 | /// 24 | public string ColumnDefault { get; set; } 25 | 26 | /// 27 | /// Gets or sets the default constraint name 28 | /// 29 | public string DefaultConstraintName { get; set; } 30 | 31 | /// 32 | /// Gets or sets the column data type 33 | /// 34 | public string DataType { get; set; } 35 | 36 | /// 37 | /// Gets or sets the column character set name 38 | /// 39 | public string CharacterSetName { get; set; } 40 | 41 | /// 42 | /// Gets or sets the column collation name 43 | /// 44 | public string CollationName { get; set; } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbDataType.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database data type classes 5 | /// 6 | public class ABaseDbDataType : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.DataType; 10 | 11 | /// 12 | /// Gets or sets a value indicating whether the type is user defined 13 | /// 14 | public bool IsUserDefined { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbForeignKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database foreign keys 5 | /// 6 | public class ABaseDbForeignKey : ABaseDbConstraint 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.ForeignKey; 10 | 11 | /// 12 | /// Gets or sets referenced table schema 13 | /// 14 | public string ReferencedTableSchema { get; set; } 15 | 16 | /// 17 | /// Gets or sets referenced table name 18 | /// 19 | public string ReferencedTableName { get; set; } 20 | 21 | /// 22 | /// Gets or sets referenced column name 23 | /// 24 | /// Used only by the DatabaseProvider to group the constraints and fill the ReferencedColumnNames list 25 | public string ReferencedColumnName { get; set; } 26 | 27 | /// 28 | /// Gets the column names already ordered 29 | /// 30 | public List ReferencedColumnNames { get; } = new List(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbFunction.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database functions 5 | /// 6 | public abstract class ABaseDbFunction : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Function; 10 | 11 | /// 12 | /// Gets or sets the database function definition script 13 | /// 14 | public string Definition { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbIndex.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database index classes 5 | /// 6 | public class ABaseDbIndex : ABaseDbConstraint 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Index; 10 | 11 | /// 12 | /// Gets or sets a value indicating whether is descending 13 | /// 14 | /// Used only by the DatabaseProvider to group the indexes and fill the ColumnDescending list 15 | public bool IsDescending { get; set; } 16 | 17 | /// 18 | /// Gets or sets a value indicating whether the index is included. 19 | /// 20 | public bool IsIncluded { get; set; } 21 | 22 | /// 23 | /// Gets whether the column is descending, sorted like the ColumnNames list 24 | /// 25 | public List ColumnDescending { get; } = new List(); 26 | 27 | /// 28 | /// Gets the included columns. 29 | /// 30 | public List IncludedColumns { get; } = new List(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbObject.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides the common properties of a database object 5 | /// 6 | public abstract class ABaseDbObject 7 | { 8 | /// 9 | /// Gets the object type 10 | /// 11 | public abstract DatabaseObjectType ObjectType { get; } 12 | 13 | /// 14 | /// Gets or sets the object name 15 | /// 16 | public string Name { get; set; } 17 | 18 | /// 19 | /// Gets or sets the object schema 20 | /// 21 | public string Schema { get; set; } 22 | 23 | /// 24 | /// Gets or sets a value indicating whether the alter script is supported 25 | /// 26 | public bool AlterScriptSupported { get; protected set; } = true; 27 | 28 | /// 29 | /// Gets or sets the mapped object 30 | /// 31 | public ABaseDbObject MappedDbObject { get; set; } 32 | 33 | /// 34 | /// Gets or sets the database 35 | /// 36 | public ABaseDb Database { get; set; } 37 | 38 | /// 39 | /// Gets or sets the create script 40 | /// 41 | public string CreateScript { get; set; } 42 | 43 | /// 44 | /// Gets or sets the alter script 45 | /// 46 | public string AlterScript { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbPrimaryKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database primary keys 5 | /// 6 | /// 7 | public class ABaseDbPrimaryKey : ABaseDbIndex 8 | { 9 | /// 10 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.PrimaryKey; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbSchema.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database schema classes 5 | /// 6 | public class ABaseDbSchema : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Schema; 10 | 11 | /// 12 | /// Gets or sets the owner 13 | /// 14 | public string Owner { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbSequence.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database sequence classes 5 | /// 6 | public class ABaseDbSequence : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Sequence; 10 | 11 | /// 12 | /// Gets or sets the data type of the sequence 13 | /// 14 | public string DataType { get; set; } 15 | 16 | /// 17 | /// Gets or sets the start value 18 | /// 19 | public string StartValue { get; set; } 20 | 21 | /// 22 | /// Gets or sets the increment value 23 | /// 24 | public string Increment { get; set; } 25 | 26 | /// 27 | /// Gets or sets the minimum value 28 | /// 29 | public string MinValue { get; set; } 30 | 31 | /// 32 | /// Gets or sets the maximum value 33 | /// 34 | public string MaxValue { get; set; } 35 | 36 | /// 37 | /// Gets or sets a value indicating whether is cycling 38 | /// 39 | public bool IsCycling { get; set; } 40 | 41 | /// 42 | /// Gets or sets a value indicating whether this sequence has been generated automatically 43 | /// 44 | public bool IsAutoGenerated { get; set; } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbStoredProcedure.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database stored procedures 5 | /// 6 | public abstract class ABaseDbStoredProcedure : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.StoredProcedure; 10 | 11 | /// 12 | /// Gets or sets the database stored procedure definition script 13 | /// 14 | public string Definition { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbTrigger.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database triggers 5 | /// 6 | public class ABaseDbTrigger : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.Trigger; 10 | 11 | /// 12 | /// Gets or sets the table schema 13 | /// 14 | public string TableSchema { get; set; } 15 | 16 | /// 17 | /// Gets or sets the table name 18 | /// 19 | public string TableName { get; set; } 20 | 21 | /// 22 | /// Gets or sets the database trigger definition script 23 | /// 24 | public string Definition { get; set; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/ABaseDbView.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database 2 | { 3 | /// 4 | /// Provides generic information for database table classes 5 | /// 6 | public abstract class ABaseDbView : ABaseDbObject 7 | { 8 | /// 9 | public override DatabaseObjectType ObjectType { get; } = DatabaseObjectType.View; 10 | 11 | /// 12 | /// Gets or sets the database view definition script 13 | /// 14 | public string ViewDefinition { get; set; } 15 | 16 | /// 17 | /// Gets the database view's indexes 18 | /// 19 | public List Indexes { get; } = new List(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlDataType.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql data type definition 5 | /// 6 | public class MicrosoftSqlDataType : ABaseDbDataType 7 | { 8 | /// 9 | /// Gets or sets the type id 10 | /// 11 | public int TypeId { get; set; } 12 | 13 | /// 14 | /// Gets or sets the system type id 15 | /// 16 | public int SystemTypeId { get; set; } 17 | 18 | /// 19 | /// Gets or sets a value indicating whether the type is nullable 20 | /// 21 | public bool IsNullable { get; set; } 22 | 23 | /// 24 | /// Gets or sets the precision 25 | /// 26 | public int Precision { get; set; } 27 | 28 | /// 29 | /// Gets or sets the scale 30 | /// 31 | public int Scale { get; set; } 32 | 33 | /// 34 | /// Gets or sets the maximum length 35 | /// 36 | public int MaxLength { get; set; } 37 | 38 | /// 39 | /// Gets or sets a value indicating whether this instance is table type 40 | /// 41 | public bool IsTableType { get; set; } 42 | 43 | /// 44 | /// Gets or sets the referenced system type 45 | /// 46 | public MicrosoftSqlDataType SystemType { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlDb.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Defines a MicrosoftSql database 5 | /// 6 | public class MicrosoftSqlDb : ABaseDb 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlForeignKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql foreign key definition 5 | /// 6 | public class MicrosoftSqlForeignKey : ABaseDbForeignKey 7 | { 8 | /// 9 | /// List of possible action for foreign keys for ON DELETE and ON UPDATE 10 | /// 11 | public enum ReferentialAction 12 | { 13 | /// 14 | /// No action 15 | /// 16 | NOACTION = 0, 17 | 18 | /// 19 | /// Cascade 20 | /// 21 | CASCADE = 1, 22 | 23 | /// 24 | /// Set null 25 | /// 26 | SETNULL = 2, 27 | 28 | /// 29 | /// Set default 30 | /// 31 | SETDEFAULT = 3, 32 | } 33 | 34 | /// 35 | /// Gets or sets the delete referential action 36 | /// 37 | public ReferentialAction DeleteReferentialAction { get; set; } 38 | 39 | /// 40 | /// Gets or sets the update referential action 41 | /// 42 | public ReferentialAction UpdateReferentialAction { get; set; } 43 | 44 | /// 45 | /// Gets or sets a value indicating whether the foreign key is disabled 46 | /// 47 | public bool Disabled { get; set; } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlFunction.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql function definition 5 | /// 6 | public class MicrosoftSqlFunction : ABaseDbFunction 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlPrimaryKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql primary key definition 5 | /// 6 | /// 7 | public class MicrosoftSqlPrimaryKey : ABaseDbPrimaryKey 8 | { 9 | /// 10 | /// Gets or sets the type description 11 | /// 12 | public string TypeDescription { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlSequence.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql sequence definition 5 | /// 6 | public class MicrosoftSqlSequence : ABaseDbSequence 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether is cached 10 | /// 11 | public bool IsCached { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlStoredProcedure.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql stored procedure definition 5 | /// 6 | public class MicrosoftSqlStoredProcedure : ABaseDbStoredProcedure 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlTable.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql table definition 5 | /// 6 | public class MicrosoftSqlTable : ABaseDbTable 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MicrosoftSql/MicrosoftSqlView.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MicrosoftSql 2 | { 3 | /// 4 | /// Specific MicrosoftSql view definition 5 | /// 6 | public class MicrosoftSqlView : ABaseDbView 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlColumn.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql column definition 5 | /// 6 | public class MySqlColumn : ABaseDbColumn 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether the column is nullable 10 | /// 11 | public string IsNullable { get; set; } 12 | 13 | /// 14 | /// Gets or sets the column generation expression 15 | /// 16 | public string GenerationExpression { get; set; } 17 | 18 | /// 19 | /// Gets or sets the column extra information 20 | /// 21 | public string Extra { get; set; } 22 | 23 | /// 24 | /// Gets or sets the column type 25 | /// 26 | public string ColumnType { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlDb.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Defines a MySql database 5 | /// 6 | public class MySqlDb : ABaseDb 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlForeignKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql foreign key definition 5 | /// 6 | public class MySqlForeignKey : ABaseDbForeignKey 7 | { 8 | /// 9 | /// Gets or sets the update rule 10 | /// 11 | public string UpdateRule { get; set; } 12 | 13 | /// 14 | /// Gets or sets the delete rule 15 | /// 16 | public string DeleteRule { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlFunction.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql function definition 5 | /// 6 | public class MySqlFunction : ABaseDbFunction 7 | { 8 | /// 9 | /// Initializes a new instance of the class 10 | /// 11 | public MySqlFunction() 12 | { 13 | this.AlterScriptSupported = false; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlIndex.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql index definition 5 | /// 6 | public class MySqlIndex : ABaseDbIndex 7 | { 8 | /// 9 | /// Gets or sets the index type 10 | /// 11 | public string IndexType { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlStoredProcedure.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql stored procedure definition 5 | /// 6 | public class MySqlStoredProcedure : ABaseDbStoredProcedure 7 | { 8 | /// 9 | /// Initializes a new instance of the class 10 | /// 11 | public MySqlStoredProcedure() 12 | { 13 | this.AlterScriptSupported = false; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlTable.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql table definition 5 | /// 6 | public class MySqlTable : ABaseDbTable 7 | { 8 | /// 9 | /// Gets or sets the table engine 10 | /// 11 | public string Engine { get; set; } 12 | 13 | /// 14 | /// Gets or sets the table character set 15 | /// 16 | public string TableCharacterSet { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlTrigger.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql trigger definition 5 | /// 6 | public class MySqlTrigger : ABaseDbTrigger 7 | { 8 | /// 9 | /// Initializes a new instance of the class 10 | /// 11 | public MySqlTrigger() 12 | { 13 | this.AlterScriptSupported = false; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/MySql/MySqlView.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.MySql 2 | { 3 | /// 4 | /// Specific MySql view definition 5 | /// 6 | public class MySqlView : ABaseDbView 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlColumn.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSqlColumn column definition 5 | /// 6 | public class PostgreSqlColumn : ABaseDbColumn 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether the column is nullable 10 | /// 11 | public bool IsNullable { get; set; } 12 | 13 | /// 14 | /// Gets or sets the column numeric scale 15 | /// 16 | public int? NumericScale { get; set; } 17 | 18 | /// 19 | /// Gets or sets the column character maximum lenght 20 | /// 21 | public int? CharacterMaxLenght { get; set; } 22 | 23 | /// 24 | /// Gets or sets the column date time precision 25 | /// 26 | public int? DateTimePrecision { get; set; } 27 | 28 | /// 29 | /// Gets or sets the column interval type 30 | /// 31 | public string IntervalType { get; set; } 32 | 33 | /// 34 | /// Gets or sets the column utd name 35 | /// 36 | public string UdtName { get; set; } 37 | 38 | /// 39 | /// Gets or sets the numeric precision 40 | /// 41 | public int? NumericPrecision { get; set; } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDataType.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql data type definition 5 | /// 6 | public class PostgreSqlDataType : ABaseDbDataType 7 | { 8 | /// 9 | /// Gets or sets the data type id 10 | /// 11 | public uint TypeId { get; set; } 12 | 13 | /// 14 | /// Gets or sets the array data type id 15 | /// 16 | public uint ArrayTypeId { get; set; } 17 | 18 | /// 19 | /// Gets or sets a value indicating whether the type is an array 20 | /// 21 | public bool IsArray { get; set; } 22 | 23 | /// 24 | /// Gets or sets the referenced type for arrays 25 | /// 26 | public PostgreSqlDataType ArrayType { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDataTypeComposite.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql Composite data type definition 5 | /// 6 | public class PostgreSqlDataTypeComposite : PostgreSqlDataType 7 | { 8 | /// 9 | /// Gets or sets the attribute names 10 | /// 11 | public IEnumerable AttributeNames { get; set; } 12 | 13 | /// 14 | /// Gets or sets the attribute type ids 15 | /// 16 | public IEnumerable AttributeTypeIds { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDataTypeDomain.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql Domain data type definition 5 | /// 6 | public class PostgreSqlDataTypeDomain : PostgreSqlDataType 7 | { 8 | /// 9 | /// Gets or sets the base type identifier 10 | /// 11 | public uint BaseTypeId { get; set; } 12 | 13 | /// 14 | /// Gets or sets a value indicating whether the type is not nullable 15 | /// 16 | public bool NotNull { get; set; } 17 | 18 | /// 19 | /// Gets or sets the constraint name 20 | /// 21 | public string ConstraintName { get; set; } 22 | 23 | /// 24 | /// Gets or sets the constraint definition 25 | /// 26 | public string ConstraintDefinition { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDataTypeEnumerated.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql Enum data type definition 5 | /// 6 | public class PostgreSqlDataTypeEnumerated : PostgreSqlDataType 7 | { 8 | /// 9 | /// Gets or sets the labels 10 | /// 11 | public IEnumerable Labels { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDataTypeRange.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql Range data type definition 5 | /// 6 | public class PostgreSqlDataTypeRange : PostgreSqlDataType 7 | { 8 | /// 9 | /// Gets or sets the sub type identifier 10 | /// 11 | public uint SubTypeId { get; set; } 12 | 13 | /// 14 | /// Gets or sets the canonical 15 | /// 16 | public string Canonical { get; set; } 17 | 18 | /// 19 | /// Gets or sets the sub type difference 20 | /// 21 | public string SubTypeDiff { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlDb.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Defines a PostgreSqlDb database 5 | /// 6 | public class PostgreSqlDb : ABaseDb 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlForeignKey.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql foreign key definition 5 | /// 6 | public class PostgreSqlForeignKey : ABaseDbForeignKey 7 | { 8 | /// 9 | /// Gets or sets the match option 10 | /// 11 | public string MatchOption { get; set; } 12 | 13 | /// 14 | /// Gets or sets the update rule 15 | /// 16 | public string UpdateRule { get; set; } 17 | 18 | /// 19 | /// Gets or sets the delete rule 20 | /// 21 | public string DeleteRule { get; set; } 22 | 23 | /// 24 | /// Gets or sets a value indicating whether the foreign key is deferrable 25 | /// 26 | public bool IsDeferrable { get; set; } 27 | 28 | /// 29 | /// Gets or sets a value indicating whether the foreign key is initially deferred 30 | /// 31 | public bool IsInitiallyDeferred { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlIndex.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql index definition 5 | /// 6 | public class PostgreSqlIndex : ABaseDbIndex 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether the index is unique 10 | /// 11 | public bool IsUnique { get; set; } 12 | 13 | /// 14 | /// Gets or sets the index type 15 | /// 16 | public string Type { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlSequence.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql index definition 5 | /// 6 | public class PostgreSqlSequence : ABaseDbSequence 7 | { 8 | /// 9 | /// Gets or sets the cache 10 | /// 11 | public long Cache { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlTable.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql table definition 5 | /// 6 | public class PostgreSqlTable : ABaseDbTable 7 | { 8 | /// 9 | /// Gets or sets the inherited table schema 10 | /// 11 | public string InheritedTableSchema { get; set; } 12 | 13 | /// 14 | /// Gets or sets the inherited table name 15 | /// 16 | public string InheritedTableName { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlTrigger.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql trigger definition 5 | /// 6 | public class PostgreSqlTrigger : ABaseDbTrigger 7 | { 8 | /// 9 | /// Initializes a new instance of the class 10 | /// 11 | public PostgreSqlTrigger() 12 | { 13 | this.AlterScriptSupported = false; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Database/PostgreSql/PostgreSqlView.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Database.PostgreSql 2 | { 3 | /// 4 | /// Specific PostgreSql view definition 5 | /// 6 | public class PostgreSqlView : ABaseDbView 7 | { 8 | /// 9 | /// Initializes a new instance of the class 10 | /// 11 | public PostgreSqlView() 12 | { 13 | this.AlterScriptSupported = false; 14 | } 15 | 16 | /// 17 | /// Gets or sets the view's check option 18 | /// 19 | public string CheckOption { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/DatabaseProvider/MariaDbDatabaseProviderOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.DatabaseProvider 2 | { 3 | /// 4 | /// Provides the options to connect to a MariaDB Server 5 | /// 6 | public class MariaDbDatabaseProviderOptions : ADatabaseProviderOptions 7 | { 8 | /// 9 | /// The default port 10 | /// 11 | public static readonly ushort DefaultPort = 3306; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | public MariaDbDatabaseProviderOptions() 17 | { 18 | this.Port = DefaultPort; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/DatabaseProvider/MicrosoftSqlDatabaseProviderOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.DatabaseProvider 2 | { 3 | /// 4 | /// Provides the options to connect to a Microsoft SQL Server 5 | /// 6 | public class MicrosoftSqlDatabaseProviderOptions : ADatabaseProviderOptions 7 | { 8 | /// 9 | /// The default port 10 | /// 11 | public static readonly ushort DefaultPort = 1433; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | public MicrosoftSqlDatabaseProviderOptions() 17 | { 18 | this.Port = DefaultPort; 19 | } 20 | 21 | /// 22 | /// Gets or sets a value indicating whether to use the Windows integrated authentication 23 | /// 24 | public bool UseWindowsAuthentication { get; set; } 25 | 26 | /// 27 | /// Gets or sets a value indicating whether to use the Azure authentication 28 | /// 29 | public bool UseAzureAuthentication { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/DatabaseProvider/MySqlDatabaseProviderOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.DatabaseProvider 2 | { 3 | /// 4 | /// Provides the options to connect to a MySQL Server 5 | /// 6 | public class MySqlDatabaseProviderOptions : ADatabaseProviderOptions 7 | { 8 | /// 9 | /// The default port 10 | /// 11 | public static readonly ushort DefaultPort = 3306; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | public MySqlDatabaseProviderOptions() 17 | { 18 | this.Port = DefaultPort; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/DatabaseProvider/PostgreSqlDatabaseProviderOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.DatabaseProvider 2 | { 3 | /// 4 | /// Provides the options to connect to a PostgreSQL Server 5 | /// 6 | public class PostgreSqlDatabaseProviderOptions : ADatabaseProviderOptions 7 | { 8 | /// 9 | /// The default port 10 | /// 11 | public static readonly ushort DefaultPort = 5432; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | public PostgreSqlDatabaseProviderOptions() 17 | { 18 | this.Port = DefaultPort; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Project/CompareProject.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Project 2 | { 3 | /// 4 | /// Defines a database comparison project 5 | /// 6 | [XmlInclude(typeof(ADatabaseProviderOptions))] 7 | [XmlInclude(typeof(MicrosoftSqlDatabaseProviderOptions))] 8 | [XmlInclude(typeof(MySqlDatabaseProviderOptions))] 9 | [XmlInclude(typeof(PostgreSqlDatabaseProviderOptions))] 10 | [XmlInclude(typeof(MariaDbDatabaseProviderOptions))] 11 | [XmlInclude(typeof(ProjectOptions))] 12 | public class CompareProject 13 | { 14 | /// 15 | /// Gets or sets the database provider options for the source database 16 | /// 17 | public ADatabaseProviderOptions SourceProviderOptions { get; set; } 18 | 19 | /// 20 | /// Gets or sets the database provider options for the target database 21 | /// 22 | public ADatabaseProviderOptions TargetProviderOptions { get; set; } 23 | 24 | /// 25 | /// Gets or sets the project options 26 | /// 27 | public ProjectOptions Options { get; set; } 28 | 29 | /// 30 | /// Gets or sets the project state 31 | /// 32 | [XmlIgnore] 33 | public ProjectState State { get; set; } 34 | 35 | /// 36 | /// Gets or sets a value indicating whether the database type is editalbe 37 | /// 38 | [XmlIgnore] 39 | public bool EditableDatabaseType { get; set; } 40 | 41 | /// 42 | /// Gets or sets the result of the comparison 43 | /// 44 | [XmlIgnore] 45 | public CompareResult Result { get; set; } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Project/FilterClause.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Project 2 | { 3 | /// 4 | /// Represent a single filtering clause 5 | /// 6 | public class FilterClause 7 | { 8 | /// 9 | /// Gets or sets the group which will be used to join with an AND those 10 | /// of the same group and with OR between different groups 11 | /// 12 | public int Group { get; set; } 13 | 14 | /// 15 | /// Gets or sets the object type 16 | /// 17 | public DatabaseObjectType? ObjectType { get; set; } 18 | 19 | /// 20 | /// Gets or sets the field to filter 21 | /// 22 | public FilterField Field { get; set; } 23 | 24 | /// 25 | /// Gets or sets the filter operator 26 | /// 27 | public FilterOperator Operator { get; set; } 28 | 29 | /// 30 | /// Gets or sets the filtering value 31 | /// 32 | public string Value { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Project/FilteringOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Project 2 | { 3 | /// 4 | /// The filtering options for the project 5 | /// 6 | public class FilteringOptions 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether to consider the clauses as include or exclude 10 | /// 11 | public bool Include { get; set; } 12 | 13 | /// 14 | /// Gets the list of filter clauses 15 | /// 16 | public List Clauses { get; } = new List(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Project/ProjectOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Project 2 | { 3 | /// 4 | /// Configurable options of the project 5 | /// 6 | public class ProjectOptions 7 | { 8 | /// 9 | /// Gets or sets the scripting options 10 | /// 11 | public ScriptingOptions Scripting { get; set; } = new ScriptingOptions(); 12 | 13 | /// 14 | /// Gets or sets the filtering options 15 | /// 16 | public FilteringOptions Filtering { get; set; } = new FilteringOptions(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/Project/ScriptingOptions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities.Project 2 | { 3 | /// 4 | /// The scripting options of the project 5 | /// 6 | public class ScriptingOptions 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether collate must be ignored 10 | /// 11 | public bool IgnoreCollate { get; set; } = true; 12 | 13 | /// 14 | /// Gets or sets a value indicating whether column should be scripted in alphabetical order 15 | /// 16 | public bool OrderColumnAlphabetically { get; set; } 17 | 18 | /// 19 | /// Gets or sets a value indicating whether the reference table columns order should be ignored when scripting columns 20 | /// 21 | public bool IgnoreReferenceTableColumnOrder { get; set; } 22 | 23 | /// 24 | /// Gets or sets a value indicating whether to generate update script for new not null columns. 25 | /// 26 | public bool GenerateUpdateScriptForNewNotNullColumns { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Entities/TaskWork.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Entities 2 | { 3 | /// 4 | /// Defines a Task and it's work to do 5 | /// 6 | public class TaskWork 7 | { 8 | /// 9 | /// Initializes a new instance of the class. 10 | /// 11 | /// The Task information 12 | /// Perform the Task in parallel 13 | /// The work that the Task has to do 14 | public TaskWork(TaskInfo info, bool runInParallel, Func work) 15 | { 16 | this.Info = info; 17 | this.RunInParallel = runInParallel; 18 | this.Work = work; 19 | } 20 | 21 | /// 22 | /// Gets the Task information 23 | /// 24 | public TaskInfo Info { get; } 25 | 26 | /// 27 | /// Gets a value indicating whether to run the Task is parallel 28 | /// 29 | public bool RunInParallel { get; } 30 | 31 | /// 32 | /// Gets the work function that the Task has to do 33 | /// 34 | public Func Work { get; } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/CompareDirection.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// Represent the database comparison direction 5 | /// 6 | public enum CompareDirection 7 | { 8 | /// 9 | /// Represent the source database 10 | /// 11 | Source = 0, 12 | 13 | /// 14 | /// Represent the target database 15 | /// 16 | Target = 1, 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/DatabaseObjectType.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of database object types 5 | /// 6 | public enum DatabaseObjectType 7 | { 8 | /// 9 | /// The schema 10 | /// 11 | Schema = 0, 12 | 13 | /// 14 | /// The table 15 | /// 16 | Table = 1, 17 | 18 | /// 19 | /// The column 20 | /// 21 | Column = 2, 22 | 23 | /// 24 | /// The primary key 25 | /// 26 | PrimaryKey = 3, 27 | 28 | /// 29 | /// The foreign key 30 | /// 31 | ForeignKey = 4, 32 | 33 | /// 34 | /// The index 35 | /// 36 | Index = 5, 37 | 38 | /// 39 | /// The constraint 40 | /// 41 | Constraint = 6, 42 | 43 | /// 44 | /// The trigger 45 | /// 46 | Trigger = 7, 47 | 48 | /// 49 | /// The view 50 | /// 51 | View = 8, 52 | 53 | /// 54 | /// The function 55 | /// 56 | Function = 9, 57 | 58 | /// 59 | /// The stored procedure 60 | /// 61 | StoredProcedure = 10, 62 | 63 | /// 64 | /// The data type 65 | /// 66 | DataType = 11, 67 | 68 | /// 69 | /// The sequence 70 | /// 71 | Sequence = 12, 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/DatabaseType.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of possible sources for retrieving database data 5 | /// 6 | public enum DatabaseType 7 | { 8 | /// 9 | /// Microsoft SQL Server 10 | /// 11 | MicrosoftSql = 0, 12 | 13 | /// 14 | /// MySQL 15 | /// 16 | MySql = 1, 17 | 18 | /// 19 | /// PostgreSQL 20 | /// 21 | PostgreSql = 2, 22 | 23 | /// 24 | /// MariaDB 25 | /// 26 | MariaDb = 3, 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/FilterField.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of possible fields to filter 5 | /// 6 | public enum FilterField 7 | { 8 | /// 9 | /// Filter the schema 10 | /// 11 | Schema = 0, 12 | 13 | /// 14 | /// Filter the object name 15 | /// 16 | Name = 1, 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/FilterOperator.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of possible operators for the filtering clauses 5 | /// 6 | public enum FilterOperator 7 | { 8 | /// 9 | /// Filter objects that begins with a specific value 10 | /// 11 | BeginsWith = 0, 12 | 13 | /// 14 | /// Filter objects that ends with a specific value 15 | /// 16 | EndsWith = 1, 17 | 18 | /// 19 | /// Filter objects that contains a specific value 20 | /// 21 | Contains = 2, 22 | 23 | /// 24 | /// Filter objects that are equal to a specific value 25 | /// 26 | Equals = 3, 27 | 28 | /// 29 | /// Filter objects that not begins with a specific value 30 | /// 31 | NotBeginsWith = 4, 32 | 33 | /// 34 | /// Filter objects that not ends with a specific value 35 | /// 36 | NotEndsWith = 5, 37 | 38 | /// 39 | /// Filter objects that not contains a specific value 40 | /// 41 | NotContains = 6, 42 | 43 | /// 44 | /// Filter objects that are not equal to a specific value 45 | /// 46 | NotEquals = 7, 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/Language.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of available languages 5 | /// 6 | public enum Language 7 | { 8 | /// 9 | /// The English (Default) 10 | /// 11 | English = 0, 12 | 13 | /// 14 | /// The German 15 | /// 16 | German = 1, 17 | 18 | /// 19 | /// The Italian 20 | /// 21 | Italian = 2, 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/LogLevel.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// Defines logging severity levels 5 | /// 6 | public enum LogLevel 7 | { 8 | /// 9 | /// Logs that contain the most detailed messages 10 | /// 11 | Trace = 0, 12 | 13 | /// 14 | /// Logs that are used for interactive investigation during development 15 | /// 16 | Debug = 1, 17 | 18 | /// 19 | /// Logs that track the general flow of the application 20 | /// 21 | Info = 2, 22 | 23 | /// 24 | /// Logs that highlight an abnormal or unexpected event in the application flow 25 | /// 26 | Warning = 3, 27 | 28 | /// 29 | /// Logs that highlight when the current flow of execution is stopped due to a failure 30 | /// 31 | Error = 4, 32 | 33 | /// 34 | /// Logs that describe an unrecoverable application or system crash 35 | /// 36 | Critical = 5, 37 | 38 | /// 39 | /// Specifies that should not write any messages 40 | /// 41 | None = 6, 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Enums/ProjectState.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Enums 2 | { 3 | /// 4 | /// List of possible project status 5 | /// 6 | public enum ProjectState 7 | { 8 | /// 9 | /// The project is new 10 | /// 11 | New = 0, 12 | 13 | /// 14 | /// The project is dirty 15 | /// 16 | Dirty = 1, 17 | 18 | /// 19 | /// The project has been saved 20 | /// 21 | Saved = 2, 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Extensions/StringBuilderExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Extensions 2 | { 3 | /// 4 | /// The StringBuilder extensions 5 | /// 6 | public static class StringBuilderExtensions 7 | { 8 | /// 9 | /// Appends the default line terminator if it's not empty. 10 | /// 11 | /// The StringBuilder. 12 | /// A reference to this instance 13 | public static StringBuilder AppendLineIfNotEmpty(this StringBuilder sb) 14 | { 15 | if (sb == null) 16 | { 17 | throw new ArgumentNullException(nameof(sb)); 18 | } 19 | 20 | return sb.Length > 0 ? sb.AppendLine() : sb; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/IDatabaseFilter.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces 2 | { 3 | /// 4 | /// Defines a class that provides the mechanism to filter the database objects 5 | /// 6 | public interface IDatabaseFilter 7 | { 8 | /// 9 | /// Performs the filtering of the database objects 10 | /// 11 | /// The database to filter 12 | /// The filtering options 13 | void PerformFilter(ABaseDb database, FilteringOptions filteringOptions); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/IDatabaseMapper.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces 2 | { 3 | /// 4 | /// Defines a class that provides the mechanism to map 2 databases 5 | /// 6 | public interface IDatabaseMapper 7 | { 8 | /// 9 | /// Perform the mapping of 2 databases 10 | /// 11 | /// The source database 12 | /// The target database 13 | /// The mapping table 14 | /// The task information 15 | void PerformMapping(ABaseDb source, ABaseDb target, object mappingTable, TaskInfo taskInfo); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/IDatabaseProvider.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to retrieve various information of a database 5 | /// 6 | public interface IDatabaseProvider 7 | { 8 | /// 9 | /// Gets the server version 10 | /// 11 | Version CurrentServerVersion { get; } 12 | 13 | /// 14 | /// Gets the database structure 15 | /// 16 | /// The task info for async operations 17 | /// The database structure 18 | ABaseDb GetDatabase(TaskInfo taskInfo); 19 | 20 | /// 21 | /// Gets the list of available database 22 | /// 23 | /// The list of database names 24 | List GetDatabaseList(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/IDatabaseProviderFactory.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces 2 | { 3 | /// 4 | /// Defines a class that creates a database provider 5 | /// 6 | public interface IDatabaseProviderFactory 7 | { 8 | /// 9 | /// Creates the database providers depending on the options 10 | /// 11 | /// The database provider options 12 | /// The specific database provider 13 | IDatabaseProvider Create(ADatabaseProviderOptions dbpo); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/IDatabaseScripterFactory.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces 2 | { 3 | /// 4 | /// Defines a class that creates a database scripter 5 | /// 6 | public interface IDatabaseScripterFactory 7 | { 8 | /// 9 | /// Creates the database scripter depending on the database 10 | /// 11 | /// The database that must be scripted 12 | /// The project options 13 | /// The specific database scripter 14 | IDatabaseScripter Create(ABaseDb database, ProjectOptions options); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Repository/IAppSettingsRepository.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Repository 2 | { 3 | /// 4 | /// Defines a class that provides the mechanism to store and retrieve application settings 5 | /// 6 | public interface IAppSettingsRepository 7 | { 8 | /// 9 | /// Reads the application settings 10 | /// 11 | /// The application settings 12 | AppSettings Read(); 13 | 14 | /// 15 | /// Writes the application settings 16 | /// 17 | /// The application settings that must be written 18 | void Write(AppSettings appSettings); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Repository/IProjectRepository.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Repository 2 | { 3 | /// 4 | /// Defines a class that provides the mechanism to store and retrieve the project configuration 5 | /// 6 | public interface IProjectRepository 7 | { 8 | /// 9 | /// Read the project configuration from a file 10 | /// 11 | /// The file to read from 12 | /// The project 13 | CompareProject Read(string filename); 14 | 15 | /// 16 | /// Write the project configuration to a file 17 | /// 18 | /// The project to save 19 | /// The file path 20 | void Write(CompareProject project, string filename); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/IAppSettingsService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to handle application settings. 5 | /// 6 | public interface IAppSettingsService 7 | { 8 | /// 9 | /// Gets the current application settings 10 | /// 11 | /// The current apllication settings 12 | AppSettings GetAppSettings(); 13 | 14 | /// 15 | /// Save the new application settings 16 | /// 17 | void SaveAppSettings(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/ICipherService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to encrypt/decrypt strings 5 | /// 6 | public interface ICipherService 7 | { 8 | /// 9 | /// Encrypts the string 10 | /// 11 | /// The text to encrypt 12 | /// The encrypted string 13 | string EncryptString(string text); 14 | 15 | /// 16 | /// Decrypts the string 17 | /// 18 | /// The text to decrypt 19 | /// The decrypted string 20 | string DecryptString(string text); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to compare two database instances 5 | /// 6 | public interface IDatabaseCompareService 7 | { 8 | /// 9 | /// Compares two databases 10 | /// 11 | void StartCompare(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/IDatabaseService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to read information from a database 5 | /// 6 | public interface IDatabaseService 7 | { 8 | /// 9 | /// Returns a list of all available databases 10 | /// 11 | /// The options for the database 12 | /// The list of database names 13 | List ListDatabases(ADatabaseProviderOptions options); 14 | 15 | /// 16 | /// Gets the database structure 17 | /// 18 | /// The options for the database 19 | /// The task info for async operations 20 | /// The database structure 21 | ABaseDb GetDatabase(ADatabaseProviderOptions options, TaskInfo taskInfo); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/ILocalizationService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to handle the localization 5 | /// 6 | public interface ILocalizationService 7 | { 8 | /// 9 | /// Sets the language 10 | /// 11 | /// The desired language 12 | void SetLanguage(Language language); 13 | 14 | /// 15 | /// Gets the localization dictionary 16 | /// 17 | /// The dictionary with the tokens as key and their localized strings as values 18 | Dictionary GetLocalizationDictionary(); 19 | 20 | /// 21 | /// Gets the string localized in the current configured language 22 | /// 23 | /// The token 24 | /// The localized string 25 | string GetString(string token); 26 | 27 | /// 28 | /// Gets the string localized in a specific language 29 | /// 30 | /// The token 31 | /// The language 32 | /// The localized string 33 | string GetString(string token, CultureInfo culture); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/IProjectService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | /// 4 | /// Defines a class that provides the mechanisms to handle the project. 5 | /// 6 | public interface IProjectService 7 | { 8 | /// 9 | /// Gets the current project 10 | /// 11 | CompareProject Project { get; } 12 | 13 | /// 14 | /// Create a new project 15 | /// 16 | /// The database type 17 | /// Returns false whether there is a project open 18 | bool NewProject(DatabaseType? databaseType); 19 | 20 | /// 21 | /// Saves the project 22 | /// 23 | /// Path to save the project 24 | void SaveProject(string filename); 25 | 26 | /// 27 | /// Closes the project 28 | /// 29 | void CloseProject(); 30 | 31 | /// 32 | /// Load a project from a file 33 | /// 34 | /// The filename from which the project must be loaded 35 | void LoadProject(string filename); 36 | 37 | /// 38 | /// Set the opened project in the dirty state 39 | /// 40 | void SetDirtyState(); 41 | 42 | /// 43 | /// Check if the project need to be saved 44 | /// 45 | /// True if the project need to be saved 46 | bool NeedSave(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/Interfaces/Services/ITaskService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Core.Interfaces.Services 2 | { 3 | using System.Collections.ObjectModel; 4 | 5 | /// 6 | /// Defines a class that provides the mechanisms to handle asynchronous Tasks. 7 | /// 8 | public interface ITaskService 9 | { 10 | /// 11 | /// Gets the information about the current Task 12 | /// 13 | /// The updated Task information 14 | ReadOnlyCollection CurrentTaskInfos { get; } 15 | 16 | /// 17 | /// Perform the execution of the Tasks 18 | /// 19 | /// The list of Tasks to be executed 20 | void ExecuteTasks(List tasks); 21 | 22 | /// 23 | /// Aborts the current Task 24 | /// 25 | void Abort(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Core/SQLSchemaCompare.Core.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | TiCodeX.SQLSchemaCompare.Core 4 | TiCodeX.SQLSchemaCompare.Core 5 | false 6 | false 7 | 8 | 9 | 10 | 11 | runtime; build; native; contentfiles; analyzers; buildtransitive 12 | all 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Infrastructure/EntityFramework/MySqlDatabaseContext.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Infrastructure.EntityFramework 2 | { 3 | /// 4 | /// Defines the MySql database context 5 | /// 6 | internal class MySqlDatabaseContext : ADatabaseContext 7 | { 8 | /// 9 | /// Initializes a new instance of the class. 10 | /// 11 | /// The injected logger factory 12 | /// The injected cipher service 13 | /// The MySql database provider options 14 | public MySqlDatabaseContext(ILoggerFactory loggerFactory, ICipherService cipherService, MySqlDatabaseProviderOptions dbpo) 15 | : base(loggerFactory, dbpo) 16 | { 17 | var connStr = $"Server={dbpo.Hostname};Port={dbpo.Port};Database={dbpo.Database};User Id={dbpo.Username};Password={cipherService.DecryptString(dbpo.Password)};"; 18 | 19 | connStr += dbpo.UseSsl 20 | ? dbpo.IgnoreServerCertificate 21 | ? "SslMode=Required;" 22 | : "SslMode=VerifyFull;" 23 | : "SslMode=None;AllowPublicKeyRetrieval=true;"; 24 | 25 | this.ConnectionString = connStr; 26 | } 27 | 28 | /// 29 | /// Gets the string used for the connection 30 | /// 31 | private string ConnectionString { get; } 32 | 33 | /// 34 | protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 35 | { 36 | base.OnConfiguring(optionsBuilder); 37 | optionsBuilder.UseMySql(this.ConnectionString, ServerVersion.AutoDetect(this.ConnectionString)); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Infrastructure/InternalsVisibleTo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("TiCodeX.SQLSchemaCompare.Test")] 4 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | TiCodeX.SQLSchemaCompare.Infrastructure 4 | TiCodeX.SQLSchemaCompare.Infrastructure 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | runtime; build; native; contentfiles; analyzers; buildtransitive 13 | all 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Infrastructure/SqlScripters/DatabaseScripterFactory.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Infrastructure.SqlScripters 2 | { 3 | /// 4 | /// Implementation class for the factory that create a Database scripter 5 | /// 6 | public class DatabaseScripterFactory : IDatabaseScripterFactory 7 | { 8 | /// 9 | /// The logger factory 10 | /// 11 | private readonly ILoggerFactory loggerFactory; 12 | 13 | /// 14 | /// Initializes a new instance of the class. 15 | /// 16 | /// The injected loggerfactory 17 | public DatabaseScripterFactory(ILoggerFactory loggerFactory) 18 | { 19 | this.loggerFactory = loggerFactory; 20 | } 21 | 22 | /// 23 | public IDatabaseScripter Create(ABaseDb database, ProjectOptions options) 24 | { 25 | switch (database) 26 | { 27 | case MicrosoftSqlDb _: 28 | return new MicrosoftSqlScripter(this.loggerFactory.CreateLogger(nameof(MicrosoftSqlScripter)), options); 29 | case MySqlDb _: 30 | return new MySqlScripter(this.loggerFactory.CreateLogger(nameof(MySqlScripter)), options); 31 | case PostgreSqlDb _: 32 | return new PostgreSqlScripter(this.loggerFactory.CreateLogger(nameof(PostgreSqlScripter)), options); 33 | default: 34 | throw new NotSupportedException("Unknown Database Type"); 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Services/DatabaseService.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Services 2 | { 3 | /// 4 | /// Implementation that provides the mechanisms to read information from a database 5 | /// 6 | public class DatabaseService : IDatabaseService 7 | { 8 | /// 9 | /// The db provider factory 10 | /// 11 | private readonly IDatabaseProviderFactory dbProviderFactory; 12 | 13 | /// 14 | /// Initializes a new instance of the class. 15 | /// 16 | /// The injected database provider factory 17 | public DatabaseService(IDatabaseProviderFactory dbProviderFactory) 18 | { 19 | this.dbProviderFactory = dbProviderFactory; 20 | } 21 | 22 | /// 23 | public List ListDatabases(ADatabaseProviderOptions options) 24 | { 25 | if (options == null) 26 | { 27 | throw new ArgumentNullException(nameof(options)); 28 | } 29 | 30 | // Remove the database since we want to retrieve all of them 31 | options.Database = string.Empty; 32 | var provider = this.dbProviderFactory.Create(options); 33 | return provider.GetDatabaseList().OrderBy(x => x).ToList(); 34 | } 35 | 36 | /// 37 | public ABaseDb GetDatabase(ADatabaseProviderOptions options, TaskInfo taskInfo) 38 | { 39 | var provider = this.dbProviderFactory.Create(options); 40 | return provider.GetDatabase(taskInfo); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | TiCodeX.SQLSchemaCompare.Services 4 | TiCodeX.SQLSchemaCompare.Services 5 | en 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | runtime; build; native; contentfiles; analyzers; buildtransitive 14 | all 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | True 26 | True 27 | Localization.resx 28 | 29 | 30 | 31 | 32 | 33 | PublicResXFileCodeGenerator 34 | Localization.Designer.cs 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Test/BaseTests.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Test 2 | { 3 | /// 4 | /// Base class for every test 5 | /// 6 | /// Type for the initialization of the Logger 7 | public abstract class BaseTests : IDisposable 8 | { 9 | /// 10 | /// Initializes a new instance of the class. 11 | /// 12 | /// The test output helper 13 | protected BaseTests(ITestOutputHelper output) 14 | { 15 | this.Logger = new XunitLogger(typeof(T).Name, output); 16 | this.LoggerFactory = new XunitLoggerFactory(output); 17 | } 18 | 19 | /// 20 | /// Gets the Logger 21 | /// 22 | protected XunitLogger Logger { get; } 23 | 24 | /// 25 | /// Gets the LoggerFactory 26 | /// 27 | protected XunitLoggerFactory LoggerFactory { get; } 28 | 29 | /// 30 | public void Dispose() 31 | { 32 | this.Dispose(true); 33 | GC.SuppressFinalize(this); 34 | } 35 | 36 | /// 37 | /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources 38 | /// 39 | /// Indicates whether the method call comes from a Dispose method (its value is true) or from a finalizer (its value is false) 40 | protected virtual void Dispose(bool disposing) 41 | { 42 | if (disposing) 43 | { 44 | this.Logger?.Dispose(); 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Test/Datasources/ScriptMicrosoftSqlColumnTest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.Test/Datasources/ScriptMicrosoftSqlColumnTest.xlsx -------------------------------------------------------------------------------- /SQLSchemaCompare.Test/Datasources/ScriptMicrosoftSqlDataTypeTest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.Test/Datasources/ScriptMicrosoftSqlDataTypeTest.xlsx -------------------------------------------------------------------------------- /SQLSchemaCompare.Test/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | [assembly: SuppressMessage("Performance", "CA1825:Avoid zero-length array allocations", Justification = "False positive")] 7 | [assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1515:Single-line comment should be preceded by blank line", Justification = "Readability")] 8 | -------------------------------------------------------------------------------- /SQLSchemaCompare.Test/XunitLoggerFactory.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.Test 2 | { 3 | /// 4 | /// Implementation of the ILoggerFactory interface that uses the Xunit log system to write 5 | /// 6 | public sealed class XunitLoggerFactory : ILoggerFactory 7 | { 8 | /// 9 | /// The output 10 | /// 11 | private readonly ITestOutputHelper output; 12 | 13 | /// 14 | /// Initializes a new instance of the class. 15 | /// 16 | /// The Xunit logger 17 | public XunitLoggerFactory(ITestOutputHelper output) 18 | { 19 | this.output = output; 20 | } 21 | 22 | /// 23 | public void AddProvider(ILoggerProvider provider) 24 | { 25 | // Do nothing 26 | } 27 | 28 | /// 29 | public ILogger CreateLogger(string categoryName) 30 | { 31 | return new XunitLogger(categoryName, this.output); 32 | } 33 | 34 | /// 35 | public void Dispose() 36 | { 37 | // Do nothing 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Enums/ButtonSize.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Enums 2 | { 3 | /// 4 | /// List of possible button sizes 5 | /// 6 | public enum ButtonSize 7 | { 8 | /// 9 | /// Default size 10 | /// 11 | Default, 12 | 13 | /// 14 | /// Small size 15 | /// 16 | Small, 17 | 18 | /// 19 | /// Large size 20 | /// 21 | Large, 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Enums/ButtonState.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Enums 2 | { 3 | /// 4 | /// List of possible states of a button 5 | /// 6 | public enum ButtonState 7 | { 8 | /// 9 | /// Normal button 10 | /// 11 | Default, 12 | 13 | /// 14 | /// Makes the button appear pressed 15 | /// 16 | Active, 17 | 18 | /// 19 | /// Makes the button unclickable 20 | /// 21 | Disabled, 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Enums/ButtonStyle.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Enums 2 | { 3 | /// 4 | /// List of possible button styles 5 | /// 6 | public enum ButtonStyle 7 | { 8 | /// 9 | /// Adds basic styling to the button 10 | /// 11 | Basic, 12 | 13 | /// 14 | /// Provides extra visual weight and identifies the primary action in a set of buttons 15 | /// 16 | Primary, 17 | 18 | /// 19 | /// Provides extra visual weight and identifies the secondary action in a set of buttons 20 | /// 21 | Secondary, 22 | 23 | /// 24 | /// Indicates a successful or positive action 25 | /// 26 | Success, 27 | 28 | /// 29 | /// Indicates a dangerous or potentially negative action 30 | /// 31 | Danger, 32 | 33 | /// 34 | /// Indicates caution should be taken with this action 35 | /// 36 | Warning, 37 | 38 | /// 39 | /// Contextual button for informational alert messages 40 | /// 41 | Info, 42 | 43 | /// 44 | /// Provides a light color button 45 | /// 46 | Light, 47 | 48 | /// 49 | /// Provides a dark color button 50 | /// 51 | Dark, 52 | 53 | /// 54 | /// Makes a button look like a link (will still have button behavior) 55 | /// 56 | Link, 57 | 58 | /// 59 | /// Custom highlight theme color 60 | /// 61 | TcxHighlight, 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Extensions/RequestValidatorExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Extensions 2 | { 3 | using Microsoft.AspNetCore.Builder; 4 | 5 | /// 6 | /// Defines the RequestValidator extension of the IApplicationBuilder 7 | /// 8 | public static class RequestValidatorExtensions 9 | { 10 | /// 11 | /// Add the RequestValidator middleware to the application's request pipeline 12 | /// 13 | /// The IApplicationBuilder instance 14 | /// The same IApplicationBuilder instance 15 | public static IApplicationBuilder UseRequestValidator(this IApplicationBuilder app) 16 | { 17 | app.UseMiddleware(); 18 | 19 | return app; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Middlewares/RequestValidatorSettings.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Middlewares 2 | { 3 | /// 4 | /// Configuration options for the RequestValidator middleware 5 | /// 6 | public class RequestValidatorSettings 7 | { 8 | /// 9 | /// Gets or sets the specific Guid to validate the request 10 | /// 11 | public string AllowedRequestGuid { get; set; } 12 | 13 | /// 14 | /// Gets or sets the specific brower UserAgent to validate the request 15 | /// 16 | public string AllowedRequestAgent { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Models/FeedbackRequest.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Models 2 | { 3 | /// 4 | /// Represent a feedback request 5 | /// 6 | public class FeedbackRequest 7 | { 8 | /// 9 | /// Gets or sets the feedback rating 10 | /// 11 | public int? Rating { get; set; } 12 | 13 | /// 14 | /// Gets or sets the comment message 15 | /// 16 | public string Comment { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Models/LoadProjectRequest.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Models 2 | { 3 | /// 4 | /// Represent a load project request 5 | /// 6 | public class LoadProjectRequest 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether to ignore the dirty state 10 | /// 11 | public bool IgnoreDirty { get; set; } 12 | 13 | /// 14 | /// Gets or sets the filename to load 15 | /// 16 | public string Filename { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Models/NewProjectRequest.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Models 2 | { 3 | /// 4 | /// Represent a new project request 5 | /// 6 | public class NewProjectRequest 7 | { 8 | /// 9 | /// Gets or sets a value indicating whether to ignore the dirty state 10 | /// 11 | public bool IgnoreDirty { get; set; } 12 | 13 | /// 14 | /// Gets or sets the database type 15 | /// 16 | public DatabaseType? DatabaseType { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/AboutPageModel.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @using Core.Interfaces 3 | @using Services 4 | @using TiCodeX.SQLSchemaCompare.Core.Entities.Api 5 | @model AboutPageModel 6 | 7 |
8 |
9 |
10 | 11 |
12 | 13 |
14 |
15 |
v@(Model.AppVersion)
16 |
17 |
18 | 19 |
20 |
21 | @Localization.LabelAbout 22 |
23 |
24 | @Localization.LabelWebsite: https://github.com/TiCodeX/SQLSchemaCompare 25 |
26 | @Localization.LabelLicense: GPL-3.0 27 |
28 |
29 |
30 |
31 | 34 |
35 |
36 |
37 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/AboutPageModel.cshtml.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Pages 2 | { 3 | /// 4 | /// PageModel of the about page 5 | /// 6 | public class AboutPageModel : PageModel 7 | { 8 | /// 9 | /// The app globals 10 | /// 11 | private readonly IAppGlobals appGlobals; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | /// The injected application globals 17 | public AboutPageModel(IAppGlobals appGlobals) 18 | { 19 | this.appGlobals = appGlobals; 20 | } 21 | 22 | /// 23 | /// Gets or sets the name of the product 24 | /// 25 | public string ProductName { get; set; } 26 | 27 | /// 28 | /// Gets or sets the application version 29 | /// 30 | public string AppVersion { get; set; } 31 | 32 | /// 33 | /// Get the about page 34 | /// 35 | public void OnGet() 36 | { 37 | this.ProductName = this.appGlobals.ProductName; 38 | this.AppVersion = this.appGlobals.AppVersion; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/ErrorPage.cshtml.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Pages 2 | { 3 | /// 4 | /// PageModel for the Error page 5 | /// 6 | public class ErrorPage : PageModel 7 | { 8 | /// 9 | /// The app globals 10 | /// 11 | private readonly IAppGlobals appGlobals; 12 | 13 | /// 14 | /// Initializes a new instance of the class 15 | /// 16 | /// The application globals 17 | public ErrorPage(IAppGlobals appGlobals) 18 | { 19 | this.appGlobals = appGlobals; 20 | } 21 | 22 | /// 23 | /// Gets or sets the title of the page 24 | /// 25 | public string Title { get; set; } 26 | 27 | /// 28 | /// Get the Error page 29 | /// 30 | public void OnGet() 31 | { 32 | this.Title = $"{this.appGlobals.ProductName} - {this.appGlobals.CompanyName}"; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/Index.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model Index 3 | 4 | 5 | 6 | 7 | 8 | 9 | @Model.Title 10 | 11 | 12 | 13 | 14 | @Html.AntiForgeryToken() 15 | 16 |
17 |
18 |
19 |
20 |
21 |
22 | 23 | 24 | @await Html.PartialAsync("_ModalDialog") 25 | 26 |
27 | × 28 | 29 |
30 | 31 | 45 | 46 | @await Html.PartialAsync("_ScriptSetup") 47 | 48 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/Main/SqlScriptPageModel.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @using Core.Interfaces 3 | @using Enums 4 | @using Services 5 | @model SqlScriptPageModel 6 | 7 |
8 |
9 | 10 |
11 | 12 |
13 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/TaskStatusPageModel.cshtml.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Pages 2 | { 3 | /// 4 | /// PageModel of the TaskStatus page 5 | /// 6 | public class TaskStatusPageModel : PageModel 7 | { 8 | /// 9 | /// The task service 10 | /// 11 | private readonly ITaskService taskService; 12 | 13 | /// 14 | /// Initializes a new instance of the class. 15 | /// 16 | /// The injected task service 17 | public TaskStatusPageModel(ITaskService taskService) 18 | { 19 | this.taskService = taskService; 20 | } 21 | 22 | /// 23 | /// Gets or sets the current list of TaskInfo 24 | /// 25 | public IReadOnlyCollection TaskInfos { get; set; } 26 | 27 | /// 28 | /// Get the TaskStatus page for the current Task 29 | /// 30 | public void OnGet() 31 | { 32 | this.TaskInfos = this.taskService.CurrentTaskInfos; 33 | } 34 | 35 | /// 36 | /// Aborts the current running task 37 | /// 38 | /// The resulting json 39 | public IActionResult OnGetAbortTask() 40 | { 41 | this.taskService.Abort(); 42 | return new JsonResult(new ApiResponse()); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/ToolbarPageModel.cshtml.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Pages 2 | { 3 | /// 4 | /// PageModel of the Toolbar 5 | /// 6 | public class ToolbarPageModel : PageModel 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/WelcomePageModel.cshtml.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.Pages 2 | { 3 | /// 4 | /// PageModel of the Welcome page 5 | /// 6 | public class WelcomePageModel : PageModel 7 | { 8 | /// 9 | /// The app settings service 10 | /// 11 | private readonly IAppSettingsService appSettingsService; 12 | 13 | /// 14 | /// Initializes a new instance of the class. 15 | /// 16 | /// The injected app settings service 17 | public WelcomePageModel(IAppSettingsService appSettingsService) 18 | { 19 | this.appSettingsService = appSettingsService; 20 | } 21 | 22 | /// 23 | /// Gets the recently opened projects 24 | /// 25 | public List RecentProjects { get; internal set; } 26 | 27 | /// 28 | /// Get the welcome page 29 | /// 30 | public void OnGet() 31 | { 32 | var settings = this.appSettingsService.GetAppSettings(); 33 | this.RecentProjects = settings.RecentProjects.TakeLast(10).Reverse().ToList(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/_ModalDialog.cshtml: -------------------------------------------------------------------------------- 1 | @using Core.Interfaces 2 | @using Enums 3 | @using Services 4 | 5 | 33 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Pages/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using Core.Interfaces 2 | @using Extensions 3 | @using UI 4 | @using TagHelpers 5 | @namespace TiCodeX.SQLSchemaCompare.UI.Pages 6 | @inject IAppGlobals AppGlobal 7 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 8 | @addTagHelper *, TiCodeX.SQLSchemaCompare.UI 9 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "SQLSchemaCompare.UI": { 4 | "commandName": "Project", 5 | "commandLineArgs": "25436", 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "http://localhost:25436/" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/TagHelpers/OptionTagHelper.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.TagHelpers 2 | { 3 | using Microsoft.AspNetCore.Razor.TagHelpers; 4 | 5 | /// 6 | /// TagHelper for option 7 | /// 8 | public class OptionTagHelper : TagHelper 9 | { 10 | /// 11 | /// Gets or sets a value indicating whether this is selected 12 | /// 13 | public bool Selected { get; set; } 14 | 15 | /// 16 | public override void Process(TagHelperContext context, TagHelperOutput output) 17 | { 18 | if (context == null) 19 | { 20 | throw new ArgumentNullException(nameof(context)); 21 | } 22 | 23 | if (output == null) 24 | { 25 | throw new ArgumentNullException(nameof(output)); 26 | } 27 | 28 | if (this.Selected) 29 | { 30 | output.Attributes.SetAttribute("selected", "selected"); 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/TagHelpers/SelectTagHelper.cs: -------------------------------------------------------------------------------- 1 | namespace TiCodeX.SQLSchemaCompare.UI.TagHelpers 2 | { 3 | using Microsoft.AspNetCore.Razor.TagHelpers; 4 | 5 | /// 6 | /// TagHelper for select 7 | /// 8 | public class SelectTagHelper : TagHelper 9 | { 10 | /// 11 | /// Gets or sets a value indicating whether this is disabled 12 | /// 13 | public bool Disabled { get; set; } 14 | 15 | /// 16 | public override void Process(TagHelperContext context, TagHelperOutput output) 17 | { 18 | if (context == null) 19 | { 20 | throw new ArgumentNullException(nameof(context)); 21 | } 22 | 23 | if (output == null) 24 | { 25 | throw new ArgumentNullException(nameof(output)); 26 | } 27 | 28 | var className = new HashSet(); 29 | 30 | if (output.Attributes["class"] != null) 31 | { 32 | output.Attributes["class"].Value.ToString().Trim().Split(' ').ToList().ForEach(x => className.Add(x)); 33 | } 34 | 35 | className.Add("form-control"); 36 | className.Add("form-control-sm"); 37 | 38 | output.Attributes.SetAttribute("class", string.Join(" ", className)); 39 | 40 | if (this.Disabled) 41 | { 42 | output.Attributes.SetAttribute("disabled", "disabled"); 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/certificate.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/certificate.pfx -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/compilerconfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "outputFile": "wwwroot/css/Index.css", 4 | "inputFile": "wwwroot/css/Index.scss", 5 | "minify": { 6 | "enabled": false 7 | }, 8 | "options": { 9 | "sourceMap": true 10 | } 11 | } 12 | ] -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/compilerconfig.json.defaults: -------------------------------------------------------------------------------- 1 | { 2 | "compilers": { 3 | "less": { 4 | "autoPrefix": "", 5 | "cssComb": "none", 6 | "ieCompat": true, 7 | "strictMath": false, 8 | "strictUnits": false, 9 | "relativeUrls": true, 10 | "rootPath": "", 11 | "sourceMapRoot": "", 12 | "sourceMapBasePath": "", 13 | "sourceMap": false 14 | }, 15 | "sass": { 16 | "includePath": "", 17 | "indentType": "space", 18 | "indentWidth": 2, 19 | "outputStyle": "nested", 20 | "Precision": 5, 21 | "relativeUrls": true, 22 | "sourceMapRoot": "", 23 | "sourceMap": false 24 | }, 25 | "stylus": { 26 | "sourceMap": false 27 | }, 28 | "babel": { 29 | "sourceMap": false 30 | }, 31 | "coffeescript": { 32 | "bare": false, 33 | "runtimeMode": "node", 34 | "sourceMap": false 35 | } 36 | }, 37 | "minifiers": { 38 | "css": { 39 | "enabled": true, 40 | "termSemicolons": true, 41 | "gzip": false 42 | }, 43 | "javascript": { 44 | "enabled": true, 45 | "termSemicolons": true, 46 | "gzip": false 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/eslint.config.js: -------------------------------------------------------------------------------- 1 | const tseslint = require("typescript-eslint"); 2 | const baseConfig = require("../BaseEslintConfig.js").getBaseConfig(__dirname); 3 | 4 | module.exports = tseslint.config( 5 | { 6 | ignores: [ 7 | "**/wwwroot/**/*.js", 8 | "**/wwwroot/lib", 9 | ], 10 | }, 11 | { 12 | ...baseConfig, 13 | rules: { 14 | ...baseConfig.rules, 15 | "sonarjs/new-cap": "off", // Too many changes to fix, is it worth it? 16 | "unicorn/filename-case": ["error", { "case": "pascalCase" }], 17 | }, 18 | }, 19 | ); 20 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sqlschemacompare.ui", 3 | "version": "1.0.0", 4 | "license": "GPL-3.0-only", 5 | "scripts": { 6 | "prelint": "yarn install --frozen-lockfile", 7 | "lint": "eslint . --cache", 8 | "lint-vs": "yarn lint --quiet --format visualstudio" 9 | }, 10 | "devDependencies": { 11 | "@eslint/js": "^9.12.0", 12 | "@tsconfig/recommended": "^1.0.7", 13 | "@tsconfig/strictest": "^2.0.5", 14 | "@types/eslint__js": "^8.42.3", 15 | "eslint": "^9.12.0", 16 | "eslint-formatter-visualstudio": "^8.40.0", 17 | "eslint-plugin-only-error": "^1.0.2", 18 | "eslint-plugin-sonarjs": "^2.0.3", 19 | "eslint-plugin-unicorn": "^56.0.0", 20 | "typescript": "^5.6.3", 21 | "typescript-eslint": "^8.10.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@tsconfig/recommended/tsconfig.json", 4 | "@tsconfig/strictest/tsconfig.json", 5 | "../BaseTsConfig.json" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/font/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/font/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/background.jpg -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/gutter-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/gutter-horizontal.png -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/gutter-vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/gutter-vertical.png -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/logo-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/logo-transparent.png -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/logo.png -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/img/ticodex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/img/ticodex.png -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/js/Entities/ApiResponse.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Represent an Api response 3 | */ 4 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 5 | class ApiResponse { 6 | 7 | /** 8 | * Indicates whether a response is success 9 | */ 10 | public Success?: boolean; 11 | 12 | /** 13 | * The error code 14 | */ 15 | public ErrorCode?: ApiErrorCode; 16 | 17 | /** 18 | * The error message 19 | */ 20 | public ErrorMessage?: string; 21 | 22 | /** 23 | * The error message 24 | */ 25 | public Result?: T; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/js/Entities/CompareResultItemScripts.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Represent the SQL scripts of a specific item 3 | */ 4 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 5 | class CompareResultItemScripts { 6 | /** 7 | * Gets or sets the creation script of the source item 8 | */ 9 | public SourceCreateScript?: string; 10 | 11 | /** 12 | * Gets or sets the creation script of the target item 13 | */ 14 | public TargetCreateScript?: string; 15 | 16 | /** 17 | * Gets or sets the alter script 18 | */ 19 | public AlterScript?: string; 20 | } 21 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/js/Localization.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains the Localization 3 | */ 4 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 5 | class Localization { 6 | /** 7 | * Dictionary containing the tokens and their related localized strings 8 | */ 9 | private static dictionary: Record = {}; 10 | 11 | /** 12 | * Get the localized string 13 | * @param token - The token of the string 14 | * @returns The localized string 15 | */ 16 | public static Get(token: string): string { 17 | return this.dictionary[token] ?? `[[${token}]]`; 18 | } 19 | 20 | /** 21 | * Load the localization 22 | */ 23 | public static async Load(): Promise { 24 | const result = await Utility.AjaxCall>("/Index?handler=LoadLocalization", HttpMethod.Get); 25 | if (result.Result) { 26 | this.dictionary = result.Result; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/js/Settings.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains utility methods related to the Settings page 3 | */ 4 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 5 | class Settings { 6 | /** 7 | * Service URL for the Settings page 8 | */ 9 | private static readonly pageUrl: string = "/SettingsPageModel"; 10 | 11 | /** 12 | * Service URL for saving the settings 13 | */ 14 | private static readonly saveUrl: string = `${Settings.pageUrl}?handler=Save`; 15 | 16 | /** 17 | * Open the Settings page 18 | */ 19 | public static Open(): void { 20 | void DialogManager.OpenModalDialog(Localization.Get("MenuSettings"), this.pageUrl, "300px"); 21 | } 22 | 23 | /** 24 | * Save the settings 25 | * @param projectIsOpen Whether the project is open or not, in order to show the correct page 26 | */ 27 | public static Save(projectIsOpen: boolean): void { 28 | const data = Utility.SerializeJSON($("#Settings")); 29 | if (data === undefined) { 30 | return; 31 | } 32 | 33 | void Utility.AjaxCall(this.saveUrl, HttpMethod.Post, data).then((): void => { 34 | // Load the new localization 35 | void Localization.Load().then((): void => { 36 | // Recreate the menu with the new language 37 | void MenuManager.CreateMenu().then((): void => { 38 | MenuManager.ToggleProjectRelatedMenuStatus(projectIsOpen); 39 | MenuManager.ToggleMainOpenRelatedMenuStatus(PageManager.GetOpenPage() === Page.Main); 40 | }); 41 | // Close the modal and reopen the current page 42 | DialogManager.CloseModalDialog(); 43 | void PageManager.RefreshOpenPages(); 44 | }); 45 | }); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: ($close-font-size + $alert-padding-x * 2); 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | font-size: $badge-font-size; 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | 17 | // Empty badges collapse automatically 18 | &:empty { 19 | display: none; 20 | } 21 | } 22 | 23 | // Quick fix for badges in buttons 24 | .btn .badge { 25 | position: relative; 26 | top: -1px; 27 | } 28 | 29 | // Pill badges 30 | // 31 | // Make them extra rounded with a modifier to replace v3's badges. 32 | 33 | .badge-pill { 34 | padding-right: $badge-pill-padding-x; 35 | padding-left: $badge-pill-padding-x; 36 | @include border-radius($badge-pill-border-radius); 37 | } 38 | 39 | // Colors 40 | // 41 | // Contextual variations (linked badges get darker on :hover). 42 | 43 | @each $color, $value in $theme-colors { 44 | .badge-#{$color} { 45 | @include badge-variant($value); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | list-style: none; 7 | background-color: $breadcrumb-bg; 8 | @include border-radius($breadcrumb-border-radius); 9 | } 10 | 11 | .breadcrumb-item { 12 | // The separator between breadcrumbs (by default, a forward-slash: "/") 13 | + .breadcrumb-item { 14 | padding-left: $breadcrumb-item-padding; 15 | 16 | &::before { 17 | display: inline-block; // Suppress underlining of the separator in modern browsers 18 | padding-right: $breadcrumb-item-padding; 19 | color: $breadcrumb-divider-color; 20 | content: $breadcrumb-divider; 21 | } 22 | } 23 | 24 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 25 | // without `
    `s. The `::before` pseudo-element generates an element 26 | // *within* the .breadcrumb-item and thereby inherits the `text-decoration`. 27 | // 28 | // To trick IE into suppressing the underline, we give the pseudo-element an 29 | // underline and then immediately remove it. 30 | + .breadcrumb-item:hover::before { 31 | text-decoration: underline; 32 | } 33 | // stylelint-disable-next-line no-duplicate-selectors 34 | + .breadcrumb-item:hover::before { 35 | text-decoration: none; 36 | } 37 | 38 | &.active { 39 | color: $breadcrumb-active-color; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | font-size: $close-font-size; 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .5; 9 | 10 | &:not(:disabled):not(.disabled) { 11 | 12 | @include hover-focus { 13 | color: $close-color; 14 | text-decoration: none; 15 | opacity: .75; 16 | } 17 | 18 | // Opinionated: add "hand" cursor to non-disabled .close elements 19 | cursor: pointer; 20 | } 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | 28 | // stylelint-disable property-no-vendor-prefix, selector-no-qualifying-type 29 | button.close { 30 | padding: 0; 31 | background-color: transparent; 32 | border: 0; 33 | -webkit-appearance: none; 34 | } 35 | // stylelint-enable 36 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline code 2 | code { 3 | font-size: $code-font-size; 4 | color: $code-color; 5 | word-break: break-word; 6 | 7 | // Streamline the style when inside anchors to avoid broken underline and more 8 | a > & { 9 | color: inherit; 10 | } 11 | } 12 | 13 | // User input typically entered via keyboard 14 | kbd { 15 | padding: $kbd-padding-y $kbd-padding-x; 16 | font-size: $kbd-font-size; 17 | color: $kbd-color; 18 | background-color: $kbd-bg; 19 | @include border-radius($border-radius-sm); 20 | @include box-shadow($kbd-box-shadow); 21 | 22 | kbd { 23 | padding: 0; 24 | font-size: 100%; 25 | font-weight: $nested-kbd-font-weight; 26 | @include box-shadow(none); 27 | } 28 | } 29 | 30 | // Blocks of code 31 | pre { 32 | display: block; 33 | font-size: $code-font-size; 34 | color: $pre-color; 35 | 36 | // Account for some code outputs that place code tags in pre tags 37 | code { 38 | font-size: inherit; 39 | color: inherit; 40 | word-break: normal; 41 | } 42 | } 43 | 44 | // Enable scrollable blocks of code 45 | .pre-scrollable { 46 | max-height: $pre-scrollable-max-height; 47 | overflow-y: scroll; 48 | } 49 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-grid-classes { 6 | .container { 7 | @include make-container(); 8 | @include make-container-max-widths(); 9 | } 10 | } 11 | 12 | // Fluid container 13 | // 14 | // Utilizes the mixin meant for fixed width containers, but with 100% width for 15 | // fluid, full width layouts. 16 | 17 | @if $enable-grid-classes { 18 | .container-fluid { 19 | @include make-container(); 20 | } 21 | } 22 | 23 | // Row 24 | // 25 | // Rows contain and clear the floats of your columns. 26 | 27 | @if $enable-grid-classes { 28 | .row { 29 | @include make-row(); 30 | } 31 | 32 | // Remove the negative margin from default .row, then the horizontal padding 33 | // from all immediate children columns (to prevent runaway style inheritance). 34 | .no-gutters { 35 | margin-right: 0; 36 | margin-left: 0; 37 | 38 | > .col, 39 | > [class*="col-"] { 40 | padding-right: 0; 41 | padding-left: 0; 42 | } 43 | } 44 | } 45 | 46 | // Columns 47 | // 48 | // Common styles for small and large grid columns 49 | 50 | @if $enable-grid-classes { 51 | @include make-grid-columns(); 52 | } 53 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid; 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid; 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: ($spacer / 2); 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | font-size: $figure-caption-font-size; 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | background-color: $jumbotron-bg; 5 | @include border-radius($border-radius-lg); 6 | 7 | @include media-breakpoint-up(sm) { 8 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 9 | } 10 | } 11 | 12 | .jumbotron-fluid { 13 | padding-right: 0; 14 | padding-left: 0; 15 | @include border-radius(0); 16 | } 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_media.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | display: flex; 3 | align-items: flex-start; 4 | } 5 | 6 | .media-body { 7 | flex: 1; 8 | } 9 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Utilities 6 | @import "mixins/breakpoints"; 7 | @import "mixins/hover"; 8 | @import "mixins/image"; 9 | @import "mixins/badge"; 10 | @import "mixins/resize"; 11 | @import "mixins/screen-reader"; 12 | @import "mixins/size"; 13 | @import "mixins/reset-text"; 14 | @import "mixins/text-emphasis"; 15 | @import "mixins/text-hide"; 16 | @import "mixins/text-truncate"; 17 | @import "mixins/visibility"; 18 | 19 | // // Components 20 | @import "mixins/alert"; 21 | @import "mixins/buttons"; 22 | @import "mixins/caret"; 23 | @import "mixins/pagination"; 24 | @import "mixins/lists"; 25 | @import "mixins/list-group"; 26 | @import "mixins/nav-divider"; 27 | @import "mixins/forms"; 28 | @import "mixins/table-row"; 29 | 30 | // // Skins 31 | @import "mixins/background-variant"; 32 | @import "mixins/border-radius"; 33 | @import "mixins/box-shadow"; 34 | @import "mixins/gradients"; 35 | @import "mixins/transition"; 36 | 37 | // // Layout 38 | @import "mixins/clearfix"; 39 | @import "mixins/grid-framework"; 40 | @import "mixins/grid"; 41 | @import "mixins/float"; 42 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_progress.scss: -------------------------------------------------------------------------------- 1 | @keyframes progress-bar-stripes { 2 | from { background-position: $progress-height 0; } 3 | to { background-position: 0 0; } 4 | } 5 | 6 | .progress { 7 | display: flex; 8 | height: $progress-height; 9 | overflow: hidden; // force rounded corners by cropping it 10 | font-size: $progress-font-size; 11 | background-color: $progress-bg; 12 | @include border-radius($progress-border-radius); 13 | @include box-shadow($progress-box-shadow); 14 | } 15 | 16 | .progress-bar { 17 | display: flex; 18 | flex-direction: column; 19 | justify-content: center; 20 | color: $progress-bar-color; 21 | text-align: center; 22 | white-space: nowrap; 23 | background-color: $progress-bar-bg; 24 | @include transition($progress-bar-transition); 25 | } 26 | 27 | .progress-bar-striped { 28 | @include gradient-striped(); 29 | background-size: $progress-height $progress-height; 30 | } 31 | 32 | .progress-bar-animated { 33 | animation: progress-bar-stripes $progress-bar-animation-timing; 34 | } 35 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_root.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | // Custom variable values only support SassScript inside `#{}`. 3 | @each $color, $value in $colors { 4 | --#{$color}: #{$value}; 5 | } 6 | 7 | @each $color, $value in $theme-colors { 8 | --#{$color}: #{$value}; 9 | } 10 | 11 | @each $bp, $value in $grid-breakpoints { 12 | --breakpoint-#{$bp}: #{$value}; 13 | } 14 | 15 | // Use `inspect` for lists so that quoted items keep the quotes. 16 | // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 17 | --font-family-sans-serif: #{inspect($font-family-sans-serif)}; 18 | --font-family-monospace: #{inspect($font-family-monospace)}; 19 | } 20 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable selector-no-qualifying-type 2 | 3 | .fade { 4 | @include transition($transition-fade); 5 | 6 | &:not(.show) { 7 | opacity: 0; 8 | } 9 | } 10 | 11 | .collapse { 12 | &:not(.show) { 13 | display: none; 14 | } 15 | } 16 | 17 | .collapsing { 18 | position: relative; 19 | height: 0; 20 | overflow: hidden; 21 | @include transition($transition-collapse); 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/_utilities.scss: -------------------------------------------------------------------------------- 1 | @import "utilities/align"; 2 | @import "utilities/background"; 3 | @import "utilities/borders"; 4 | @import "utilities/clearfix"; 5 | @import "utilities/display"; 6 | @import "utilities/embed"; 7 | @import "utilities/flex"; 8 | @import "utilities/float"; 9 | @import "utilities/position"; 10 | @import "utilities/screenreaders"; 11 | @import "utilities/shadows"; 12 | @import "utilities/sizing"; 13 | @import "utilities/spacing"; 14 | @import "utilities/text"; 15 | @import "utilities/visibility"; 16 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v4.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | @at-root { 9 | @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix 10 | } 11 | 12 | html { 13 | box-sizing: border-box; 14 | -ms-overflow-style: scrollbar; 15 | } 16 | 17 | *, 18 | *::before, 19 | *::after { 20 | box-sizing: inherit; 21 | } 22 | 23 | @import "functions"; 24 | @import "variables"; 25 | 26 | @import "mixins/breakpoints"; 27 | @import "mixins/grid-framework"; 28 | @import "mixins/grid"; 29 | 30 | @import "grid"; 31 | @import "utilities/display"; 32 | @import "utilities/flex"; 33 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "reboot"; 13 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.1.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | @import "functions"; 9 | @import "variables"; 10 | @import "mixins"; 11 | @import "root"; 12 | @import "reboot"; 13 | @import "type"; 14 | @import "images"; 15 | @import "code"; 16 | @import "grid"; 17 | @import "tables"; 18 | @import "forms"; 19 | @import "buttons"; 20 | @import "transitions"; 21 | @import "dropdown"; 22 | @import "button-group"; 23 | @import "input-group"; 24 | @import "custom-forms"; 25 | @import "nav"; 26 | @import "navbar"; 27 | @import "card"; 28 | @import "breadcrumb"; 29 | @import "pagination"; 30 | @import "badge"; 31 | @import "jumbotron"; 32 | @import "alert"; 33 | @import "progress"; 34 | @import "media"; 35 | @import "list-group"; 36 | @import "close"; 37 | @import "modal"; 38 | @import "tooltip"; 39 | @import "popover"; 40 | @import "carousel"; 41 | @import "utilities"; 42 | @import "print"; 43 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | @mixin alert-variant($background, $border, $color) { 2 | color: $color; 3 | @include gradient-bg($background); 4 | border-color: $border; 5 | 6 | hr { 7 | border-top-color: darken($border, 5%); 8 | } 9 | 10 | .alert-link { 11 | color: darken($color, 10%); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Contextual backgrounds 4 | 5 | @mixin bg-variant($parent, $color) { 6 | #{$parent} { 7 | background-color: $color !important; 8 | } 9 | a#{$parent}, 10 | button#{$parent} { 11 | @include hover-focus { 12 | background-color: darken($color, 10%) !important; 13 | } 14 | } 15 | } 16 | 17 | @mixin bg-gradient-variant($parent, $color) { 18 | #{$parent} { 19 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | @mixin badge-variant($bg) { 2 | color: color-yiq($bg); 3 | background-color: $bg; 4 | 5 | &[href] { 6 | @include hover-focus { 7 | color: color-yiq($bg); 8 | text-decoration: none; 9 | background-color: darken($bg, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | @mixin border-radius($radius: $border-radius) { 4 | @if $enable-rounded { 5 | border-radius: $radius; 6 | } 7 | } 8 | 9 | @mixin border-top-radius($radius) { 10 | @if $enable-rounded { 11 | border-top-left-radius: $radius; 12 | border-top-right-radius: $radius; 13 | } 14 | } 15 | 16 | @mixin border-right-radius($radius) { 17 | @if $enable-rounded { 18 | border-top-right-radius: $radius; 19 | border-bottom-right-radius: $radius; 20 | } 21 | } 22 | 23 | @mixin border-bottom-radius($radius) { 24 | @if $enable-rounded { 25 | border-bottom-right-radius: $radius; 26 | border-bottom-left-radius: $radius; 27 | } 28 | } 29 | 30 | @mixin border-left-radius($radius) { 31 | @if $enable-rounded { 32 | border-top-left-radius: $radius; 33 | border-bottom-left-radius: $radius; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | box-shadow: $shadow; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | @mixin caret-down { 2 | border-top: $caret-width solid; 3 | border-right: $caret-width solid transparent; 4 | border-bottom: 0; 5 | border-left: $caret-width solid transparent; 6 | } 7 | 8 | @mixin caret-up { 9 | border-top: 0; 10 | border-right: $caret-width solid transparent; 11 | border-bottom: $caret-width solid; 12 | border-left: $caret-width solid transparent; 13 | } 14 | 15 | @mixin caret-right { 16 | border-top: $caret-width solid transparent; 17 | border-right: 0; 18 | border-bottom: $caret-width solid transparent; 19 | border-left: $caret-width solid; 20 | } 21 | 22 | @mixin caret-left { 23 | border-top: $caret-width solid transparent; 24 | border-right: $caret-width solid; 25 | border-bottom: $caret-width solid transparent; 26 | } 27 | 28 | @mixin caret($direction: down) { 29 | @if $enable-caret { 30 | &::after { 31 | display: inline-block; 32 | width: 0; 33 | height: 0; 34 | margin-left: $caret-width * .85; 35 | vertical-align: $caret-width * .85; 36 | content: ""; 37 | @if $direction == down { 38 | @include caret-down; 39 | } @else if $direction == up { 40 | @include caret-up; 41 | } @else if $direction == right { 42 | @include caret-right; 43 | } 44 | } 45 | 46 | @if $direction == left { 47 | &::after { 48 | display: none; 49 | } 50 | 51 | &::before { 52 | display: inline-block; 53 | width: 0; 54 | height: 0; 55 | margin-right: $caret-width * .85; 56 | vertical-align: $caret-width * .85; 57 | content: ""; 58 | @include caret-left; 59 | } 60 | } 61 | 62 | &:empty::after { 63 | margin-left: 0; 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | display: block; 4 | clear: both; 5 | content: ""; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @mixin float-left { 4 | float: left !important; 5 | } 6 | @mixin float-right { 7 | float: right !important; 8 | } 9 | @mixin float-none { 10 | float: none !important; 11 | } 12 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_grid.scss: -------------------------------------------------------------------------------- 1 | /// Grid system 2 | // 3 | // Generate semantic grid columns with these mixins. 4 | 5 | @mixin make-container() { 6 | width: 100%; 7 | padding-right: ($grid-gutter-width / 2); 8 | padding-left: ($grid-gutter-width / 2); 9 | margin-right: auto; 10 | margin-left: auto; 11 | } 12 | 13 | 14 | // For each breakpoint, define the maximum width of the container in a media query 15 | @mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) { 16 | @each $breakpoint, $container-max-width in $max-widths { 17 | @include media-breakpoint-up($breakpoint, $breakpoints) { 18 | max-width: $container-max-width; 19 | } 20 | } 21 | } 22 | 23 | @mixin make-row() { 24 | display: flex; 25 | flex-wrap: wrap; 26 | margin-right: ($grid-gutter-width / -2); 27 | margin-left: ($grid-gutter-width / -2); 28 | } 29 | 30 | @mixin make-col-ready() { 31 | position: relative; 32 | // Prevent columns from becoming too narrow when at smaller grid tiers by 33 | // always setting `width: 100%;`. This works because we use `flex` values 34 | // later on to override this initial width. 35 | width: 100%; 36 | min-height: 1px; // Prevent collapsing 37 | padding-right: ($grid-gutter-width / 2); 38 | padding-left: ($grid-gutter-width / 2); 39 | } 40 | 41 | @mixin make-col($size, $columns: $grid-columns) { 42 | flex: 0 0 percentage($size / $columns); 43 | // Add a `max-width` to ensure content within each column does not blow out 44 | // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari 45 | // do not appear to require this. 46 | max-width: percentage($size / $columns); 47 | } 48 | 49 | @mixin make-col-offset($size, $columns: $grid-columns) { 50 | $num: $size / $columns; 51 | margin-left: if($num == 0, 0, percentage($num)); 52 | } 53 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | // Hover mixin and `$enable-hover-media-query` are deprecated. 2 | // 3 | // Originally added during our alphas and maintained during betas, this mixin was 4 | // designed to prevent `:hover` stickiness on iOS-an issue where hover styles 5 | // would persist after initial touch. 6 | // 7 | // For backward compatibility, we've kept these mixins and updated them to 8 | // always return their regular pseudo-classes instead of a shimmed media query. 9 | // 10 | // Issue: https://github.com/twbs/bootstrap/issues/25195 11 | 12 | @mixin hover { 13 | &:hover { @content; } 14 | } 15 | 16 | @mixin hover-focus { 17 | &:hover, 18 | &:focus { 19 | @content; 20 | } 21 | } 22 | 23 | @mixin plain-hover-focus { 24 | &, 25 | &:hover, 26 | &:focus { 27 | @content; 28 | } 29 | } 30 | 31 | @mixin hover-focus-active { 32 | &:hover, 33 | &:focus, 34 | &:active { 35 | @content; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | 18 | 19 | // Retina image 20 | // 21 | // Short retina mixin for setting background-image and -size. 22 | 23 | // stylelint-disable indentation, media-query-list-comma-newline-after 24 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 25 | background-image: url($file-1x); 26 | 27 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 28 | // but doesn't convert dppx=>dpi. 29 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 30 | // Compatibility info: https://caniuse.com/#feat=css-media-resolution 31 | @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 32 | only screen and (min-resolution: 2dppx) { // Standardized 33 | background-image: url($file-2x); 34 | background-size: $width-1x $height-1x; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | 8 | &.list-group-item-action { 9 | @include hover-focus { 10 | color: $color; 11 | background-color: darken($background, 5%); 12 | } 13 | 14 | &.active { 15 | color: $white; 16 | background-color: $color; 17 | border-color: $color; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) { 6 | height: 0; 7 | margin: $margin-y 0; 8 | overflow: hidden; 9 | border-top: 1px solid $color; 10 | } 11 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-y $padding-x; 6 | font-size: $font-size; 7 | line-height: $line-height; 8 | } 9 | 10 | .page-item { 11 | &:first-child { 12 | .page-link { 13 | @include border-left-radius($border-radius); 14 | } 15 | } 16 | &:last-child { 17 | .page-link { 18 | @include border-right-radius($border-radius); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; // stylelint-disable-line declaration-block-no-duplicate-properties 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: https://a11yproject.com/posts/how-to-hide-content/ 4 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 5 | 6 | @mixin sr-only { 7 | position: absolute; 8 | width: 1px; 9 | height: 1px; 10 | padding: 0; 11 | overflow: hidden; 12 | clip: rect(0, 0, 0, 0); 13 | white-space: nowrap; 14 | border: 0; 15 | } 16 | 17 | // Use in conjunction with .sr-only to only display content when it's focused. 18 | // 19 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 20 | // 21 | // Credit: HTML5 Boilerplate 22 | 23 | @mixin sr-only-focusable { 24 | &:active, 25 | &:focus { 26 | position: static; 27 | width: auto; 28 | height: auto; 29 | overflow: visible; 30 | clip: auto; 31 | white-space: normal; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | } 7 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | } 13 | 14 | // Hover states for `.table-hover` 15 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 16 | .table-hover { 17 | $hover-background: darken($background, 5%); 18 | 19 | .table-#{$state} { 20 | @include hover { 21 | background-color: $hover-background; 22 | 23 | > td, 24 | > th { 25 | background-color: $hover-background; 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Typography 4 | 5 | @mixin text-emphasis-variant($parent, $color) { 6 | #{$parent} { 7 | color: $color !important; 8 | } 9 | a#{$parent} { 10 | @include hover-focus { 11 | color: darken($color, 10%) !important; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide($ignore-warning: false) { 3 | // stylelint-disable-next-line font-family-no-missing-generic-family-keyword 4 | font: 0/0 a; 5 | color: transparent; 6 | text-shadow: none; 7 | background-color: transparent; 8 | border: 0; 9 | 10 | @if ($ignore-warning != true) { 11 | @warn "The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5."; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | @mixin transition($transition...) { 2 | @if $enable-transitions { 3 | @if length($transition) == 0 { 4 | transition: $transition-base; 5 | } @else { 6 | transition: $transition; 7 | } 8 | } 9 | 10 | @media screen and (prefers-reduced-motion: reduce) { 11 | transition: none; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/mixins/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Visibility 4 | 5 | @mixin invisible($visibility) { 6 | visibility: $visibility !important; 7 | } 8 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_align.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .align-baseline { vertical-align: baseline !important; } // Browser default 4 | .align-top { vertical-align: top !important; } 5 | .align-middle { vertical-align: middle !important; } 6 | .align-bottom { vertical-align: bottom !important; } 7 | .align-text-bottom { vertical-align: text-bottom !important; } 8 | .align-text-top { vertical-align: text-top !important; } 9 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_background.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $color, $value in $theme-colors { 4 | @include bg-variant(".bg-#{$color}", $value); 5 | } 6 | 7 | @if $enable-gradients { 8 | @each $color, $value in $theme-colors { 9 | @include bg-gradient-variant(".bg-gradient-#{$color}", $value); 10 | } 11 | } 12 | 13 | .bg-white { 14 | background-color: $white !important; 15 | } 16 | 17 | .bg-transparent { 18 | background-color: transparent !important; 19 | } 20 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_borders.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Border 5 | // 6 | 7 | .border { border: $border-width solid $border-color !important; } 8 | .border-top { border-top: $border-width solid $border-color !important; } 9 | .border-right { border-right: $border-width solid $border-color !important; } 10 | .border-bottom { border-bottom: $border-width solid $border-color !important; } 11 | .border-left { border-left: $border-width solid $border-color !important; } 12 | 13 | .border-0 { border: 0 !important; } 14 | .border-top-0 { border-top: 0 !important; } 15 | .border-right-0 { border-right: 0 !important; } 16 | .border-bottom-0 { border-bottom: 0 !important; } 17 | .border-left-0 { border-left: 0 !important; } 18 | 19 | @each $color, $value in $theme-colors { 20 | .border-#{$color} { 21 | border-color: $value !important; 22 | } 23 | } 24 | 25 | .border-white { 26 | border-color: $white !important; 27 | } 28 | 29 | // 30 | // Border-radius 31 | // 32 | 33 | .rounded { 34 | border-radius: $border-radius !important; 35 | } 36 | .rounded-top { 37 | border-top-left-radius: $border-radius !important; 38 | border-top-right-radius: $border-radius !important; 39 | } 40 | .rounded-right { 41 | border-top-right-radius: $border-radius !important; 42 | border-bottom-right-radius: $border-radius !important; 43 | } 44 | .rounded-bottom { 45 | border-bottom-right-radius: $border-radius !important; 46 | border-bottom-left-radius: $border-radius !important; 47 | } 48 | .rounded-left { 49 | border-top-left-radius: $border-radius !important; 50 | border-bottom-left-radius: $border-radius !important; 51 | } 52 | 53 | .rounded-circle { 54 | border-radius: 50% !important; 55 | } 56 | 57 | .rounded-0 { 58 | border-radius: 0 !important; 59 | } 60 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_display.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Utilities for common `display` values 5 | // 6 | 7 | @each $breakpoint in map-keys($grid-breakpoints) { 8 | @include media-breakpoint-up($breakpoint) { 9 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 10 | 11 | .d#{$infix}-none { display: none !important; } 12 | .d#{$infix}-inline { display: inline !important; } 13 | .d#{$infix}-inline-block { display: inline-block !important; } 14 | .d#{$infix}-block { display: block !important; } 15 | .d#{$infix}-table { display: table !important; } 16 | .d#{$infix}-table-row { display: table-row !important; } 17 | .d#{$infix}-table-cell { display: table-cell !important; } 18 | .d#{$infix}-flex { display: flex !important; } 19 | .d#{$infix}-inline-flex { display: inline-flex !important; } 20 | } 21 | } 22 | 23 | 24 | // 25 | // Utilities for toggling `display` in print 26 | // 27 | 28 | @media print { 29 | .d-print-none { display: none !important; } 30 | .d-print-inline { display: inline !important; } 31 | .d-print-inline-block { display: inline-block !important; } 32 | .d-print-block { display: block !important; } 33 | .d-print-table { display: table !important; } 34 | .d-print-table-row { display: table-row !important; } 35 | .d-print-table-cell { display: table-cell !important; } 36 | .d-print-flex { display: flex !important; } 37 | .d-print-inline-flex { display: inline-flex !important; } 38 | } 39 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_embed.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .embed-responsive { 4 | position: relative; 5 | display: block; 6 | width: 100%; 7 | padding: 0; 8 | overflow: hidden; 9 | 10 | &::before { 11 | display: block; 12 | content: ""; 13 | } 14 | 15 | .embed-responsive-item, 16 | iframe, 17 | embed, 18 | object, 19 | video { 20 | position: absolute; 21 | top: 0; 22 | bottom: 0; 23 | left: 0; 24 | width: 100%; 25 | height: 100%; 26 | border: 0; 27 | } 28 | } 29 | 30 | .embed-responsive-21by9 { 31 | &::before { 32 | padding-top: percentage(9 / 21); 33 | } 34 | } 35 | 36 | .embed-responsive-16by9 { 37 | &::before { 38 | padding-top: percentage(9 / 16); 39 | } 40 | } 41 | 42 | .embed-responsive-4by3 { 43 | &::before { 44 | padding-top: percentage(3 / 4); 45 | } 46 | } 47 | 48 | .embed-responsive-1by1 { 49 | &::before { 50 | padding-top: percentage(1 / 1); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_float.scss: -------------------------------------------------------------------------------- 1 | @each $breakpoint in map-keys($grid-breakpoints) { 2 | @include media-breakpoint-up($breakpoint) { 3 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 4 | 5 | .float#{$infix}-left { @include float-left; } 6 | .float#{$infix}-right { @include float-right; } 7 | .float#{$infix}-none { @include float-none; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_position.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Common values 4 | 5 | // Sass list not in variables since it's not intended for customization. 6 | // stylelint-disable-next-line scss/dollar-variable-default 7 | $positions: static, relative, absolute, fixed, sticky; 8 | 9 | @each $position in $positions { 10 | .position-#{$position} { position: $position !important; } 11 | } 12 | 13 | // Shorthand 14 | 15 | .fixed-top { 16 | position: fixed; 17 | top: 0; 18 | right: 0; 19 | left: 0; 20 | z-index: $zindex-fixed; 21 | } 22 | 23 | .fixed-bottom { 24 | position: fixed; 25 | right: 0; 26 | bottom: 0; 27 | left: 0; 28 | z-index: $zindex-fixed; 29 | } 30 | 31 | .sticky-top { 32 | @supports (position: sticky) { 33 | position: sticky; 34 | top: 0; 35 | z-index: $zindex-sticky; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_screenreaders.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Screenreaders 3 | // 4 | 5 | .sr-only { 6 | @include sr-only(); 7 | } 8 | 9 | .sr-only-focusable { 10 | @include sr-only-focusable(); 11 | } 12 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_shadows.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .shadow-sm { box-shadow: $box-shadow-sm !important; } 4 | .shadow { box-shadow: $box-shadow !important; } 5 | .shadow-lg { box-shadow: $box-shadow-lg !important; } 6 | .shadow-none { box-shadow: none !important; } 7 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_sizing.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Width and height 4 | 5 | @each $prop, $abbrev in (width: w, height: h) { 6 | @each $size, $length in $sizes { 7 | .#{$abbrev}-#{$size} { #{$prop}: $length !important; } 8 | } 9 | } 10 | 11 | .mw-100 { max-width: 100% !important; } 12 | .mh-100 { max-height: 100% !important; } 13 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_spacing.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Margin and Padding 4 | 5 | @each $breakpoint in map-keys($grid-breakpoints) { 6 | @include media-breakpoint-up($breakpoint) { 7 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 8 | 9 | @each $prop, $abbrev in (margin: m, padding: p) { 10 | @each $size, $length in $spacers { 11 | 12 | .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; } 13 | .#{$abbrev}t#{$infix}-#{$size}, 14 | .#{$abbrev}y#{$infix}-#{$size} { 15 | #{$prop}-top: $length !important; 16 | } 17 | .#{$abbrev}r#{$infix}-#{$size}, 18 | .#{$abbrev}x#{$infix}-#{$size} { 19 | #{$prop}-right: $length !important; 20 | } 21 | .#{$abbrev}b#{$infix}-#{$size}, 22 | .#{$abbrev}y#{$infix}-#{$size} { 23 | #{$prop}-bottom: $length !important; 24 | } 25 | .#{$abbrev}l#{$infix}-#{$size}, 26 | .#{$abbrev}x#{$infix}-#{$size} { 27 | #{$prop}-left: $length !important; 28 | } 29 | } 30 | } 31 | 32 | // Some special margin utils 33 | .m#{$infix}-auto { margin: auto !important; } 34 | .mt#{$infix}-auto, 35 | .my#{$infix}-auto { 36 | margin-top: auto !important; 37 | } 38 | .mr#{$infix}-auto, 39 | .mx#{$infix}-auto { 40 | margin-right: auto !important; 41 | } 42 | .mb#{$infix}-auto, 43 | .my#{$infix}-auto { 44 | margin-bottom: auto !important; 45 | } 46 | .ml#{$infix}-auto, 47 | .mx#{$infix}-auto { 48 | margin-left: auto !important; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_text.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Text 5 | // 6 | 7 | .text-monospace { font-family: $font-family-monospace; } 8 | 9 | // Alignment 10 | 11 | .text-justify { text-align: justify !important; } 12 | .text-nowrap { white-space: nowrap !important; } 13 | .text-truncate { @include text-truncate; } 14 | 15 | // Responsive alignment 16 | 17 | @each $breakpoint in map-keys($grid-breakpoints) { 18 | @include media-breakpoint-up($breakpoint) { 19 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 20 | 21 | .text#{$infix}-left { text-align: left !important; } 22 | .text#{$infix}-right { text-align: right !important; } 23 | .text#{$infix}-center { text-align: center !important; } 24 | } 25 | } 26 | 27 | // Transformation 28 | 29 | .text-lowercase { text-transform: lowercase !important; } 30 | .text-uppercase { text-transform: uppercase !important; } 31 | .text-capitalize { text-transform: capitalize !important; } 32 | 33 | // Weight and italics 34 | 35 | .font-weight-light { font-weight: $font-weight-light !important; } 36 | .font-weight-normal { font-weight: $font-weight-normal !important; } 37 | .font-weight-bold { font-weight: $font-weight-bold !important; } 38 | .font-italic { font-style: italic !important; } 39 | 40 | // Contextual colors 41 | 42 | .text-white { color: $white !important; } 43 | 44 | @each $color, $value in $theme-colors { 45 | @include text-emphasis-variant(".text-#{$color}", $value); 46 | } 47 | 48 | .text-body { color: $body-color !important; } 49 | .text-muted { color: $text-muted !important; } 50 | 51 | .text-black-50 { color: rgba($black, .5) !important; } 52 | .text-white-50 { color: rgba($white, .5) !important; } 53 | 54 | // Misc 55 | 56 | .text-hide { 57 | @include text-hide($ignore-warning: true); 58 | } 59 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/bootstrap/scss/utilities/_visibility.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visibility utilities 3 | // 4 | 5 | .visible { 6 | @include invisible(visible); 7 | } 8 | 9 | .invisible { 10 | @include invisible(hidden); 11 | } 12 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | animation: fa-spin 2s infinite linear; 6 | } 7 | 8 | .#{$fa-css-prefix}-pulse { 9 | animation: fa-spin 1s infinite steps(8); 10 | } 11 | 12 | @keyframes fa-spin { 13 | 0% { 14 | transform: rotate(0deg); 15 | } 16 | 17 | 100% { 18 | transform: rotate(360deg); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | border: solid .08em $fa-border-color; 6 | border-radius: .1em; 7 | padding: .2em .25em .15em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix}, 14 | .fas, 15 | .far, 16 | .fal, 17 | .fab { 18 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 19 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 20 | } 21 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}, 5 | .fas, 6 | .far, 7 | .fal, 8 | .fab { 9 | -moz-osx-font-smoothing: grayscale; 10 | -webkit-font-smoothing: antialiased; 11 | display: inline-block; 12 | font-style: normal; 13 | font-variant: normal; 14 | text-rendering: auto; 15 | line-height: 1; 16 | } 17 | 18 | %fa-icon { 19 | @include fa-icon; 20 | } 21 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | text-align: center; 5 | width: (20em / 16); 6 | } 7 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | // makes the font 33% larger relative to the icon container 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -.0667em; 9 | } 10 | 11 | .#{$fa-css-prefix}-xs { 12 | font-size: .75em; 13 | } 14 | 15 | .#{$fa-css-prefix}-sm { 16 | font-size: .875em; 17 | } 18 | 19 | @for $i from 1 through 10 { 20 | .#{$fa-css-prefix}-#{$i}x { 21 | font-size: $i * 1em; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | list-style-type: none; 6 | margin-left: $fa-li-width * 5/4; 7 | padding-left: 0; 8 | 9 | > li { position: relative; } 10 | } 11 | 12 | .#{$fa-css-prefix}-li { 13 | left: -$fa-li-width; 14 | position: absolute; 15 | text-align: center; 16 | width: $fa-li-width; 17 | line-height: inherit; 18 | } 19 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon { 5 | -webkit-font-smoothing: antialiased; 6 | -moz-osx-font-smoothing: grayscale; 7 | display: inline-block; 8 | font-style: normal; 9 | font-variant: normal; 10 | font-weight: normal; 11 | line-height: 1; 12 | vertical-align: -.125em; 13 | } 14 | 15 | @mixin fa-icon-rotate($degrees, $rotation) { 16 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 22 | transform: scale($horiz, $vert); 23 | } 24 | 25 | 26 | // Only display content to screen readers. A la Bootstrap 4. 27 | // 28 | // See: http://a11yproject.com/posts/how-to-hide-content/ 29 | 30 | @mixin sr-only { 31 | border: 0; 32 | clip: rect(0, 0, 0, 0); 33 | height: 1px; 34 | margin: -1px; 35 | overflow: hidden; 36 | padding: 0; 37 | position: absolute; 38 | width: 1px; 39 | } 40 | 41 | // Use in conjunction with .sr-only to only display content when it's focused. 42 | // 43 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 44 | // 45 | // Credit: HTML5 Boilerplate 46 | 47 | @mixin sr-only-focusable { 48 | &:active, 49 | &:focus { 50 | clip: auto; 51 | height: auto; 52 | margin: 0; 53 | overflow: visible; 54 | position: static; 55 | width: auto; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); } 11 | 12 | // Hook for IE8-9 13 | // ------------------------- 14 | 15 | :root { 16 | .#{$fa-css-prefix}-rotate-90, 17 | .#{$fa-css-prefix}-rotate-180, 18 | .#{$fa-css-prefix}-rotate-270, 19 | .#{$fa-css-prefix}-flip-horizontal, 20 | .#{$fa-css-prefix}-flip-vertical { 21 | filter: none; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only; } 5 | .sr-only-focusable { @include sr-only-focusable; } 6 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | display: inline-block; 6 | height: 2em; 7 | line-height: 2em; 8 | position: relative; 9 | vertical-align: middle; 10 | width: 2em; 11 | } 12 | 13 | .#{$fa-css-prefix}-stack-1x, 14 | .#{$fa-css-prefix}-stack-2x { 15 | left: 0; 16 | position: absolute; 17 | text-align: center; 18 | width: 100%; 19 | } 20 | 21 | .#{$fa-css-prefix}-stack-1x { 22 | line-height: inherit; 23 | } 24 | 25 | .#{$fa-css-prefix}-stack-2x { 26 | font-size: 2em; 27 | } 28 | 29 | .#{$fa-css-prefix}-inverse { 30 | color: $fa-inverse; 31 | } 32 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/brands.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Brands'; 9 | font-style: normal; 10 | font-weight: normal; 11 | src: url('#{$fa-font-path}/fa-brands-400.eot'); 12 | src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-brands-400.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .fab { 20 | font-family: 'Font Awesome 5 Brands'; 21 | } 22 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/fontawesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | @import 'mixins'; 7 | @import 'core'; 8 | @import 'larger'; 9 | @import 'fixed-width'; 10 | @import 'list'; 11 | @import 'bordered-pulled'; 12 | @import 'animated'; 13 | @import 'rotated-flipped'; 14 | @import 'stacked'; 15 | @import 'icons'; 16 | @import 'screen-reader'; 17 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/regular.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 400; 11 | src: url('#{$fa-font-path}/fa-regular-400.eot'); 12 | src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-regular-400.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .far { 20 | font-family: 'Font Awesome 5 Free'; 21 | font-weight: 400; 22 | } 23 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/solid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 900; 11 | src: url('#{$fa-font-path}/fa-solid-900.eot'); 12 | src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-solid-900.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .fa, 20 | .fas { 21 | font-family: 'Font Awesome 5 Free'; 22 | font-weight: 900; 23 | } 24 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/scss/v4-shims.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | @import 'shims'; 7 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare.UI/wwwroot/lib/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/jquery/jquery-editable-select.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery Editable Select - v2.2.5 - https://github.com/indrimuska/jquery-editable-select - (c) 2016 Indri Muska - MIT */ 2 | input.es-input{padding-right:20px!important;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA4DIAAIM2AAB5CAAAxgwAADT6AAAgbL5TJ5gAAABGSURBVHjaYvz//z8DOYCJgUzA0tnZidPK8vJyRpw24pLEpwnuVHRFhDQxMDAwMPz//x+OOzo6/iPz8WFGuocqAAAA//8DAD/sORHYg7kaAAAAAElFTkSuQmCC) right center no-repeat}input.es-input.open{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.es-list{position:absolute;padding:0;margin:0;border:1px solid #d1d1d1;display:none;z-index:1000;background:#fff;max-height:160px;overflow-y:auto;-moz-box-shadow:0 2px 3px #ccc;-webkit-box-shadow:0 2px 3px #ccc;box-shadow:0 2px 3px #ccc}.es-list li{display:block;padding:5px 10px;margin:0}.es-list li.selected{background:#f3f3f3}.es-list li[disabled]{opacity:.5} -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/monaco-editor/vs/basic-languages/csp/csp.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * monaco-languages version: 1.2.0(6f34b63e4006c357717a7639a1c6f0ea3cf68333) 4 | * Released under the MIT license 5 | * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md 6 | *-----------------------------------------------------------------------------*/ 7 | define("vs/basic-languages/csp/csp",["require","exports"],function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.conf={brackets:[],autoClosingPairs:[],surroundingPairs:[]},e.language={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=> 4 | // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 5 | // TypeScript Version: 2.3 6 | 7 | interface JQueryMatchHeight { 8 | _throttle: number; 9 | _maintainScroll: boolean; 10 | _groups: any[]; 11 | 12 | /** 13 | * Set all selected elements to the height of the tallest. 14 | * If the items are on multiple rows, the items of each row will be set to the tallest of that row. 15 | */ 16 | (options?: JQueryMatchHeight.Options): JQuery; 17 | _update(): void; 18 | _rows($item: JQuery): any[]; 19 | _beforeUpdate(event: JQueryEventObject, groups: any[]): any; 20 | _afterUpdate(event: JQueryEventObject, groups: any[]): any; 21 | _apply(elements: any, options: any): void; 22 | } 23 | 24 | declare namespace JQueryMatchHeight { 25 | interface Options { 26 | byRow?: boolean; 27 | property?: string; 28 | target?: string; 29 | remove?: boolean; 30 | } 31 | } 32 | 33 | interface JQuery extends Iterable { 34 | matchHeight: JQueryMatchHeight; 35 | } 36 | -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/typings/jquery.serializeJSON.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for jquery.serializeJSON 2 | // Project: https://github.com/marioizquierdo/jquery.serializeJSON 3 | // Definitions by: Fabian Maurer 4 | // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 5 | 6 | interface SerializeJSONSettings { 7 | parseNumbers?: boolean; 8 | parseBooleans?: boolean; 9 | parseNulls?: boolean; 10 | parseAll?: boolean; 11 | parseWithFunction?: Function; 12 | checkboxUncheckedValue?: any; 13 | useIntKeysAsArrayIndex?: boolean; 14 | } 15 | 16 | interface JQuery extends Iterable { 17 | serializeJSON(settings?: SerializeJSONSettings): any; 18 | } -------------------------------------------------------------------------------- /SQLSchemaCompare.UI/wwwroot/lib/typings/promise.d.ts: -------------------------------------------------------------------------------- 1 | type PromiseResolve = (value?: T | PromiseLike) => void; 2 | type PromiseReject = (reason?: any) => void; -------------------------------------------------------------------------------- /SQLSchemaCompare/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Debug Main Process", 6 | "type": "node", 7 | "request": "launch", 8 | "cwd": "${workspaceFolder}", 9 | "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", 10 | "windows": { 11 | "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd" 12 | }, 13 | "args" : ["."], 14 | "outputCapture": "std" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /SQLSchemaCompare/SQLSchemaCompare.esproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | yarn build-vs 5 | 6 | -------------------------------------------------------------------------------- /SQLSchemaCompare/build/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/build/icon.icns -------------------------------------------------------------------------------- /SQLSchemaCompare/build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/build/icon.ico -------------------------------------------------------------------------------- /SQLSchemaCompare/build/installer.nsh: -------------------------------------------------------------------------------- 1 | !macro customWelcomePage 2 | !insertmacro MUI_PAGE_WELCOME 3 | !macroend 4 | -------------------------------------------------------------------------------- /SQLSchemaCompare/build/installerHeader.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/build/installerHeader.bmp -------------------------------------------------------------------------------- /SQLSchemaCompare/build/installerSidebar.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/build/installerSidebar.bmp -------------------------------------------------------------------------------- /SQLSchemaCompare/eslint.config.js: -------------------------------------------------------------------------------- 1 | const tseslint = require("typescript-eslint"); 2 | const baseConfig = require("../BaseEslintConfig.js").getBaseConfig(__dirname); 3 | 4 | module.exports = tseslint.config(baseConfig); 5 | -------------------------------------------------------------------------------- /SQLSchemaCompare/font/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/font/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /SQLSchemaCompare/img/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/img/Logo.png -------------------------------------------------------------------------------- /SQLSchemaCompare/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/SQLSchemaCompare/img/background.jpg -------------------------------------------------------------------------------- /SQLSchemaCompare/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@tsconfig/recommended/tsconfig.json", 4 | "@tsconfig/strictest/tsconfig.json", 5 | "../BaseTsConfig.json" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /SonarLint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | S134 7 | 8 | 9 | maximumNestingLevel 10 | 5 11 | 12 | 13 | 14 | 15 | 16 | S138 17 | 18 | 19 | max 20 | 150 21 | 22 | 23 | 24 | 25 | 26 | S1067 27 | 28 | 29 | max 30 | 10 31 | 32 | 33 | 34 | 35 | 36 | S1151 37 | 38 | 39 | max 40 | 50 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "8.0.0", 4 | "rollForward": "latestFeature" 5 | } 6 | } -------------------------------------------------------------------------------- /images/sqlcompare-screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/images/sqlcompare-screenshot1.png -------------------------------------------------------------------------------- /images/sqlcompare-screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/images/sqlcompare-screenshot2.png -------------------------------------------------------------------------------- /images/sqlcompare-screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TiCodeX/SQLSchemaCompare/01e0c5833d9a7d927846d5c5cb4a1c5e7c8c6a91/images/sqlcompare-screenshot3.png -------------------------------------------------------------------------------- /pre-commit-hook.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh.exe 2 | changedFiles=$(git diff --cached --name-only) 3 | 4 | for file in $changedFiles; do 5 | [ ! -f "$file" ] && continue; 6 | [ -z "${file##".github/"*}" ] && continue; 7 | [ -z "${file##"images/"*}" ] && continue; 8 | [ -z "${file##"SQLSchemaCompare.UI/wwwroot/lib/"*}" ] && continue; 9 | [ -z "${file##"SQLSchemaCompare.UI/wwwroot/img/"*}" ] && continue; 10 | [ -z "${file##"SQLSchemaCompare.UI/wwwroot/font/"*}" ] && continue; 11 | [ -z "${file##"SQLSchemaCompare.UI/package"*".json"}" ] && continue; 12 | [ -z "${file##"SQLSchemaCompare/package"*".json"}" ] && continue; 13 | [ -z "${file##"SQLSchemaCompare/img/"*}" ] && continue; 14 | [ -z "${file##"SQLSchemaCompare/font/"*}" ] && continue; 15 | [ -z "${file##"SQLSchemaCompare/build/"*}" ] && continue; 16 | [ -z "${file##*".xlsx"}" ] && continue; 17 | [ -z "${file##*".pfx"}" ] && continue; 18 | [ -z "${file##*".p12"}" ] && continue; 19 | [ -z "${file##*".exe"}" ] && continue; 20 | 21 | unix2dos < "$file" | cmp -s - "$file" 22 | if [ ! $? -eq 0 ]; then 23 | error=1 24 | echo "WRONG LINE ENGING => $file" 25 | fi 26 | done 27 | 28 | if [ "${error-}" ]; then 29 | exit 1 30 | fi 31 | --------------------------------------------------------------------------------