Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(*): compare two concerto models (contributes to #442) #476

Merged
merged 1 commit into from
Aug 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35,512 changes: 20,799 additions & 14,713 deletions package-lock.json

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions packages/concerto-analysis/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

coverage
node_modules
out
lib/parser.js
test/data
dist
45 changes: 45 additions & 0 deletions packages/concerto-analysis/.eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
env:
es6: true
node: true
mocha: true
extends:
- 'eslint:recommended'
- 'plugin:@typescript-eslint/eslint-recommended'
- 'plugin:@typescript-eslint/recommended'
parser: '@typescript-eslint/parser'
plugins:
- '@typescript-eslint'
parserOptions:
ecmaVersion: 13
sourceType: script
rules:
indent:
- error
- 4
linebreak-style:
- warn
- unix
quotes:
- error
- single
semi:
- error
- always
no-console: warn
curly: error
eqeqeq: error
no-throw-literal: error
strict: 0
no-var: error
dot-notation: error
no-tabs: error
no-trailing-spaces: error
# no-use-before-define: error
no-useless-call: error
no-with: error
operator-linebreak: error
require-jsdoc: 0
valid-jsdoc:
- error
- requireReturn: false
yoda: error
1 change: 1 addition & 0 deletions packages/concerto-analysis/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/generated/*.ts
90 changes: 90 additions & 0 deletions packages/concerto-analysis/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Logs
logs
*.log
npm-debug.log*

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# hidden config files
.editorconfig
.eslint.yml
.eslintignore
.eslintrc.yml
.tern-project

# test directory
test

# scripts directory
scripts

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules
jspm_packages

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

# JSDoc
out

# Mac files.
**/.DS_Store

*.swp

# Build generated files should be ignored by git, but not by npm.
# lib/acl/parser.js
# lib/introspect/parser.js
# lib/query/parser.js
# index.d.ts

.babelrc
api.txt
changelog.txt
jsdoc.json
HEADER
HEADER.md
rollup.config.js
lib/introspect/parser.pegjs

# Locally built npm packages
*.tgz
15 changes: 15 additions & 0 deletions packages/concerto-analysis/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

save-exact=true
11 changes: 11 additions & 0 deletions packages/concerto-analysis/HEADER
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
2 changes: 2 additions & 0 deletions packages/concerto-analysis/HEADER.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
## License <a name="license"></a>
Accord Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the LICENSE file. Accord Project documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/.
12 changes: 12 additions & 0 deletions packages/concerto-analysis/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Concerto Analysis
Analysis of [Concerto](https://github.com/accordproject/concerto/) model files.

## Install

```
npm install @accordproject/concerto-types --save
```

## License <a name="license"></a>
Accord Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the LICENSE file. Accord Project documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/.

101 changes: 101 additions & 0 deletions packages/concerto-analysis/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"name": "@accordproject/concerto-analysis",
"version": "3.0.0-alpha.1",
"description": "Analysis of Concerto model files",
"homepage": "https://github.com/accordproject/concerto",
"engines": {
"node": ">=14",
"npm": ">=6"
},
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"clean": "rimraf dist",
"prebuild": "npm-run-all clean",
"build": "tsc -p tsconfig.build.json",
"pretest": "npm-run-all licchk lint",
"lint": "eslint .",
"licchk": "license-check-and-add",
"test": "jest"
},
"repository": {
"type": "git",
"url": "https://github.com/accordproject/concerto.git",
"directory": "packages/concerto-analysis"
},
"keywords": [
"concerto",
"tools",
"modeling"
],
"author": "accordproject.org",
"license": "Apache-2.0",
"dependencies": {
"@accordproject/concerto-core": "3.0.0-alpha.1"
},
"devDependencies": {
"@accordproject/concerto-cto": "3.0.0-alpha.1",
"@types/jest": "28.1.1",
"@typescript-eslint/parser": "5.27.1",
"@typescript-eslint/eslint-plugin": "5.27.1",
"eslint": "8.2.0",
"jest": "28.1.1",
"license-check-and-add": "2.3.6",
"npm-run-all": "4.1.5",
"rimraf": "3.0.2",
"ts-jest": "28.0.4",
"typescript": "4.6.3"
},
"license-check-and-add-config": {
"folder": "./src",
"license": "HEADER",
"exact_paths_method": "EXCLUDE",
"exact_paths": [
"api.txt",
"composer-logs",
"coverage",
"index.d.ts",
"./system",
"./introspect/parser.js",
"LICENSE",
"node_modules",
".nyc-output",
"out",
".tern-project",
"./generated/concerto.ts",
"./generated/concerto.metamodel.ts"
],
"file_type_method": "EXCLUDE",
"file_types": [
".yml",
".yaml",
".zip",
".tgz"
],
"insert_license": false,
"license_formats": {
"js|ts|njk|pegjs|cto|acl|qry": {
"prepend": "/*",
"append": " */",
"eachLine": {
"prepend": " * "
}
},
"npmrc|editorconfig|txt": {
"eachLine": {
"prepend": "# "
}
},
"md": {
"file": "./HEADER.md"
}
}
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "node",
"testPathIgnorePatterns": ["<rootDir>/dist/", "/node_modules/"],
"collectCoverage": true,
"collectCoverageFrom": ["src/**/*.ts"]
}
}
66 changes: 66 additions & 0 deletions packages/concerto-analysis/src/compare-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { ComparerFactory } from './comparer';
import { comparerFactories } from './comparers';

export enum CompareResult {
NONE,
PATCH,
MINOR,
MAJOR,
ERROR,
}

export function compareResultToString(result: CompareResult) {
switch (result) {
case CompareResult.NONE:
return 'none';
case CompareResult.PATCH:
return 'patch';
case CompareResult.MINOR:
return 'minor';
case CompareResult.MAJOR:
return 'major';
case CompareResult.ERROR:
return 'error';
}
}

export type CompareConfig = {
comparerFactories: ComparerFactory[];
rules: Record<string, CompareResult>;
}

export const defaultCompareConfig: CompareConfig = {
comparerFactories,
rules: {
'asset-added': CompareResult.MINOR,
'asset-removed': CompareResult.MAJOR,
'concept-added': CompareResult.MINOR,
'concept-removed': CompareResult.MAJOR,
'enum-added': CompareResult.MINOR,
'enum-removed': CompareResult.MAJOR,
'event-added': CompareResult.MINOR,
'event-removed': CompareResult.MAJOR,
'participant-added': CompareResult.MINOR,
'participant-removed': CompareResult.MAJOR,
'transaction-added': CompareResult.MINOR,
'transaction-removed': CompareResult.MAJOR,
'required-field-added': CompareResult.MAJOR,
'optional-field-added': CompareResult.PATCH,
'field-removed': CompareResult.MAJOR,
'namespace-changed': CompareResult.ERROR
}
};
19 changes: 19 additions & 0 deletions packages/concerto-analysis/src/compare-context.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { CompareFinding } from './compare-message';

export type CompareContext = {
report: (finding: CompareFinding) => void;
}
Loading