Skip to content

Commit

Permalink
Merge pull request #1245 from Accenture/task/1244-vscode-intellisense…
Browse files Browse the repository at this point in the history
…-broke-when-we-introduced-600

Task/1244 restore vscode intellisense
  • Loading branch information
JoernBerkefeld committed Apr 2, 2024
2 parents 47650af + 65db3ae commit e0dcd7c
Show file tree
Hide file tree
Showing 63 changed files with 1,418 additions and 10,557 deletions.
4 changes: 3 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"root": true,
"settings": {
"jsdoc": {
"mode": "jsdoc",
"mode": "typescript",
"preferredTypes": {
"array": "Array",
"array.<>": "[]",
Expand Down Expand Up @@ -84,6 +84,8 @@
],
"jsdoc/require-param-type": "error",
"jsdoc/tag-lines": ["warn", "any", { "startLines": 1 }],
"jsdoc/no-undefined-types": "error",
"valid-jsdoc": "off",
"spaced-comment": ["warn", "always", { "block": { "exceptions": ["*"], "balanced": true } }]
},
"overrides": [
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/code-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16
registry-url: https://registry.npmjs.org/

- run: npm ci --ignore-scripts
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage-develop-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16

- run: npm ci --ignore-scripts

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage-main-branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16

- run: npm ci --ignore-scripts

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16

- run: npm ci --ignore-scripts

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16
- run: npm ci
- run: npm test

Expand All @@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 18.16
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm publish
Expand Down
2 changes: 0 additions & 2 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
#npm run docs
#git update-index --add docs/dist/documentation.md
npx --no lint-staged
8,992 changes: 0 additions & 8,992 deletions docs/dist/documentation.md

This file was deleted.

3 changes: 2 additions & 1 deletion jsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"include": ["lib/**/*.js", "types/**/*.js", "test/**/*.js"],
"compilerOptions": {
"module": "es6",
"target": "esnext"
"target": "es2022",
"checkJs": false
}
}
40 changes: 27 additions & 13 deletions lib/Builder.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
'use strict';

import TYPE from '../types/mcdev.d.js';
import { Util } from './util/util.js';
import File from './util/file.js';
import config from './util/config.js';
Expand All @@ -9,16 +8,31 @@ import auth from './util/auth.js';
import MetadataTypeInfo from './MetadataTypeInfo.js';
// @ts-ignore

/**
* @typedef {import('../types/mcdev.d.js').BuObject} BuObject
* @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract
* @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
* @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc
* @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
* @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
* @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
* @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList
* @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
* @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap
*/

/**
* Builds metadata from a template using market specific customisation
*/
class Builder {
/**
* Creates a Builder, uses v2 auth if v2AuthOptions are passed.
*
* @param {TYPE.Mcdevrc} properties properties for auth
* @param {Mcdevrc} properties properties for auth
saved
* @param {TYPE.BuObject} buObject properties for auth
* @param {BuObject} buObject properties for auth
*/
constructor(properties, buObject) {
this.properties = properties;
Expand All @@ -40,7 +54,7 @@ saved
);

/**
* @type {TYPE.MultiMetadataTypeList}
* @type {MultiMetadataTypeList}
*/
this.metadata = {};
}
Expand All @@ -50,8 +64,8 @@ saved
*
* @param {string} metadataType metadata type to build
* @param {string} name name of metadata to build
* @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata
* @returns {Promise.<TYPE.MultiMetadataTypeList>} Promise
* @param {TemplateMap} templateVariables variables to be replaced in the metadata
* @returns {Promise.<MultiMetadataTypeList>} Promise
*/
async _buildDefinition(metadataType, name, templateVariables) {
let nameArr;
Expand Down Expand Up @@ -103,7 +117,7 @@ saved
* @param {string} selectedType supported metadata type
* @param {string[]} keyArr customerkey of the metadata
* @param {string} market market localizations
* @returns {Promise.<TYPE.MultiMetadataTypeList>} -
* @returns {Promise.<MultiMetadataTypeList>} -
*/
static async buildTemplate(businessUnit, selectedType, keyArr, market) {
const properties = await config.getProperties();
Expand Down Expand Up @@ -132,20 +146,20 @@ saved
*
* @param {string} metadataType metadata type to create a template of
* @param {string[]} keyArr customerkey of metadata to create a template of
* @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata
* @returns {Promise.<TYPE.MultiMetadataTypeList>} Promise
* @param {TemplateMap} templateVariables variables to be replaced in the metadata
* @returns {Promise.<MultiMetadataTypeList>} Promise
*/
async _buildTemplate(metadataType, keyArr, templateVariables) {
const type = metadataType;
try {
/** @type {TYPE.MetadataTypeItemObj[]} */
/** @type {MetadataTypeItemObj[]} */
const result = await Promise.all(
keyArr.map((key) => {
MetadataTypeInfo[type].client = this.client;
MetadataTypeInfo[type].properties = this.properties;
MetadataTypeInfo[type].buObject = this.buObject;

/** @type {TYPE.MetadataTypeItemObj} */
/** @type {MetadataTypeItemObj} */
return MetadataTypeInfo[type].buildTemplate(
this.retrieveDir,
this.templateDir,
Expand All @@ -169,7 +183,7 @@ saved
* @param {string} selectedType supported metadata type
* @param {string} name name of the metadata
* @param {string} market market localizations
* @returns {Promise.<TYPE.MultiMetadataTypeList>} -
* @returns {Promise.<MultiMetadataTypeList>} -
*/
static async buildDefinition(businessUnit, selectedType, name, market) {
const properties = await config.getProperties();
Expand Down Expand Up @@ -199,7 +213,7 @@ saved
* @param {string} listName name of list of BU-market combos
* @param {string} type supported metadata type
* @param {string} name name of the metadata
* @returns {Promise.<TYPE.MultiMetadataTypeList[]>} -
* @returns {Promise.<MultiMetadataTypeList[]>} -
*/
static async buildDefinitionBulk(listName, type, name) {
const properties = await config.getProperties();
Expand Down
48 changes: 32 additions & 16 deletions lib/Deployer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
'use strict';

import TYPE from '../types/mcdev.d.js';
import MetadataTypeInfo from './MetadataTypeInfo.js';
import path from 'node:path';
import Cli from './util/cli.js';
Expand All @@ -10,6 +9,23 @@ import config from './util/config.js';
import cache from './util/cache.js';
import auth from './util/auth.js';

/**
* @typedef {import('../types/mcdev.d.js').BuObject} BuObject
* @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract
* @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
* @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc
* @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
* @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
* @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
* @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList
* @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
* @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap
* @typedef {import('../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes
* @typedef {import('../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap
*/

/**
* Reads metadata from local directory and deploys it to specified target business unit.
* Source and target business units are also compared before the deployment to apply metadata specific patches.
Expand All @@ -18,8 +34,8 @@ class Deployer {
/**
* Creates a Deployer, uses v2 auth if v2AuthOptions are passed.
*
* @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
* @param {TYPE.BuObject} buObject properties for auth
* @param {Mcdevrc} properties General configuration to be used in retrieve
* @param {BuObject} buObject properties for auth
*/
constructor(properties, buObject) {
this.buObject = buObject;
Expand All @@ -42,9 +58,9 @@ class Deployer {
* Deploys all metadata located in the 'deploy' directory to the specified business unit
*
* @param {string} businessUnit references credentials from properties.json
* @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type
* @param {SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type
* @param {string[]} [keyArr] limit deployment to given metadata keys
* @returns {Promise.<Object.<string,TYPE.MultiMetadataTypeMap>>} deployed metadata per BU (first key: bu name, second key: metadata type)
* @returns {Promise.<Object.<string, MultiMetadataTypeMap>>} deployed metadata per BU (first key: bu name, second key: metadata type)
*/
static async deploy(businessUnit, selectedTypesArr, keyArr) {
Util.logger.info('mcdev:: Deploy');
Expand Down Expand Up @@ -184,10 +200,10 @@ class Deployer {
*
* @param {string} cred name of Credential
* @param {string} bu name of BU
* @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
* @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type
* @param {Mcdevrc} properties General configuration to be used in retrieve
* @param {SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type
* @param {string[]} [keyArr] limit deployment to given metadata keys
* @returns {Promise.<TYPE.MultiMetadataTypeMap>} ensure that BUs are worked on sequentially
* @returns {Promise.<MultiMetadataTypeMap>} ensure that BUs are worked on sequentially
*/
static async _deployBU(cred, bu, properties, typeArr, keyArr) {
const buPath = `${cred}/${bu}`;
Expand All @@ -211,13 +227,13 @@ class Deployer {
/**
* Deploy all metadata that is located in the deployDir
*
* @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype)
* @param {SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype)
* @param {string[]} [keyArr] limit deployment to given metadata keys
* @returns {Promise.<TYPE.MultiMetadataTypeMap>} Promise of all deployed metadata
* @returns {Promise.<MultiMetadataTypeMap>} Promise of all deployed metadata
*/
async _deploy(typeArr, keyArr) {
if (await File.pathExists(this.deployDir)) {
/** @type {TYPE.MultiMetadataTypeMap} */
/** @type {MultiMetadataTypeMap} */
this.metadata = Deployer.readBUMetadata(this.deployDir, typeArr);

// filter found metadata by key if given
Expand Down Expand Up @@ -282,7 +298,7 @@ class Deployer {
const result = await MetadataTypeInfo[type].retrieveForCache(null, subTypeArr);
cache.setMetadata(type, result.metadata);
}
/** @type {TYPE.MultiMetadataTypeMap} */
/** @type {MultiMetadataTypeMap} */
const multiMetadataTypeMap = {};
// deploy metadata files, extending cache once deploys
for (const metadataType in deployOrder) {
Expand Down Expand Up @@ -313,10 +329,10 @@ class Deployer {
* @param {string} deployDir root directory of metadata.
* @param {string[]} [typeArr] limit deployment to given metadata type
* @param {boolean} [listBadKeys] do not print errors, used for badKeys()
* @returns {TYPE.MultiMetadataTypeMap} Metadata of BU in local directory
* @returns {MultiMetadataTypeMap} Metadata of BU in local directory
*/
static readBUMetadata(deployDir, typeArr, listBadKeys) {
/** @type {TYPE.MultiMetadataTypeMap} */
/** @type {MultiMetadataTypeMap} */
const buMetadata = {};
try {
File.ensureDirSync(deployDir);
Expand Down Expand Up @@ -347,8 +363,8 @@ class Deployer {
* parses asset metadata to auto-create folders in target folder
*
* @param {string} deployDir root directory of metadata.
* @param {TYPE.MultiMetadataTypeMap} metadata list of metadata
* @param {TYPE.SupportedMetadataTypes[]} metadataTypeArr list of metadata types
* @param {MultiMetadataTypeMap} metadata list of metadata
* @param {SupportedMetadataTypes[]} metadataTypeArr list of metadata types
* @returns {void}
*/
static async createFolderDefinitions(deployDir, metadata, metadataTypeArr) {
Expand Down
40 changes: 29 additions & 11 deletions lib/Retriever.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,39 @@
'use strict';

import TYPE from '../types/mcdev.d.js';
import MetadataTypeInfo from './MetadataTypeInfo.js';
import MetadataDefinitions from './MetadataTypeDefinitions.js';
import { Util } from './util/util.js';
import File from './util/file.js';
import cache from './util/cache.js';
import auth from './util/auth.js';

/**
* @typedef {import('../types/mcdev.d.js').BuObject} BuObject
* @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract
* @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
* @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc
* @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
* @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
* @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
* @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
* @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList
* @typedef {import('../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap
* @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
* @typedef {import('../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes
* @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap
* @typedef {import('../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
*/

/**
* Retrieves metadata from a business unit and saves it to the local filesystem.
*/
class Retriever {
/**
* Creates a Retriever, uses v2 auth if v2AuthOptions are passed.
*
* @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
* @param {TYPE.BuObject} buObject properties for auth
* @param {Mcdevrc} properties General configuration to be used in retrieve
* @param {BuObject} buObject properties for auth
*/
constructor(properties, buObject) {
this.buObject = buObject;
Expand All @@ -32,22 +50,22 @@ class Retriever {
/**
* Retrieve metadata of specified types into local file system and Retriever.metadata
*
* @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes!
* @param {string[]|TYPE.TypeKeyCombo} [namesOrKeys] name of Metadata to retrieveAsTemplate or list of keys for normal retrieval
* @param {TYPE.TemplateMap} [templateVariables] Object of values which can be replaced (in case of templating)
* @param {SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes!
* @param {string[] | TypeKeyCombo} [namesOrKeys] name of Metadata to retrieveAsTemplate or list of keys for normal retrieval
* @param {TemplateMap} [templateVariables] Object of values which can be replaced (in case of templating)
* @param {boolean} [changelogOnly] skip saving, only create json in memory
* @returns {Promise.<TYPE.MultiMetadataTypeList>} Promise of a list of retrieved items grouped by type {automation:[...], query:[...]}
* @returns {Promise.<MultiMetadataTypeList>} Promise of a list of retrieved items grouped by type {automation:[...], query:[...]}
*/
async retrieve(metadataTypes, namesOrKeys, templateVariables, changelogOnly) {
/**
* @type {TYPE.MultiMetadataTypeList}
* @type {MultiMetadataTypeList}
*/
const retrieveChangelog = {};
if (!namesOrKeys || (Array.isArray(namesOrKeys) && !namesOrKeys.length)) {
// no keys were provided, ensure we retrieve all
namesOrKeys = [null];
}
/** @type {TYPE.TypeKeyCombo} */
/** @type {TypeKeyCombo} */
let typeKeyMap = {};
if (Array.isArray(namesOrKeys)) {
// no keys or array of keys was provided (likely called via CLI or to retrieve all)
Expand Down Expand Up @@ -192,8 +210,8 @@ class Retriever {
/**
* helper for {@link Retriever.retrieve} to get all dependencies of the given types
*
* @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes!
* @returns {TYPE.SupportedMetadataTypes[]} unique list dependent metadata types
* @param {SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes!
* @returns {SupportedMetadataTypes[]} unique list dependent metadata types
*/
_getTypeDependencies(metadataTypes) {
let dependencies = [];
Expand Down
Loading

0 comments on commit e0dcd7c

Please sign in to comment.