griddo-sdk 1.1.5 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ name: Qodana
2
+ on:
3
+ workflow_dispatch:
4
+ pull_request:
5
+ types: [opened]
6
+ branches:
7
+ - main
8
+ jobs:
9
+ qodana:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: write
13
+ pull-requests: write
14
+ checks: write
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+ - name: Set up Node.js
20
+ uses: actions/setup-node@v3
21
+ with:
22
+ node-version: '18'
23
+ - name: Install Eslint
24
+ run: npm install eslint --ignore-scripts
25
+ - name: 'Qodana Scan'
26
+ uses: JetBrains/qodana-action@latest
27
+ env:
28
+ QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
@@ -0,0 +1,47 @@
1
+ name: Release
2
+
3
+ permissions:
4
+ contents: write
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ push:
9
+ tags:
10
+ - 'v*'
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: read
17
+ id-token: write
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Fetch branches
24
+ run: git fetch --all
25
+
26
+ - name: Configure Git
27
+ run: |
28
+ git config user.email "actions@github.com"
29
+ git config user.name "GitHub Actions"
30
+
31
+ - name: Create Change Log
32
+ run: npx changelogithub
33
+ env:
34
+ GITHUB_TOKEN: ${{secrets.GRIDDO_RELEASE_ACCESS_TOKEN}}
35
+
36
+ - name: Install dependencies
37
+ run: npm install
38
+
39
+ - name: Publish package
40
+ uses: actions/setup-node@v4
41
+ with:
42
+ node-version: '20.x'
43
+ registry-url: 'https://registry.npmjs.org'
44
+ - run: npm ci
45
+ - run: npm publish --access public
46
+ env:
47
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.md CHANGED
@@ -8,7 +8,7 @@ npm i griddo-sdk
8
8
 
9
9
  **USE IT!**
10
10
 
11
- Documentation: https://www.notion.so/thesaurus/Griddo-SDK-c3263026c5fa4721a153ec3e7a05a6e4
11
+ Documentation: https://www.notion.so/griddoio/Griddo-SDK-e2b40859ca5f49b8ad890b1fd5a05ebc
12
12
 
13
13
  For sporadic and reusable works, please consider using the SDK through Griddo Debugger (https://github.com/griddo/griddo-debugger).
14
14
 
package/index.js CHANGED
@@ -1,173 +1,214 @@
1
- const { api } = require('./api');
2
- const { getToken } = require('./models/auth');
3
- const { getPages, getPage, savePage, deletePage, restorePage } = require('./models/pages');
4
- const { getStructuredData, saveStructuredData, deleteStructuredData } = require('./models/structuredData');
5
- const { getLanguages } = require('./models/languages');
6
- const { getStatus } = require('./models/liveStatus');
7
- const { sendAlert } = require('./models/alerts');
1
+ const {api} = require('./api');
2
+ const {getToken} = require('./models/auth');
3
+ const {getPages, getPage, savePage, deletePage, restorePage} = require('./models/pages');
4
+ const {
5
+ getStructuredData,
6
+ getStructuredDataByID,
7
+ saveStructuredData,
8
+ deleteStructuredData
9
+ } = require('./models/structuredData');
10
+ const {getLanguages} = require('./models/languages');
11
+ const {getStatus} = require('./models/liveStatus');
12
+ const {sendAlert} = require('./models/alerts');
8
13
 
9
14
  class SDK {
10
- constructor() {
11
- this._env = {};
12
- this.connect = this.connect.bind(this);
13
- this.api = this.api.bind(this);
14
- this.getPage = this.getPage.bind(this);
15
- this.savePage = this.savePage.bind(this);
16
- this.deletePage = this.deletePage.bind(this);
17
- this.restorePage = this.restorePage.bind(this);
18
- this.mapPages = this.mapPages.bind(this);
19
- this.mapModulesFromPage = this.mapModulesFromPage.bind(this);
20
- this.mapModules = this.mapModules.bind(this);
21
- this.getStructuredData = this.getStructuredData.bind(this);
22
- this.saveStructuredData = this.saveStructuredData.bind(this);
23
- this.deleteStructuredData = this.deleteStructuredData.bind(this);
24
- this.mapStructuredData = this.mapStructuredData.bind(this);
25
- this.getLanguage = this.getLanguage.bind(this);
26
- this.getDefaultLanguage = this.getDefaultLanguage.bind(this);
27
- this.sendAlert = this.sendAlert.bind(this);
28
- this.languages = [];
29
- this.liveStatus = {};
30
- }
31
-
32
- async connect(environment) {
33
- const {
34
- api,
35
- publicApi,
36
- user,
37
- password,
38
- verbose,
39
- } = environment;
40
- if (!api || !user || !password) throw new Error('Connection object must contain the keys api, user and password.');
41
- if (!publicApi) console.log('WARNING: Connection object should contain the key publicApi (!!!).\n\n');
42
- this._env = {
43
- api: api.endsWith('/') ? api.slice(0, -1) : api,
44
- publicApi: publicApi && (publicApi.endsWith('/') ? publicApi.slice(0, -1) : publicApi),
45
- token: await getToken(environment),
46
- verbose,
47
- };
48
- this.languages = await getLanguages(this._env);
49
-
50
- const liveStatus = await getStatus(this._env);
51
- for (const item of liveStatus) this.liveStatus[item.status] = item.id;
52
- };
53
-
54
- getLanguage(key, value) {
55
- return this.languages.find(item => item[key] === value);
56
- };
57
-
58
- getDefaultLanguage() {
59
- return this.languages.find(item => item.isDefault);
60
- };
61
-
62
- async mapPages(callback, templateName) {
63
- if (this._env.verbose) console.log(`\nMapping ${templateName || 'all'} pages with callback function ${callback.name}...`);
64
- if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map pages without a callback function.');
65
- const pages = await getPages(this._env, templateName);
66
- if (!pages?.length) {
67
- if (this._env.verbose) console.log('- No pages found.');
68
- return;
69
- }
70
- for (const pageId of pages) {
71
- if (this._env.verbose) console.log('- Mapping page', pageId);
72
- const page = await getPage(this._env, pageId)
73
- const pageProtected = JSON.parse(JSON.stringify(page));
74
- const result = await callback(pageProtected);
75
- if (result && JSON.stringify(page) !== JSON.stringify(result)) {
76
- await savePage(this._env, result)
77
- }
78
- }
79
- };
80
-
81
- async mapModulesFromPage(page, moduleName, callback) {
82
- if (this._env.verbose) console.log(`\tMapping modules ${moduleName} with callback function ${callback.name}...`);
83
- if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map modules without a callback function.');
84
- if (!moduleName) throw new Error('Cannot map modules in page without selecting the module to map.');
85
- if (!page || typeof (page) !== 'object') throw new Error('Page to map modules not found.');
86
- const protectedPage = JSON.parse(JSON.stringify(page));
87
- let found = false;
88
- const search = async (modulePiece) => {
89
- for (const key of Object.keys(modulePiece)) {
90
- const module = modulePiece[key];
91
- if (!module || typeof (module) !== 'object') continue;
92
- if (module.component === moduleName) {
93
- if (!found && this._env.verbose) console.log(`\tModule ${moduleName} found.`);
94
- const newModule = await callback(JSON.parse(JSON.stringify(module)));
95
- if (newModule) modulePiece[key] = newModule;
96
- found = true;
97
- }
98
- await search(module);
99
- }
100
- };
101
- await search(protectedPage);
102
- if (!found && this._env.verbose) console.log(`\tModule ${moduleName} not found.`);
103
- return protectedPage;
104
- };
105
-
106
- async mapModules(callback, moduleName, template) {
107
- if (this._env.verbose) console.log(`\nMapping modules ${moduleName} from ${template || 'all'} pages with callback function ${callback.name}...`);
108
- if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map modules without a callback function.');
109
- if (!moduleName) throw new Error('Cannot map modules in page without selecting the module to map.');
110
- const fixPage = (page) => this.mapModulesFromPage(page, moduleName, callback);
111
- await this.mapPages(fixPage, template);
112
- };
113
-
114
- async savePage(page) {
115
- return await savePage(this._env, page);
116
- };
117
-
118
- async getPage(id) {
119
- return await getPage(this._env, id);
120
- };
121
-
122
- async deletePage(id) {
123
- return await deletePage(this._env, id);
124
- };
125
-
126
- async restorePage(id) {
127
- return await restorePage(this._env, id);
128
- };
129
-
130
- async getStructuredData(contentType, site = null, language = null) {
131
- return await getStructuredData(this._env, contentType, site, language);
132
- };
133
-
134
- async saveStructuredData(structuredData) {
135
- return await saveStructuredData(this._env, structuredData);
136
- };
137
-
138
- async deleteStructuredData(id) {
139
- return await deleteStructuredData(this._env, id);
140
- };
141
-
142
- async mapStructuredData(callback, contentType) {
143
- if (this._env.verbose) console.log(`\nMapping ${contentType || 'all'} structured data with callback function ${callback.name}...`);
144
- if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map structured data without a callback function.');
145
- const content = await getStructuredData(this._env, contentType);
146
- if (!content?.length) {
147
- if (this._env.verbose) console.log('- No structured data found.');
148
- return;
149
- }
150
- for (const structuredData of content) {
151
- if (this._env.verbose) console.log('- Mapping structured data', structuredData.id);
152
- const dataProtected = JSON.parse(JSON.stringify(structuredData));
153
- const result = await callback(dataProtected);
154
- if (result && JSON.stringify(structuredData) !== JSON.stringify(result)) {
155
- await saveStructuredData(this._env, result)
156
- }
157
- }
158
- };
159
-
160
- async api(...params) {
161
- return await api(this._env, ...params);
162
- };
163
-
164
- showLog(...text) {
165
- console.log(`\t${text.join(' ')} `);
166
- };
167
-
168
- async sendAlert(alert) {
169
- return await sendAlert(this._env, alert);
170
- };
15
+ constructor() {
16
+ this._env = {};
17
+ this.connect = this.connect.bind(this);
18
+ this.api = this.api.bind(this);
19
+ this.getPage = this.getPage.bind(this);
20
+ this.savePage = this.savePage.bind(this);
21
+ this.deletePage = this.deletePage.bind(this);
22
+ this.restorePage = this.restorePage.bind(this);
23
+ this.mapPages = this.mapPages.bind(this);
24
+ this.mapModulesFromPage = this.mapModulesFromPage.bind(this);
25
+ this.mapModules = this.mapModules.bind(this);
26
+ this.getStructuredDataByID = this.getStructuredDataByID.bind(this);
27
+ this.getStructuredData = this.getStructuredData.bind(this);
28
+ this.getPaginationStructuredData = this.getPaginationStructuredData.bind(this);
29
+ this.saveStructuredData = this.saveStructuredData.bind(this);
30
+ this.deleteStructuredData = this.deleteStructuredData.bind(this);
31
+ this.mapStructuredData = this.mapStructuredData.bind(this);
32
+ this.getLanguage = this.getLanguage.bind(this);
33
+ this.getDefaultLanguage = this.getDefaultLanguage.bind(this);
34
+ this.sendAlert = this.sendAlert.bind(this);
35
+ this.languages = [];
36
+ this.liveStatus = {};
37
+ }
38
+
39
+ async connect(environment) {
40
+ const {
41
+ api,
42
+ publicApi,
43
+ user,
44
+ password,
45
+ verbose,
46
+ } = environment;
47
+ if (!api || !user || !password) throw new Error('Connection object must contain the keys api, user and password.');
48
+ if (!publicApi) console.log('WARNING: Connection object should contain the key publicApi (!!!).\n\n');
49
+ this._env = {
50
+ api: api.endsWith('/') ? api.slice(0, -1) : api,
51
+ publicApi: publicApi && (publicApi.endsWith('/') ? publicApi.slice(0, -1) : publicApi),
52
+ token: await getToken(environment),
53
+ verbose,
54
+ };
55
+ this.languages = await getLanguages(this._env);
56
+
57
+ const liveStatus = await getStatus(this._env);
58
+ for (const item of liveStatus) this.liveStatus[item.status] = item.id;
59
+ };
60
+
61
+ getLanguage(key, value) {
62
+ return this.languages.find(item => item[key] === value);
63
+ };
64
+
65
+ getDefaultLanguage() {
66
+ return this.languages.find(item => item.isDefault);
67
+ };
68
+
69
+ async mapPages(callback, templateName) {
70
+ if (this._env.verbose) console.log(`\nMapping ${templateName || 'all'} pages with callback function ${callback.name}...`);
71
+ if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map pages without a callback function.');
72
+ const pages = await getPages(this._env, templateName);
73
+ if (!pages?.length) {
74
+ if (this._env.verbose) console.log('- No pages found.');
75
+ return;
76
+ }
77
+ for (const pageId of pages) {
78
+ if (this._env.verbose) console.log('- Mapping page', pageId);
79
+ const page = await getPage(this._env, pageId)
80
+ const pageProtected = JSON.parse(JSON.stringify(page));
81
+ const result = await callback(pageProtected);
82
+ if (result && JSON.stringify(page) !== JSON.stringify(result)) {
83
+ await savePage(this._env, result)
84
+ }
85
+ }
86
+ };
87
+
88
+ async mapModulesFromPage(page, moduleName, callback) {
89
+ if (this._env.verbose) console.log(`\tMapping modules ${moduleName} with callback function ${callback.name}...`);
90
+ if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map modules without a callback function.');
91
+ if (!moduleName) throw new Error('Cannot map modules in page without selecting the module to map.');
92
+ if (!page || typeof (page) !== 'object') throw new Error('Page to map modules not found.');
93
+ const protectedPage = JSON.parse(JSON.stringify(page));
94
+ let found = false;
95
+ const search = async (modulePiece) => {
96
+ for (const key of Object.keys(modulePiece)) {
97
+ const module = modulePiece[key];
98
+ if (!module || typeof (module) !== 'object') continue;
99
+ if (module.component === moduleName) {
100
+ if (!found && this._env.verbose) console.log(`\tModule ${moduleName} found.`);
101
+ const newModule = await callback(JSON.parse(JSON.stringify(module)));
102
+ if (newModule) modulePiece[key] = newModule;
103
+ found = true;
104
+ }
105
+ await search(module);
106
+ }
107
+ };
108
+ await search(protectedPage);
109
+ if (!found && this._env.verbose) console.log(`\tModule ${moduleName} not found.`);
110
+ return protectedPage;
111
+ };
112
+
113
+ async mapModules(callback, moduleName, template) {
114
+ if (this._env.verbose) console.log(`\nMapping modules ${moduleName} from ${template || 'all'} pages with callback function ${callback.name}...`);
115
+ if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map modules without a callback function.');
116
+ if (!moduleName) throw new Error('Cannot map modules in page without selecting the module to map.');
117
+ const fixPage = (page) => this.mapModulesFromPage(page, moduleName, callback);
118
+ await this.mapPages(fixPage, template);
119
+ };
120
+
121
+ async savePage(page) {
122
+ return await savePage(this._env, page);
123
+ };
124
+
125
+ async getPage(id) {
126
+ return await getPage(this._env, id);
127
+ };
128
+
129
+ async deletePage(id) {
130
+ return await deletePage(this._env, id);
131
+ };
132
+
133
+ async restorePage(id) {
134
+ return await restorePage(this._env, id);
135
+ };
136
+
137
+ async getStructuredDataByID(id) {
138
+ return await getStructuredDataByID(this._env, id);
139
+ }
140
+
141
+ async getStructuredData(
142
+ contentType,
143
+ site = null,
144
+ language = null,
145
+ queryParams = {
146
+ page: 0,
147
+ itemsPerPage: 0,
148
+ pagination: false,
149
+ deleted: false,
150
+ includeDraft: true,
151
+ relatedFields: false,
152
+ query: null,
153
+ },
154
+ ) {
155
+ return await getStructuredData(this._env, contentType, site, language, queryParams);
156
+ }
157
+
158
+ async getPaginationStructuredData(
159
+ contentType,
160
+ site = null,
161
+ language = null,
162
+ queryParams = {
163
+ page: 1,
164
+ itemsPerPage: 50,
165
+ pagination: true,
166
+ deleted: false,
167
+ includeDraft: false,
168
+ relatedFields: false,
169
+ query: null,
170
+ },
171
+ ) {
172
+ return await getStructuredData(this._env, contentType, site, language, queryParams);
173
+ }
174
+
175
+ async saveStructuredData(structuredData) {
176
+ return await saveStructuredData(this._env, structuredData);
177
+ };
178
+
179
+ async deleteStructuredData(id) {
180
+ return await deleteStructuredData(this._env, id);
181
+ };
182
+
183
+ async mapStructuredData(callback, contentType) {
184
+ if (this._env.verbose) console.log(`\nMapping ${contentType || 'all'} structured data with callback function ${callback.name}...`);
185
+ if (!callback || typeof (callback) !== 'function') throw new Error('Cannot map structured data without a callback function.');
186
+ const content = await getStructuredData(this._env, contentType);
187
+ if (!content?.length) {
188
+ if (this._env.verbose) console.log('- No structured data found.');
189
+ return;
190
+ }
191
+ for (const structuredData of content) {
192
+ if (this._env.verbose) console.log('- Mapping structured data', structuredData.id);
193
+ const dataProtected = JSON.parse(JSON.stringify(structuredData));
194
+ const result = await callback(dataProtected);
195
+ if (result && JSON.stringify(structuredData) !== JSON.stringify(result)) {
196
+ await saveStructuredData(this._env, result)
197
+ }
198
+ }
199
+ };
200
+
201
+ async api(...params) {
202
+ return await api(this._env, ...params);
203
+ };
204
+
205
+ showLog(...text) {
206
+ console.log(`\t${text.join(' ')} `);
207
+ };
208
+
209
+ async sendAlert(alert) {
210
+ return await sendAlert(this._env, alert);
211
+ };
171
212
  };
172
213
 
173
214
  module.exports = SDK;
@@ -1,45 +1,94 @@
1
- const { api } = require('../api');
2
-
3
- const getStructuredData = async (env, contentType, site = null, language = null) => {
4
- const headers = {
5
- lang: language,
6
- };
7
- const items = await api(env, 'get', `${site ? `/site/${site}` : ''}/structured_data_contents/${contentType||''}?pagination=false&includeDraft=true`, null, headers)
8
- .then(data => data.items);
9
- if (env.verbose) console.log(`\tStructured data ${contentType} loaded.`);
10
- return items;
1
+ const {api} = require('../api');
2
+
3
+ const getStructuredData = async (
4
+ env,
5
+ contentType,
6
+ site = null,
7
+ language = null,
8
+ queryParams = {
9
+ page: 0,
10
+ itemsPerPage: 0,
11
+ pagination: false,
12
+ deleted: false,
13
+ includeDraft: true,
14
+ relatedFields: false,
15
+ query: null,
16
+ },
17
+ ) => {
18
+ const headers = {
19
+ lang: language,
20
+ };
21
+
22
+ if (!queryParams.pagination) {
23
+ delete queryParams.page
24
+ delete queryParams.itemsPerPage
25
+ delete queryParams.deleted
26
+ delete queryParams.relatedFields
27
+ }
28
+
29
+ if (!queryParams.query) {
30
+ delete queryParams.query
31
+ }
32
+
33
+ const query = new URLSearchParams(queryParams).toString();
34
+ const path = `${site ? `/site/${site}` : ''}/structured_data_contents/${contentType || ''}?${query}`
35
+
36
+ const items = await api(env, 'get', path, null, headers)
37
+ .then(data => queryParams.pagination ? data : data.items);
38
+ if (env.verbose) {
39
+ console.log(`\tStructured data ${contentType} loaded.`);
40
+ }
41
+ return items;
11
42
  };
12
43
 
44
+ const getStructuredDataByID = async (
45
+ env,
46
+ id
47
+ ) => {
48
+ const headers = {};
49
+ const path = `/structured_data_content/${id}`
50
+
51
+ const items = await api(env, 'get', path, null, headers)
52
+ .then(data => data);
53
+
54
+ if (env.verbose) {
55
+ console.log(`\tStructured data by content ID: ${id} loaded.`);
56
+ }
57
+
58
+ return items;
59
+ }
60
+
13
61
  const saveStructuredData = async (env, structuredData) => {
14
- const actions = {
15
- new: {
16
- method: 'post',
17
- endpoint: '/structured_data_content/',
18
- actionName: 'created',
19
- },
20
- update: {
21
- method: 'put',
22
- endpoint: `/structured_data_content/${structuredData.id}`,
23
- actionName: 'updated',
24
- },
25
- };
26
- const {
27
- method,
28
- endpoint,
29
- actionName,
30
- } = actions[structuredData.id ? 'update' : 'new'];
31
- const savedItem = await api(env, method, endpoint, structuredData);
32
- if (env.verbose) console.log(`\tStructured data ${structuredData?.content?.title || structuredData?.content?.label || 'untitled'} in ${structuredData.structuredData} ${actionName}.`);
33
- return savedItem;
62
+ const actions = {
63
+ new: {
64
+ method: 'post',
65
+ endpoint: '/structured_data_content/',
66
+ actionName: 'created',
67
+ },
68
+ update: {
69
+ method: 'put',
70
+ endpoint: `/structured_data_content/${structuredData.id}`,
71
+ actionName: 'updated',
72
+ },
73
+ };
74
+ const {
75
+ method,
76
+ endpoint,
77
+ actionName,
78
+ } = actions[structuredData.id ? 'update' : 'new'];
79
+ const savedItem = await api(env, method, endpoint, structuredData);
80
+ if (env.verbose) console.log(`\tStructured data ${structuredData?.content?.title || structuredData?.content?.label || 'untitled'} in ${structuredData.structuredData} ${actionName}.`);
81
+ return savedItem;
34
82
  };
35
83
 
36
84
  const deleteStructuredData = (env, id) => {
37
- if (env.verbose) console.log('\tDelete structured data', id);
38
- return api(env, 'delete', `/structured_data_content/${id}`);
85
+ if (env.verbose) console.log('\tDelete structured data', id);
86
+ return api(env, 'delete', `/structured_data_content/${id}`);
39
87
  };
40
88
 
41
89
  module.exports = {
42
- getStructuredData,
43
- saveStructuredData,
44
- deleteStructuredData,
90
+ getStructuredData,
91
+ getStructuredDataByID,
92
+ saveStructuredData,
93
+ deleteStructuredData,
45
94
  };
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "griddo-sdk",
3
- "version": "1.1.5",
3
+ "version": "1.2.2",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "release": "bumpp --commit --push --tag"
8
9
  },
9
10
  "repository": {
10
11
  "type": "git",
@@ -18,5 +19,8 @@
18
19
  "homepage": "https://github.com/griddo/griddo-sdk#readme",
19
20
  "dependencies": {
20
21
  "axios": "0.26.0"
22
+ },
23
+ "devDependencies": {
24
+ "bumpp": "^9.4.1"
21
25
  }
22
26
  }
package/qodana.yaml ADDED
@@ -0,0 +1,20 @@
1
+ #-------------------------------------------------------------------------------#
2
+ # Qodana analysis is configured by qodana.yaml file #
3
+ # https://www.jetbrains.com/help/qodana/qodana-yaml.html #
4
+ #-------------------------------------------------------------------------------#
5
+ version: "1.0"
6
+ #Specify inspection profile for code analysis
7
+ profile:
8
+ name: qodana.starter
9
+ include:
10
+ - name: CheckDependencyLicenses
11
+ - name: Eslint
12
+ linter: jetbrains/qodana-js:latest
13
+ exclude:
14
+ - name: JSXDomNesting
15
+ - name: VueDataFunction
16
+ - name: VueDeprecatedSymbol
17
+ - name: VueDuplicateTag
18
+ - name: VueMissingComponentImportInspection
19
+ - name: VueUnrecognizedDirective
20
+ - name: VueUnrecognizedSlot