diff --git a/.github/workflows/release-v2-beta-plugins.yml b/.github/workflows/release-v2-beta-plugins.yml index 58c10ac87..fb005bbd2 100644 --- a/.github/workflows/release-v2-beta-plugins.yml +++ b/.github/workflows/release-v2-beta-plugins.yml @@ -135,6 +135,14 @@ jobs: package: ./packages/contentstack-branches/package.json tag: beta + # Apps CLI + - name: Publishing apps-cli (Production) + uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/contentstack-apps-cli/package.json + tag: latest + # Query Export - name: Publishing query-export (Beta) uses: JS-DevTools/npm-publish@v3 @@ -183,6 +191,22 @@ jobs: package: ./packages/contentstack-migrate-rte/package.json access: public tag: beta + # External Migrate + - name: Publishing external-migrate (Production) + uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/contentstack-external-migrate/package.json + tag: latest + + - name: Create Production Release + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.PKG_TOKEN }} + VERSION: ${{ steps.publish-plugins.outputs.version }} + run: | + # Get the previous production release for comparison + PREVIOUS_PROD=$(gh release list --limit 10 | grep -v 'prerelease' | head -1 | cut -f1) # Bulk Operations - name: Publishing bulk-operations (Beta) diff --git a/.talismanrc b/.talismanrc index 789dc0cda..2db24759d 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,4 @@ fileignoreconfig: - filename: pnpm-lock.yaml - checksum: cdead0797199d22bbc55b9e5b6b86983f28eb760fabe5e1f2d5139c4456a9131 + checksum: 24619b075664a197c8f648b04dd86ee79d653fbb583b33e4a3768f02378912ef version: '1.0' diff --git a/package.json b/package.json index 4ae6360da..bfc835efa 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "pnpm": "^10.28.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "private": true, "scripts": { diff --git a/packages/contentstack-apps-cli/.eslintignore b/packages/contentstack-apps-cli/.eslintignore deleted file mode 100644 index 9b1c8b133..000000000 --- a/packages/contentstack-apps-cli/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/dist diff --git a/packages/contentstack-apps-cli/.eslintrc b/packages/contentstack-apps-cli/.eslintrc deleted file mode 100644 index aa58bce72..000000000 --- a/packages/contentstack-apps-cli/.eslintrc +++ /dev/null @@ -1,42 +0,0 @@ -{ - "env": { - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "extends": [ - "plugin:@typescript-eslint/recommended" - ], - "ignorePatterns": [ - "lib/**/*", - "test/**/*" - ], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none" - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "quotes": "off", - "semi": "off", - "@typescript-eslint/no-redeclare": "off", - "eqeqeq": [ - "error", - "smart" - ], - "id-match": "error", - "no-eval": "error", - "no-var": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-require-imports": "off", - "prefer-const": "error" - } -} \ No newline at end of file diff --git a/packages/contentstack-apps-cli/eslint.config.js b/packages/contentstack-apps-cli/eslint.config.js new file mode 100644 index 000000000..cb01e63b9 --- /dev/null +++ b/packages/contentstack-apps-cli/eslint.config.js @@ -0,0 +1,47 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; + +export default [ + ...tseslint.configs.recommended, + { + ignores: [ + 'lib/**/*', + 'test/**/*', + 'dist/**/*', + ], + }, + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: './tsconfig.json', + }, + sourceType: 'module', + globals: { + ...globals.node, + }, + }, + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'none', + }, + ], + '@typescript-eslint/prefer-namespace-keyword': 'error', + quotes: 'off', + semi: 'off', + '@typescript-eslint/no-redeclare': 'off', + eqeqeq: ['error', 'smart'], + 'id-match': 'error', + 'no-eval': 'error', + 'no-var': 'error', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'prefer-const': 'error', + }, + }, +]; diff --git a/packages/contentstack-apps-cli/package.json b/packages/contentstack-apps-cli/package.json index 79879833c..0709f73b7 100644 --- a/packages/contentstack-apps-cli/package.json +++ b/packages/contentstack-apps-cli/package.json @@ -46,7 +46,7 @@ "axios": "^1.16.1", "chai": "^4.5.0", "dotenv": "^16.6.1", - "eslint": "^8.57.1", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.157", "eslint-config-oclif-typescript": "^3.1.14", "mocha": "^10.8.2", @@ -80,7 +80,7 @@ }, "scripts": { "build": "npm run clean && shx rm -rf lib && tsc -b", - "lint": "eslint . --ext .ts --config .eslintrc", + "lint": "eslint .", "postpack": "shx rm -f oclif.manifest.json", "posttest": "npm run lint", "prepack": "npm run build && oclif manifest && oclif readme", @@ -91,7 +91,7 @@ "test:unit:report:json": "mocha --reporter json --reporter-options output=report.json --forbid-only \"test/unit/**/*.test.ts\" && nyc --reporter=clover --extension .ts mocha --forbid-only \"test/unit/**/*.test.ts\"" }, "engines": { - "node": ">=16" + "node": ">=22.0.0" }, "bugs": "https://github.com/contentstack/cli-plugins/issues", "keywords": [ diff --git a/packages/contentstack-apps-cli/src/util/common-utils.ts b/packages/contentstack-apps-cli/src/util/common-utils.ts index f72dcb1c4..b9f68def4 100644 --- a/packages/contentstack-apps-cli/src/util/common-utils.ts +++ b/packages/contentstack-apps-cli/src/util/common-utils.ts @@ -120,7 +120,7 @@ function fetchAppInstallations( flags: FlagInput, orgUid: string, options: MarketPlaceOptions -) { +): Promise { const { marketplaceSdk } = options; const app: any = flags["app-uid"]; return marketplaceSdk @@ -218,7 +218,7 @@ function uninstallApp( orgUid: string, options: MarketPlaceOptions, installationUid: string -) { +): Promise { const { marketplaceSdk } = options; // const app: any = flags["app-uid"]; return marketplaceSdk diff --git a/packages/contentstack-asset-management/.eslintrc b/packages/contentstack-asset-management/.eslintrc deleted file mode 100644 index 4d2aef653..000000000 --- a/packages/contentstack-asset-management/.eslintrc +++ /dev/null @@ -1,54 +0,0 @@ -{ - "env": { - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "extends": [ - "oclif-typescript", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none" - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi": "off", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/no-redeclare": "off", - "eqeqeq": [ - "error", - "smart" - ], - "id-match": "error", - "no-eval": "error", - "no-var": "error", - "quotes": "off", - "indent": "off", - "camelcase": "off", - "comma-dangle": "off", - "arrow-parens": "off", - "operator-linebreak": "off", - "object-curly-spacing": "off", - "node/no-missing-import": "off", - "padding-line-between-statements": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "unicorn/no-abusive-eslint-disable": "off", - "unicorn/consistent-function-scoping": "off", - "@typescript-eslint/no-use-before-define": "off" - } -} diff --git a/packages/contentstack-asset-management/README.md b/packages/contentstack-asset-management/README.md new file mode 100644 index 000000000..955ec5e2c --- /dev/null +++ b/packages/contentstack-asset-management/README.md @@ -0,0 +1,49 @@ +# @contentstack/cli-asset-management + +Asset Management 2.0 API adapter for Contentstack CLI export and import. Used by the export and import plugins when Asset Management (AM 2.0) is enabled. To learn how to export and import content in Contentstack, refer to the [Migration guide](https://www.contentstack.com/docs/developers/cli/migration/). + +[![License](https://img.shields.io/npm/l/@contentstack/cli)](https://github.com/contentstack/cli/blob/main/LICENSE) + + +* [@contentstack/cli-asset-management](#contentstackcli-asset-management) +* [Overview](#overview) +* [Usage](#usage) +* [Exports](#exports) + + +# Overview + +This package provides: + +- **AssetManagementAdapter** – HTTP client for the Asset Management API (spaces, assets, folders, fields, asset types). +- **exportSpaceStructure** – Exports space metadata and full workspace structure (metadata, folders, assets, fields, asset types) for linked workspaces. +- **Types** – `AssetManagementExportOptions`, `LinkedWorkspace`, `IAssetManagementAdapter`, and related types for export/import integration. + +# Usage + +This package is consumed by the export and import plugins. When using the export CLI with the `--asset-management` flag (or when the host app enables AM 2.0), the export plugin calls `exportSpaceStructure` with linked workspaces and options: + +```ts +import { exportSpaceStructure } from '@contentstack/cli-asset-management'; + +await exportSpaceStructure({ + linkedWorkspaces, + exportDir, + branchName: 'main', + assetManagementUrl, + org_uid, + context, + progressManager, + progressProcessName, + updateStatus, + downloadAsset, // optional +}); +``` + +# Exports + +| Export | Description | +|--------|-------------| +| `exportSpaceStructure` | Async function to export space structure for given linked workspaces. | +| `AssetManagementAdapter` | Class to call the Asset Management API (getSpace, getWorkspaceFields, getWorkspaceAssets, etc.). | +| Types from `./types` | `AssetManagementExportOptions`, `ExportSpaceOptions`, `ChunkedJsonWriteOptions`, `LinkedWorkspace`, `SpaceResponse`, `FieldsResponse`, `AssetTypesResponse`, and related API types. | \ No newline at end of file diff --git a/packages/contentstack-asset-management/eslint.config.js b/packages/contentstack-asset-management/eslint.config.js new file mode 100644 index 000000000..1712e9ecd --- /dev/null +++ b/packages/contentstack-asset-management/eslint.config.js @@ -0,0 +1,60 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; +import oclif from 'eslint-config-oclif-typescript'; + +export default [ + ...tseslint.configs.recommended, + oclif, + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: './tsconfig.json', + }, + sourceType: 'module', + globals: { + ...globals.node, + }, + }, + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'none', + }, + ], + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/quotes': [ + 'error', + 'single', + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + semi: 'off', + '@typescript-eslint/type-annotation-spacing': 'error', + '@typescript-eslint/no-redeclare': 'off', + eqeqeq: ['error', 'smart'], + 'id-match': 'error', + 'no-eval': 'error', + 'no-var': 'error', + quotes: 'off', + indent: 'off', + camelcase: 'off', + 'comma-dangle': 'off', + 'arrow-parens': 'off', + 'operator-linebreak': 'off', + 'object-curly-spacing': 'off', + 'node/no-missing-import': 'off', + 'padding-line-between-statements': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + 'unicorn/no-abusive-eslint-disable': 'off', + 'unicorn/consistent-function-scoping': 'off', + '@typescript-eslint/no-use-before-define': 'off', + }, + }, +]; diff --git a/packages/contentstack-asset-management/package.json b/packages/contentstack-asset-management/package.json index 9b0439ca7..3cd4d5bf5 100644 --- a/packages/contentstack-asset-management/package.json +++ b/packages/contentstack-asset-management/package.json @@ -46,7 +46,7 @@ "@types/node": "^20.17.50", "@types/sinon": "^17.0.4", "chai": "^4.4.1", - "eslint": "^8.57.1", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.68", "mocha": "^10.8.2", "nyc": "^15.1.0", @@ -54,6 +54,6 @@ "sinon": "^17.0.2", "source-map-support": "^0.5.21", "ts-node": "^10.9.2", - "typescript": "^5.8.3" + "typescript": "^5.9.3" } } diff --git a/packages/contentstack-asset-management/src/import/workspaces.ts b/packages/contentstack-asset-management/src/import/workspaces.ts index 381771d30..369afe15e 100644 --- a/packages/contentstack-asset-management/src/import/workspaces.ts +++ b/packages/contentstack-asset-management/src/import/workspaces.ts @@ -66,20 +66,6 @@ export default class ImportWorkspace extends CSAssetsImportAdapter { assetsImporter.setProcessName(spaceProcessName); } - // Map source default space → existing target default space (cross-org migration). - // The caller supplies the uid of the pre-existing target default space; we upload - // source assets into it instead of creating a new space. - if (isDefault && targetDefaultSpaceUid) { - const newSpaceUid = targetDefaultSpaceUid; - const resolvedWorkspaceUid = targetDefaultWorkspaceUid ?? workspaceUid; - log.info( - `Source default space "${oldSpaceUid}" mapped to existing target default space "${newSpaceUid}".`, - this.importContext.context, - ); - const { uidMap, urlMap } = await assetsImporter.start(newSpaceUid, spaceDir); - return { oldSpaceUid, newSpaceUid, workspaceUid: resolvedWorkspaceUid, isDefault: true, uidMap, urlMap }; - } - // Reuse: target org already has a space with the same uid as the export directory. if (existingSpaceUids.has(oldSpaceUid)) { log.info( @@ -100,6 +86,20 @@ export default class ImportWorkspace extends CSAssetsImportAdapter { urlMap, }; } + + // Map source default space → existing target default space (cross-org migration). + // The caller supplies the uid of the pre-existing target default space; we upload + // source assets into it instead of creating a new space. + if (isDefault && targetDefaultSpaceUid) { + const newSpaceUid = targetDefaultSpaceUid; + const resolvedWorkspaceUid = targetDefaultWorkspaceUid ?? workspaceUid; + log.info( + `Source default space "${oldSpaceUid}" mapped to existing target default space "${newSpaceUid}".`, + this.importContext.context, + ); + const { uidMap, urlMap } = await assetsImporter.start(newSpaceUid, spaceDir); + return { oldSpaceUid, newSpaceUid, workspaceUid: resolvedWorkspaceUid, isDefault: true, uidMap, urlMap }; + } // Create new space with exact exported title log.debug(`Creating space "${exportedTitle}" (old uid: ${oldSpaceUid})`, this.importContext.context); diff --git a/packages/contentstack-audit/.eslintignore b/packages/contentstack-audit/.eslintignore deleted file mode 100644 index 9b1c8b133..000000000 --- a/packages/contentstack-audit/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/dist diff --git a/packages/contentstack-audit/.eslintrc b/packages/contentstack-audit/.eslintrc deleted file mode 100644 index 7b846193c..000000000 --- a/packages/contentstack-audit/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": [ - "oclif", - "oclif-typescript" - ] -} diff --git a/packages/contentstack-audit/eslint.config.js b/packages/contentstack-audit/eslint.config.js new file mode 100644 index 000000000..9b1d96ae5 --- /dev/null +++ b/packages/contentstack-audit/eslint.config.js @@ -0,0 +1,12 @@ +import oclif from 'eslint-config-oclif'; +import oclifTypescript from 'eslint-config-oclif-typescript'; + +export default [ + oclif, + oclifTypescript, + { + ignores: [ + 'dist/**/*', + ], + }, +]; diff --git a/packages/contentstack-audit/package.json b/packages/contentstack-audit/package.json index 7da2cc83c..d9d2c563f 100644 --- a/packages/contentstack-audit/package.json +++ b/packages/contentstack-audit/package.json @@ -34,7 +34,7 @@ "@types/mocha": "^10.0.10", "@types/node": "^20.17.50", "chai": "^4.5.0", - "eslint": "^9.26.0", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.62", "eslint-config-oclif-typescript": "^3.1.14", "mocha": "^10.8.2", @@ -59,7 +59,7 @@ }, "scripts": { "build": "pnpm compile && oclif manifest && oclif readme", - "lint": "eslint . --ext .ts --config .eslintrc", + "lint": "eslint .", "postpack": "shx rm -f oclif.manifest.json", "posttest": "npm run lint", "compile": "tsc -b tsconfig.json", @@ -71,7 +71,7 @@ "test:unit": "mocha --timeout 10000 --forbid-only --file test/unit/logger-config.js \"test/unit/**/*.test.ts\"" }, "engines": { - "node": ">=16" + "node": ">=22.0.0" }, "bugs": "https://github.com/contentstack/cli/issues", "keywords": [ diff --git a/packages/contentstack-bootstrap/.eslintrc b/packages/contentstack-bootstrap/.eslintrc deleted file mode 100644 index 7b1ccd7f1..000000000 --- a/packages/contentstack-bootstrap/.eslintrc +++ /dev/null @@ -1,41 +0,0 @@ -{ - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:mocha/recommended" - ], - "parser": "@typescript-eslint/parser", - "plugins": [ - "@typescript-eslint", - "mocha" - ], - "rules": { - "unicorn/no-abusive-eslint-disable": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "indent": "off", - "object-curly-spacing": "off", - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], - "mocha/no-async-describe": "off", - "mocha/no-identical-title": "off", - "mocha/no-mocha-arrows": "off", - "mocha/no-setup-in-describe": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-var-requires": "off", - "prefer-const": "error", - "no-fallthrough": "error", - "no-prototype-builtins": "off" - }, - "env": { - "node": true, - "mocha": true - }, - "overrides": [ - { - "files": ["*.d.ts"], - "rules": { - "@typescript-eslint/no-explicit-any": "off" - } - } - ] -} \ No newline at end of file diff --git a/packages/contentstack-bootstrap/eslint.config.js b/packages/contentstack-bootstrap/eslint.config.js new file mode 100644 index 000000000..708e85dd4 --- /dev/null +++ b/packages/contentstack-bootstrap/eslint.config.js @@ -0,0 +1,53 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; +import mocha from 'eslint-plugin-mocha'; + +export default [ + ...tseslint.configs.recommended, + + { + languageOptions: { + parser: tseslint.parser, + globals: { + ...globals.node, + ...globals.mocha, + }, + }, + + plugins: { + '@typescript-eslint': tseslint.plugin, + mocha: mocha, + }, + + rules: { + 'unicorn/no-abusive-eslint-disable': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + indent: 'off', + 'object-curly-spacing': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + }, + ], + 'mocha/no-async-describe': 'off', + 'mocha/no-identical-title': 'off', + 'mocha/no-mocha-arrows': 'off', + 'mocha/no-setup-in-describe': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'prefer-const': 'error', + 'no-fallthrough': 'error', + 'no-prototype-builtins': 'off', + }, + }, + + { + files: ['*.d.ts'], + + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + }, +]; diff --git a/packages/contentstack-bootstrap/package.json b/packages/contentstack-bootstrap/package.json index bf13ad528..cd98d4837 100644 --- a/packages/contentstack-bootstrap/package.json +++ b/packages/contentstack-bootstrap/package.json @@ -23,7 +23,7 @@ "@oclif/core": "^4.11.4", "inquirer": "12.11.1", "mkdirp": "^2.1.6", - "tar": "^7.5.15" + "tar": "^7.5.16" }, "devDependencies": { "@oclif/test": "^4.1.18", @@ -32,7 +32,7 @@ "@types/node": "^18.11.9", "@types/tar": "^6.1.13", "chai": "^4.5.0", - "eslint": "^9.26.0", + "eslint": "^10.5.0", "mocha": "10.8.2", "nyc": "^15.1.0", "oclif": "^4.23.8", @@ -41,7 +41,7 @@ "typescript": "^5.9.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=22.0.0" }, "files": [ "/lib", diff --git a/packages/contentstack-branches/.eslintignore b/packages/contentstack-branches/.eslintignore deleted file mode 100644 index 7f0bb8ff2..000000000 --- a/packages/contentstack-branches/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -# Build files -/lib -/test -/types \ No newline at end of file diff --git a/packages/contentstack-branches/.eslintrc b/packages/contentstack-branches/.eslintrc deleted file mode 100644 index cb46553b0..000000000 --- a/packages/contentstack-branches/.eslintrc +++ /dev/null @@ -1,55 +0,0 @@ -{ - "env": { - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "extends": [ - // "oclif", - "oclif-typescript", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none" - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi": "off", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/no-redeclare": "off", - "eqeqeq": [ - "error", - "smart" - ], - "id-match": "error", - "no-eval": "error", - "no-var": "error", - "quotes": "off", - "indent": "off", - "camelcase": "off", - "comma-dangle": "off", - "arrow-parens": "off", - "operator-linebreak": "off", - "object-curly-spacing": "off", - "node/no-missing-import": "off", - "padding-line-between-statements": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "unicorn/no-abusive-eslint-disable": "off", - "unicorn/consistent-function-scoping": "off", - "@typescript-eslint/no-use-before-define": "off" - } -} \ No newline at end of file diff --git a/packages/contentstack-branches/eslint.config.js b/packages/contentstack-branches/eslint.config.js new file mode 100644 index 000000000..fb55b32e6 --- /dev/null +++ b/packages/contentstack-branches/eslint.config.js @@ -0,0 +1,72 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; +import oclif from 'eslint-config-oclif-typescript'; + +export default [ + ...tseslint.configs.recommended, + + oclif, + + { + ignores: [ + 'lib/**/*', + 'test/**/*', + 'types/**/*', + ], + }, + + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: './tsconfig.json', + }, + sourceType: 'module', + globals: { + ...globals.node, + }, + }, + + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'none', + }, + ], + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/quotes': [ + 'error', + 'single', + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + semi: 'off', + '@typescript-eslint/type-annotation-spacing': 'error', + '@typescript-eslint/no-redeclare': 'off', + eqeqeq: ['error', 'smart'], + 'id-match': 'error', + 'no-eval': 'error', + 'no-var': 'error', + quotes: 'off', + indent: 'off', + camelcase: 'off', + 'comma-dangle': 'off', + 'arrow-parens': 'off', + 'operator-linebreak': 'off', + 'object-curly-spacing': 'off', + 'node/no-missing-import': 'off', + 'padding-line-between-statements': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + 'unicorn/no-abusive-eslint-disable': 'off', + 'unicorn/consistent-function-scoping': 'off', + '@typescript-eslint/no-use-before-define': 'off', + }, + }, +]; diff --git a/packages/contentstack-branches/package.json b/packages/contentstack-branches/package.json index 07fca6ca4..104ae21be 100644 --- a/packages/contentstack-branches/package.json +++ b/packages/contentstack-branches/package.json @@ -16,7 +16,7 @@ "chai": "^4.5.0", "dotenv": "^16.6.1", "dotenv-expand": "^9.0.0", - "eslint": "^9.26.0", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.62", "mocha": "10.8.2", "nyc": "^15.1.0", @@ -43,7 +43,7 @@ "test:unit:report": "nyc --extension .ts mocha --forbid-only \"test/unit/**/*.test.ts\"" }, "engines": { - "node": ">=14.0.0" + "node": ">=22.0.0" }, "files": [ "/lib", diff --git a/packages/contentstack-bulk-operations/package.json b/packages/contentstack-bulk-operations/package.json index e983c4784..f1a8a15bb 100644 --- a/packages/contentstack-bulk-operations/package.json +++ b/packages/contentstack-bulk-operations/package.json @@ -40,7 +40,7 @@ "chai": "^6.2.2", "conventional-changelog-cli": "^5.0.0", "dotenv": "^17.4.2", - "eslint": "^10.3.0", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.162", "eslint-config-oclif-typescript": "^3.1.14", "eslint-config-prettier": "^10.1.8", @@ -94,7 +94,7 @@ "clean": "rm -rf ./lib tsconfig.tsbuildinfo oclif.manifest.json" }, "engines": { - "node": ">=20.19.0" + "node": ">=22.0.0" }, "bugs": "https://github.com/contentstack/cli-plugins/issues", "keywords": [ diff --git a/packages/contentstack-cli-cm-regex-validate/.eslintignore b/packages/contentstack-cli-cm-regex-validate/.eslintignore deleted file mode 100644 index 502167fa0..000000000 --- a/packages/contentstack-cli-cm-regex-validate/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/lib diff --git a/packages/contentstack-cli-cm-regex-validate/.eslintrc b/packages/contentstack-cli-cm-regex-validate/.eslintrc deleted file mode 100644 index d2b157f5a..000000000 --- a/packages/contentstack-cli-cm-regex-validate/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": ["eslint-config-oclif", "eslint-config-oclif-typescript"], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "rules": { - "unicorn/prefer-module": "off", - "@typescript-eslint/no-require-imports": "off", - "unicorn/no-array-for-each": "off", - "camelcase": "off", - "@typescript-eslint/no-unused-vars": "error", - "quotes": ["error", "single", { "avoidEscape": true }], - "semi": ["error", "never"], - "unicorn/import-style": "off", - "unicorn/prefer-node-protocol": "off", - "unicorn/consistent-function-scoping": "off", - "@typescript-eslint/ban-ts-comment": "off", - "object-curly-spacing": ["error", "never"], - "node/no-missing-import": "off" - } -} diff --git a/packages/contentstack-cli-cm-regex-validate/eslint.config.js b/packages/contentstack-cli-cm-regex-validate/eslint.config.js new file mode 100644 index 000000000..74468c41b --- /dev/null +++ b/packages/contentstack-cli-cm-regex-validate/eslint.config.js @@ -0,0 +1,51 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; +import oclif from 'eslint-config-oclif'; +import oclifTypescript from 'eslint-config-oclif-typescript'; + +export default [ + ...tseslint.configs.recommended, + + oclif, + + oclifTypescript, + + { + ignores: [ + 'lib/**/*', + ], + }, + + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + globals: { + ...globals.node, + }, + }, + + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + + rules: { + 'unicorn/prefer-module': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'unicorn/no-array-for-each': 'off', + camelcase: 'off', + '@typescript-eslint/no-unused-vars': 'error', + quotes: ['error', 'single', { avoidEscape: true }], + semi: ['error', 'never'], + 'unicorn/import-style': 'off', + 'unicorn/prefer-node-protocol': 'off', + 'unicorn/consistent-function-scoping': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'object-curly-spacing': ['error', 'never'], + 'node/no-missing-import': 'off', + }, + }, +]; diff --git a/packages/contentstack-cli-cm-regex-validate/package.json b/packages/contentstack-cli-cm-regex-validate/package.json index a0f2fc13b..5b348947e 100644 --- a/packages/contentstack-cli-cm-regex-validate/package.json +++ b/packages/contentstack-cli-cm-regex-validate/package.json @@ -25,7 +25,7 @@ "@types/node": "^18.19.130", "@types/safe-regex": "^1.1.6", "chai": "^4.5.0", - "eslint": "^9.26.0", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.62", "eslint-config-oclif-typescript": "^3.1.14", "globby": "^11.1.0", @@ -38,7 +38,7 @@ "typescript": "^5.9.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=22.0.0" }, "files": [ "/bin", diff --git a/packages/contentstack-cli-tsgen/.eslintrc.js b/packages/contentstack-cli-tsgen/.eslintrc.js deleted file mode 100644 index 63bf82762..000000000 --- a/packages/contentstack-cli-tsgen/.eslintrc.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: 2020, - sourceType: "module", - }, - plugins: ["@typescript-eslint"], - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - rules: { - "unicorn/prefer-module": "off", - "unicorn/no-abusive-eslint-disable": "off", - "@typescript-eslint/no-use-before-define": "off", - "node/no-missing-import": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-require-imports": "off", - "no-useless-escape": "off", - }, -}; diff --git a/packages/contentstack-cli-tsgen/eslint.config.js b/packages/contentstack-cli-tsgen/eslint.config.js new file mode 100644 index 000000000..f67ee11b4 --- /dev/null +++ b/packages/contentstack-cli-tsgen/eslint.config.js @@ -0,0 +1,31 @@ +import tseslint from 'typescript-eslint'; + +export default [ + { + ignores: [ + 'lib/**/*', + ], + }, + ...tseslint.configs.recommended, + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + }, + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + rules: { + 'unicorn/prefer-module': 'off', + 'unicorn/no-abusive-eslint-disable': 'off', + '@typescript-eslint/no-use-before-define': 'off', + 'node/no-missing-import': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'no-useless-escape': 'off', + }, + }, +]; diff --git a/packages/contentstack-cli-tsgen/package.json b/packages/contentstack-cli-tsgen/package.json index 940a23f99..2183e8820 100644 --- a/packages/contentstack-cli-tsgen/package.json +++ b/packages/contentstack-cli-tsgen/package.json @@ -17,7 +17,7 @@ "@typescript-eslint/eslint-plugin": "^8.59.3", "@typescript-eslint/parser": "^8.59.3", "dotenv": "^16.6.1", - "eslint": "^8.57.1", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.165", "eslint-config-oclif-typescript": "^3.1.14", "jest": "^29.7.0", @@ -26,7 +26,7 @@ "typescript": "^5.9.3" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "files": [ "/lib", @@ -58,9 +58,9 @@ "build": "pnpm compile && oclif manifest && oclif readme", "clean": "rm -rf ./lib ./node_modules tsconfig.tsbuildinfo", "compile": "tsc -b tsconfig.json", - "lint": "eslint . --ext .ts --config .eslintrc.js", + "lint": "eslint .", "postpack": "rm -f oclif.manifest.json", - "posttest": "eslint . --ext .ts --config .eslintrc.js --fix", + "posttest": "eslint . --fix", "prepack": "pnpm compile && oclif manifest && oclif readme", "test": "jest --testPathPattern=tests", "test:integration": "jest --testPathPattern=tests/integration", diff --git a/packages/contentstack-clone/.eslintrc b/packages/contentstack-clone/.eslintrc deleted file mode 100644 index 6a9dd0894..000000000 --- a/packages/contentstack-clone/.eslintrc +++ /dev/null @@ -1,54 +0,0 @@ -{ - "env": { - "node": true, - "es2021": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "extends": [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking" - ], - "ignorePatterns": [ - "lib/**/*", - "test/**/*", - "node_modules/**/*", - "*.js" - ], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none", - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/await-thenable": "error", - "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], - "semi": "off", - "@typescript-eslint/no-redeclare": "off", - "eqeqeq": ["error", "smart"], - "id-match": "error", - "no-eval": "error", - "no-var": "error", - "@typescript-eslint/no-explicit-any": "warn", - "@typescript-eslint/no-require-imports": "off", - "prefer-const": "error", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/require-await": "off" - } -} diff --git a/packages/contentstack-clone/eslint.config.js b/packages/contentstack-clone/eslint.config.js new file mode 100644 index 000000000..79a076192 --- /dev/null +++ b/packages/contentstack-clone/eslint.config.js @@ -0,0 +1,64 @@ +import tseslint from 'typescript-eslint'; +import globals from 'globals'; + +export default [ + ...tseslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + + { + ignores: [ + 'lib/**/*', + 'test/**/*', + 'node_modules/**/*', + '*.js', + ], + }, + + { + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: './tsconfig.json', + }, + sourceType: 'module', + globals: { + ...globals.node, + }, + }, + + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'none', + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-misused-promises': 'error', + '@typescript-eslint/await-thenable': 'error', + quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }], + semi: 'off', + '@typescript-eslint/no-redeclare': 'off', + eqeqeq: ['error', 'smart'], + 'id-match': 'error', + 'no-eval': 'error', + 'no-var': 'error', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-require-imports': 'off', + 'prefer-const': 'error', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/require-await': 'off', + }, + }, +]; diff --git a/packages/contentstack-clone/package.json b/packages/contentstack-clone/package.json index 26ad06779..b73ad184f 100644 --- a/packages/contentstack-clone/package.json +++ b/packages/contentstack-clone/package.json @@ -27,7 +27,7 @@ "@types/sinon": "^21.0.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "chai": "^4.5.0", - "eslint": "^9.26.0", + "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.62", "mocha": "^10.8.2", "nyc": "^15.1.0", @@ -37,7 +37,7 @@ "typescript": "^5.9.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=22.0.0" }, "files": [ "/bin", diff --git a/packages/contentstack-content-type/.eslintignore b/packages/contentstack-content-type/.eslintignore deleted file mode 100644 index dc555529d..000000000 --- a/packages/contentstack-content-type/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/lib \ No newline at end of file diff --git a/packages/contentstack-content-type/.eslintrc b/packages/contentstack-content-type/.eslintrc deleted file mode 100644 index dffeb7eca..000000000 --- a/packages/contentstack-content-type/.eslintrc +++ /dev/null @@ -1,51 +0,0 @@ -{ - "extends": [ - // "oclif", - "oclif-typescript", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none" - } - ], - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi": "off", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/no-redeclare": "off", - "eqeqeq": [ - "error", - "smart" - ], - "id-match": "error", - "no-eval": "error", - "no-var": "error", - "quotes": "off", - "indent": "off", - "camelcase": "off", - "comma-dangle": "off", - "arrow-parens": "off", - "operator-linebreak": "off", - "object-curly-spacing": "off", - "node/no-missing-import": "off", - "padding-line-between-statements": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "unicorn/no-abusive-eslint-disable": "off", - "unicorn/consistent-function-scoping": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/camelcase": "off", - "no-process-exit":"off", - "unicorn/no-process-exit": "off", - "@typescript-eslint/no-var-requires": "off" - } -} \ No newline at end of file diff --git a/packages/contentstack-content-type/README.md b/packages/contentstack-content-type/README.md index ddde8811b..8e5615c93 100644 --- a/packages/contentstack-content-type/README.md +++ b/packages/contentstack-content-type/README.md @@ -54,5 +54,181 @@ $ csdx content-type:details -a "management token" -c "content type" --no-path # Commands +* [`csdx content-type:audit`](#csdx-content-typeaudit) +* [`csdx content-type:compare`](#csdx-content-typecompare) +* [`csdx content-type:compare-remote`](#csdx-content-typecompare-remote) +* [`csdx content-type:details`](#csdx-content-typedetails) +* [`csdx content-type:diagram`](#csdx-content-typediagram) +* [`csdx content-type:list`](#csdx-content-typelist) +## `csdx content-type:audit` + +Display recent changes to a Content Type + +``` +USAGE + $ csdx content-type:audit -c [-s | -a | -a ] [-k | | ] + +FLAGS + -a, --alias= Alias of the management token + -a, --token-alias= Management token alias + -c, --content-type= (required) Content Type UID + -k, --stack-api-key= Stack API Key + -s, --stack= Stack UID + +DESCRIPTION + Display recent changes to a Content Type + +EXAMPLES + $ csdx content-type:audit --stack-api-key "xxxxxxxxxxxxxxxxxxx" --content-type "home_page" + + $ csdx content-type:audit --alias "management token" --content-type "home_page" +``` + +_See code: [src/commands/content-type/audit.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/audit.ts)_ + +## `csdx content-type:compare` + +Compare two Content Type versions + +``` +USAGE + $ csdx content-type:compare -c [-s | -a ] [-k | ] [-a ] [-l -r ] + +FLAGS + -a, --alias= Alias of the management token + -a, --token-alias= Management token alias + -c, --content-type= (required) Content Type UID + -k, --stack-api-key= Stack API Key + -l, --left= Content Type version, i.e. prev version + -r, --right= Content Type version, i.e. later version + -s, --stack= Stack UID + +DESCRIPTION + Compare two Content Type versions + +EXAMPLES + $ csdx content-type:compare --stack-api-key "xxxxxxxxxxxxxxxxxxx" --content-type "home_page" + + $ csdx content-type:compare --stack-api-key "xxxxxxxxxxxxxxxxxxx" --content-type "home_page" --left # --right # + + $ csdx content-type:compare --alias "management token" --content-type "home_page" --left # --right # +``` + +_See code: [src/commands/content-type/compare.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare.ts)_ + +## `csdx content-type:compare-remote` + +compare two Content Types on different Stacks + +``` +USAGE + $ csdx content-type:compare-remote (-o -r ) -c + +FLAGS + -c, --content-type= (required) Content Type UID + -o, --origin-stack= (required) Origin Stack API Key + -r, --remote-stack= (required) Remote Stack API Key + +DESCRIPTION + compare two Content Types on different Stacks + +EXAMPLES + $ csdx content-type:compare-remote --origin-stack "xxxxxxxxxxxxxxxxxxx" --remote-stack "xxxxxxxxxxxxxxxxxxx" -content-type "home_page" +``` + +_See code: [src/commands/content-type/compare-remote.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare-remote.ts)_ + +## `csdx content-type:details` + +Display Content Type details + +``` +USAGE + $ csdx content-type:details -c [-s | -a ] [-k | ] [-a ] [-p] + +FLAGS + -a, --alias= Alias of the management token + -a, --token-alias= Management token alias + -c, --content-type= (required) Content Type UID + -k, --stack-api-key= Stack API Key + -p, --[no-]path show path column + -s, --stack= Stack UID + +DESCRIPTION + Display Content Type details + +EXAMPLES + $ csdx content-type:details --stack-api-key "xxxxxxxxxxxxxxxxxxx" --content-type "home_page" + + $ csdx content-type:details --alias "management token" --content-type "home_page" + + $ csdx content-type:details --alias "management token" --content-type "home_page" --no-path +``` + +_See code: [src/commands/content-type/details.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/details.ts)_ + +## `csdx content-type:diagram` + +Create a visual diagram of a Stack's Content Types + +``` +USAGE + $ csdx content-type:diagram -o -d portrait|landscape -t svg|dot [-s | -a | -a ] [-k + | | ] + +FLAGS + -a, --alias= Alias of the management token + -a, --token-alias= Management token alias + -d, --direction=