diff --git a/.cursor/rules/README.md b/.cursor/rules/README.md index 4506d95bb..6c4c0e333 100644 --- a/.cursor/rules/README.md +++ b/.cursor/rules/README.md @@ -51,6 +51,7 @@ This is a **CLI plugins** monorepo with plugin packages under `packages/`, inclu - `contentstack-seed` - Seed stacks with generated data - `contentstack-variants` - Manage content variants - `contentstack-apps-cli` - Developer Hub apps (`app:*` commands; npm `@contentstack/apps-cli`) +- `contentstack-content-type` - Content Type introspection (`content-type:*` commands; npm `contentstack-cli-content-type`; Jest tests) - `contentstack-cli-tsgen` - TypeScript typings (`csdx tsgen`; npm `contentstack-cli-tsgen`; Jest integration tests) All plugins depend on: diff --git a/.github/config/release.json b/.github/config/release.json index 67d8f4d33..8bb034f84 100755 --- a/.github/config/release.json +++ b/.github/config/release.json @@ -20,6 +20,7 @@ "launch": false, "branches": false, "apps-cli": false, + "content-type": false, "regex-validate": false, "tsgen": false, "bulk-operations": false, diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 2d13264aa..81d5f1c19 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -159,6 +159,14 @@ jobs: package: ./packages/contentstack-query-export/package.json tag: latest + # Content Type + - name: Publishing content-type (Production) + uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/contentstack-content-type/package.json + tag: latest + # Regex Validate - name: Publishing regex-validate (Production) uses: JS-DevTools/npm-publish@v3 diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 1c1439a10..ea6eb86b2 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -70,6 +70,10 @@ jobs: working-directory: ./packages/contentstack-apps-cli run: npm run test:unit:report:json + - name: Run tests for Contentstack Content Type plugin + working-directory: ./packages/contentstack-content-type + run: npm run test:unit + - name: Run tests for Contentstack Regex Validate plugin working-directory: ./packages/contentstack-cli-cm-regex-validate run: npm run test:unit diff --git a/.talismanrc b/.talismanrc index 80b4a2d00..abd4b976c 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,98 +1,96 @@ fileignoreconfig: - - filename: pnpm-lock.yaml - checksum: 607e6b24e94919ad07de1d4716b24c5b818dd1a72f3b35ad2f0a40b32b001419 - - filename: skills/framework/SKILL.md - checksum: c5746de64b1e7d1df051c4337de5eb32de6a4c85c7297aa408838d304bb2d771 - - filename: packages/contentstack-cli-cm-regex-validate/messages/index.json - checksum: 044b311bde624dcc3c12434174d6027dbb6b62eefdfae120570a1748f806c60c - - filename: packages/contentstack-cli-cm-regex-validate/skills/code-review/SKILL.md - checksum: b92ea1c8e2f901c9e1e60f6ef6986d348a40a7869c236e3c1f3ca53b553dbb8e - - filename: packages/contentstack-cli-cm-regex-validate/skills/contentstack-cli/SKILL.md - checksum: 9420a516ba6046b05748683c90e3817d091cef76c46e029cb3745d6c0c350838 - - filename: packages/contentstack-cli-cm-regex-validate/skills/dev-workflow/SKILL.md - checksum: b423dd35d0f7f0f25315e2a30198669b50db350f0ab2f917a1d3c4fbb0af0534 - - filename: packages/contentstack-cli-cm-regex-validate/src/utils/connect-stack.ts - checksum: c77c7c25efc6d043b26e3dd0a516e22ac50142fa9fa5ff3a53a7c9fb8f24ebd6 - - filename: packages/contentstack-cli-cm-regex-validate/test/utils/connect-stack.test.ts - checksum: 8fcd1dc2770a2a3f55ba462b7ffd3fc2e3cf45342c63e5b6dc5c1db4c2bd9738 - filename: packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json checksum: a2784a3cb21780434958478d478dcb91d2d9a3a8025567d90fe8d74e9141b052 - filename: packages/contentstack-migrate-rte/test/dummy/entriesResponse.json checksum: 691f3dcfbbcf69fd21e109a0d7003bdb500af2d0253bb7d7e8a0636d8f2a58f4 - - filename: packages/contentstack-bulk-operations/src/core/operation-executor.ts - checksum: 46295f495f007ad291787133936c5af3c76838d72f2be0de9c235bb644d6f905 - - filename: packages/contentstack-bulk-operations/src/utils/interactive.ts - checksum: ba4fdd6f17c7d43cae639158f82dea3065ba8a368ddce8c476bfe49a6945e5c1 - - filename: packages/contentstack-bulk-operations/src/core/rate-limiter.ts - checksum: 81e3d624166ab34a589e3e8527b9e57ebc7e7f4374efd0483b1df0dd11788b68 - - filename: packages/contentstack-bulk-operations/src/base-bulk-command.ts - checksum: 34907f0e00c40096cbe517b680a24fdf57caac351e45bc44b96e41987e619b67 - - filename: packages/contentstack-bulk-operations/src/interfaces/index.ts - checksum: 0ff6bbc372758a20783f36bd391ba9d500530433fde472a1aacaf54f6b4a1688 - - filename: packages/contentstack-bulk-operations/README.md - checksum: 169110e7c6159632f19dc16e17dcb5bac22e5d6880339b35ba076a2fe0d75266 - - filename: packages/contentstack-bulk-operations/eslint.config.js - checksum: 0d93d7f660fe4cd6d62348c85ac10bf7c66018ea0b8e3e6d5a53419433f15867 - - filename: packages/contentstack-bulk-operations/src/utils/revert-retry-handler.ts - checksum: 76899098d74de1dd20f1b08401c65f23b2bec584c051388e63f70f3d24a6d1a4 - - filename: packages/contentstack-bulk-operations/src/messages/index.ts - checksum: 2d904462af6dc3ddc00ae6bb4433c846500ddfecee5a9e1fb1c236bd598a2ee1 + - filename: pnpm-lock.yaml + checksum: e0fb4541c1f31354c8899eba61bc579942a4c1057658973b4691c2890c98ff93 - filename: packages/contentstack-bulk-operations/src/utils/bulk-publish-url-generator.ts checksum: 052d811adb5da9bac8c70e5b3dc4ddf700d5aea274dd2aa90a2df374118fbd26 - - filename: packages/contentstack-bulk-operations/src/utils/batch-queue-handler.ts - checksum: d1d031242b99f5c738e2f4587ca2f5f3e96373e479ebaf4d93b2f98152943593 - filename: packages/contentstack-bulk-operations/src/utils/client.ts checksum: efdada21291db6d66e3114b7408163dee4cafe6ddb3904f02aa67140a1a89bb6 - filename: packages/contentstack-bulk-operations/test/unit/core/index.test.ts checksum: 0d789258f5a9664e8a7dc5f5b23da846d0eaf8c52638ff20fb1f26104d3f9f8d - - filename: packages/contentstack-bulk-operations/src/utils/config-builder.ts - checksum: a7b5259ad719b8c5929f9fea3783bdc92610dc2549426204c1bb6813e7e1112a + - filename: packages/contentstack-migrate-rte/README.md + checksum: 3810817d905405de86814af35fc0f0a6712cacd70f43223869b4f0599b6e579c + - filename: packages/contentstack-bulk-operations/test/unit/messages/index.test.ts + checksum: e86e76db4f4afc899ae2a4742627a71a7d227a7139014361b9d83de6154b3c7a - filename: packages/contentstack-bulk-operations/test/unit/base-bulk-command.test.ts checksum: 18684a596707865e671f1ee57b4819cb3f4b4f2633d6c49f7f4b6ce09391359f - - filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-entries.test.ts - checksum: 845512e660813a6d7d96efd89dcff6eba4591a3f9ff371dc9b1aad38921e18a6 + - filename: packages/contentstack-bulk-operations/src/base-bulk-command.ts + checksum: 34907f0e00c40096cbe517b680a24fdf57caac351e45bc44b96e41987e619b67 + - filename: packages/contentstack-bulk-operations/test/unit/services/index.test.ts + checksum: aae62ba072551bedf869ec7b1f6bf90238bc039336f37e7c583da8ba0637f9be + - filename: packages/contentstack-bulk-operations/test/unit/utils/bulk-operation-log-handler.test.ts + checksum: cec7ba35157c6516d67931d41deb57b7a156d9fc05dbab93ca5116e89b95c820 + - filename: packages/contentstack-bulk-operations/test/unit/utils/client.test.ts + checksum: 178611b1f153b46a0020da22cc18293d5bd9c539ec2e54557fd8c1a3c2e796b3 + - filename: packages/contentstack-bulk-operations/test/unit/services/taxonomy-service.test.ts + checksum: 33af8ee198158dd92916d76207e172b5316864d063a6929526ca259b459ec79a + - filename: packages/contentstack-cli-tsgen/src/commands/tsgen.ts + checksum: 054ea78f765edca62c785714cf8962df4fb91529c0851439d1ed61e963467408 + - filename: packages/contentstack-cli-cm-regex-validate/messages/index.json + checksum: 044b311bde624dcc3c12434174d6027dbb6b62eefdfae120570a1748f806c60c + - filename: packages/contentstack-cli-tsgen/AGENTS.md + checksum: 75b4f1414b547d0bd83df5ed4fb80020acc0ed849619bed2639491b565be7a1b + - filename: packages/contentstack-bulk-operations/eslint.config.js + checksum: 0d93d7f660fe4cd6d62348c85ac10bf7c66018ea0b8e3e6d5a53419433f15867 + - filename: packages/contentstack-cli-cm-regex-validate/test/utils/connect-stack.test.ts + checksum: 8fcd1dc2770a2a3f55ba462b7ffd3fc2e3cf45342c63e5b6dc5c1db4c2bd9738 + - filename: packages/contentstack-bulk-operations/test/unit/utils/validators.test.ts + checksum: 69cf394584e325b972d6825879de7c31b9dd1bd50b0bb057aecb739258ac0317 - filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-assets.test.ts checksum: c099c628c7ae1a40a9ca5580de0afa8309a611b2dff7837b10bb8f70eb92f8b3 - - filename: packages/contentstack-bulk-operations/test/unit/utils/config-builder.test.ts - checksum: d46757d3bb98d76845e83d4585f269b62b1fa9cb5bee3215b88fed38fd1dbb53 - filename: packages/contentstack-bulk-operations/test/unit/core/operation-executor.test.ts checksum: 97f0ddd4d547f37a8d93650aa1e8af4ef4dbce343dd51853e34bbde6107cd725 - - filename: packages/contentstack-bulk-operations/test/unit/messages/index.test.ts - checksum: e86e76db4f4afc899ae2a4742627a71a7d227a7139014361b9d83de6154b3c7a - - filename: packages/contentstack-migrate-rte/README.md - checksum: 3810817d905405de86814af35fc0f0a6712cacd70f43223869b4f0599b6e579c + - filename: packages/contentstack-cli-tsgen/src/lib/helper.ts + checksum: a7ead0030ead9d15b6b6e9623f61e7def77b00325e3988f0e3d73a145180dedc + - filename: packages/contentstack-migrate-rte/test/utils/index.js + checksum: bc2a509a86174aecbaf0bfc44d6ad3afabe57ef871ec91b796d498e00177e3f0 + - filename: packages/contentstack-cli-cm-regex-validate/skills/code-review/SKILL.md + checksum: b92ea1c8e2f901c9e1e60f6ef6986d348a40a7869c236e3c1f3ca53b553dbb8e + - filename: packages/contentstack-migrate-rte/test/commands/json-migration.test.js + checksum: 56e10f1e0d2794fa13bcf5a6bb3e868b28277df1762fb3df0a8a82ad44f8045b - filename: packages/contentstack-bulk-operations/test/unit/utils/interactive.test.ts checksum: 3ee0ff5a74929346bfe997aeb977b4e93d398ea63892efc5f85e0b51a21074f6 - - filename: packages/contentstack-bulk-operations/test/unit/utils/operation-confirmation.test.ts - checksum: 043185e56361ffae2116a2af5a4da16986816ad054fd94f189269e5b6150609e + - filename: packages/contentstack-bulk-operations/src/core/operation-executor.ts + checksum: 46295f495f007ad291787133936c5af3c76838d72f2be0de9c235bb644d6f905 + - filename: packages/contentstack-bulk-operations/src/utils/batch-queue-handler.ts + checksum: d1d031242b99f5c738e2f4587ca2f5f3e96373e479ebaf4d93b2f98152943593 + - filename: packages/contentstack-bulk-operations/src/messages/index.ts + checksum: 2d904462af6dc3ddc00ae6bb4433c846500ddfecee5a9e1fb1c236bd598a2ee1 - filename: packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js checksum: a069c50d5152022a0957d5f597158e2d8c74803b3d24ff6bbbe3b09f0e9053e2 - - filename: packages/contentstack-bulk-operations/test/unit/services/index.test.ts - checksum: aae62ba072551bedf869ec7b1f6bf90238bc039336f37e7c583da8ba0637f9be - - filename: packages/contentstack-bulk-operations/test/unit/services/taxonomy-service.test.ts - checksum: 33af8ee198158dd92916d76207e172b5316864d063a6929526ca259b459ec79a + - filename: packages/contentstack-bulk-operations/test/unit/utils/config-builder.test.ts + checksum: d46757d3bb98d76845e83d4585f269b62b1fa9cb5bee3215b88fed38fd1dbb53 + - filename: packages/contentstack-bulk-operations/src/utils/revert-retry-handler.ts + checksum: 76899098d74de1dd20f1b08401c65f23b2bec584c051388e63f70f3d24a6d1a4 + - filename: packages/contentstack-bulk-operations/src/utils/interactive.ts + checksum: ba4fdd6f17c7d43cae639158f82dea3065ba8a368ddce8c476bfe49a6945e5c1 - filename: packages/contentstack-bulk-operations/test/unit/utils/taxonomy-interactive-select.test.ts checksum: 34a085702d01d7e16e1507ea1e434b374c2cba5dd884aad5996c5484412897c0 - - filename: packages/contentstack-migrate-rte/src/lib/util/index.js - checksum: 7d85f342c7fd7875713cebfae83f68d8592cc732a15cca48ddecbeae818cb4c5 + - filename: packages/contentstack-bulk-operations/src/core/rate-limiter.ts + checksum: 81e3d624166ab34a589e3e8527b9e57ebc7e7f4374efd0483b1df0dd11788b68 + - filename: packages/contentstack-bulk-operations/src/interfaces/index.ts + checksum: 0ff6bbc372758a20783f36bd391ba9d500530433fde472a1aacaf54f6b4a1688 + - filename: packages/contentstack-bulk-operations/test/unit/utils/operation-confirmation.test.ts + checksum: 043185e56361ffae2116a2af5a4da16986816ad054fd94f189269e5b6150609e + - filename: packages/contentstack-cli-cm-regex-validate/skills/contentstack-cli/SKILL.md + checksum: 9420a516ba6046b05748683c90e3817d091cef76c46e029cb3745d6c0c350838 + - filename: packages/contentstack-cli-cm-regex-validate/skills/dev-workflow/SKILL.md + checksum: b423dd35d0f7f0f25315e2a30198669b50db350f0ab2f917a1d3c4fbb0af0534 + - filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-entries.test.ts + checksum: 845512e660813a6d7d96efd89dcff6eba4591a3f9ff371dc9b1aad38921e18a6 - filename: packages/contentstack-bulk-operations/test/unit/utils/revert-retry-handler.test.ts checksum: 078f9633edb53204ed14ebe3cf6b1d6063729dd37b7ee1c6e936a344ceabebda - - filename: packages/contentstack-migrate-rte/test/commands/json-migration.test.js - checksum: 56e10f1e0d2794fa13bcf5a6bb3e868b28277df1762fb3df0a8a82ad44f8045b - - filename: packages/contentstack-bulk-operations/test/unit/utils/validators.test.ts - checksum: 69cf394584e325b972d6825879de7c31b9dd1bd50b0bb057aecb739258ac0317 + - filename: packages/contentstack-migrate-rte/src/lib/util/index.js + checksum: 7d85f342c7fd7875713cebfae83f68d8592cc732a15cca48ddecbeae818cb4c5 + - filename: packages/contentstack-cli-cm-regex-validate/src/utils/connect-stack.ts + checksum: c77c7c25efc6d043b26e3dd0a516e22ac50142fa9fa5ff3a53a7c9fb8f24ebd6 + - filename: packages/contentstack-bulk-operations/src/utils/config-builder.ts + checksum: a7b5259ad719b8c5929f9fea3783bdc92610dc2549426204c1bb6813e7e1112a + - filename: packages/contentstack-bulk-operations/README.md + checksum: 169110e7c6159632f19dc16e17dcb5bac22e5d6880339b35ba076a2fe0d75266 - filename: packages/contentstack-bulk-operations/test/unit/utils/batch-queue-handler.test.ts checksum: c91f1822b5cfd34a4f4ba05dfc56c10a66e0f5ddb55a1cf5b454fa9549ea0052 - - filename: packages/contentstack-migrate-rte/test/utils/index.js - checksum: bc2a509a86174aecbaf0bfc44d6ad3afabe57ef871ec91b796d498e00177e3f0 - - filename: packages/contentstack-bulk-operations/test/unit/utils/client.test.ts - checksum: 178611b1f153b46a0020da22cc18293d5bd9c539ec2e54557fd8c1a3c2e796b3 - - filename: packages/contentstack-bulk-operations/test/unit/utils/bulk-operation-log-handler.test.ts - checksum: cec7ba35157c6516d67931d41deb57b7a156d9fc05dbab93ca5116e89b95c820 - - filename: packages/contentstack-cli-tsgen/AGENTS.md - checksum: 75b4f1414b547d0bd83df5ed4fb80020acc0ed849619bed2639491b565be7a1b - - filename: packages/contentstack-cli-tsgen/src/lib/helper.ts - checksum: a7ead0030ead9d15b6b6e9623f61e7def77b00325e3988f0e3d73a145180dedc - - filename: packages/contentstack-cli-tsgen/src/commands/tsgen.ts - checksum: 054ea78f765edca62c785714cf8962df4fb91529c0851439d1ed61e963467408 version: '1.0' diff --git a/AGENTS.md b/AGENTS.md index daa849c63..565826b2c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -16,6 +16,7 @@ | --- | --- | | **Language** | TypeScript / JavaScript, Node **>= 18** (`engines` in root `package.json`) | | **Build** | pnpm workspaces (`packages/*`); per package: `tsc`, OCLIF manifest/readme where applicable → `lib/` | +| **Tests** | Mocha + Chai; layouts under `packages/*/test/` (see [skills/testing/SKILL.md](skills/testing/SKILL.md)) | | **Tests** | Mocha + Chai (most packages); Jest + ts-jest (`contentstack-cli-cm-regex-validate`); layouts under `packages/*/test/` | | **Lint / coverage** | ESLint in packages that define `lint` scripts; nyc where configured | | **Other** | OCLIF v4, Husky | @@ -30,11 +31,32 @@ CI: [.github/workflows/unit-test.yml](.github/workflows/unit-test.yml) and other workflows under [.github/workflows/](.github/workflows/). +## Where the documentation lives: skills + +| Skill | Path | What it covers | +| --- | --- | --- | +| Development workflow | [skills/dev-workflow/SKILL.md](skills/dev-workflow/SKILL.md) | pnpm commands, CI, TDD expectations, PR checklist | +| Contentstack CLI | [skills/contentstack-cli/SKILL.md](skills/contentstack-cli/SKILL.md) | Plugin commands, OCLIF, Contentstack APIs (incl. `app:*` / `@contentstack/apps-cli`) | +| Framework | [skills/framework/SKILL.md](skills/framework/SKILL.md) | Utilities, config, logging, errors (incl. Developer Hub SDK, manifests, GraphQL) | +| Testing | [skills/testing/SKILL.md](skills/testing/SKILL.md) | Mocha/Chai, coverage, mocks | +| Code review | [skills/code-review/SKILL.md](skills/code-review/SKILL.md) | PR review for this monorepo | + ## Apps CLI plugin (`@contentstack/apps-cli`) - **Package path:** [packages/contentstack-apps-cli](packages/contentstack-apps-cli) - **npm name:** `@contentstack/apps-cli` (unchanged for consumers) - **Migrated from:** [contentstack/contentstack-apps-cli](https://github.com/contentstack/contentstack-apps-cli) — see [APPS-CLI-MIGRATION.md](APPS-CLI-MIGRATION.md) +- **v1 / v2:** Maintain on `v1-dev` (1.x CLI deps) and `v2-dev` / `v2-beta` (2.x beta deps) branches; align `@contentstack/cli-command` and `@contentstack/cli-utilities` versions with the target CLI line. +- **Docs:** OCLIF / `app:*` commands → [contentstack-cli](skills/contentstack-cli/SKILL.md#apps-cli-commands-app); SDK, manifests, GraphQL, HTTP → [framework](skills/framework/SKILL.md#apps-cli-plugin-contentstackapps-cli) + +## Content Type plugin (`contentstack-cli-content-type`) + +- **Package path:** [packages/contentstack-content-type](packages/contentstack-content-type) +- **npm name:** `contentstack-cli-content-type` +- **Migrated from:** [contentstack/contentstack-cli-content-type](https://github.com/contentstack/contentstack-cli-content-type) — see [CONTENT-TYPE-MIGRATION.md](CONTENT-TYPE-MIGRATION.md) +- **v1 / v2:** This branch carries the **v1 line** (`@contentstack/cli-command ^1.8.2`, `@contentstack/cli-utilities ^1.18.3`, npm tag `latest`). The v2-beta line lives on `v2-beta`. +- **Tests:** Jest + ts-jest (unlike most other packages which use Mocha + Chai) +- **Docs:** 6 commands under `content-type:*` → [packages/contentstack-content-type/AGENTS.md](packages/contentstack-content-type/AGENTS.md) - **v1 / v2:** This branch carries the **v1 line** (`@contentstack/cli-command ^1.8.2`, `@contentstack/cli-utilities ^1.18.3`). - **Docs:** See [packages/contentstack-apps-cli/AGENTS.md](packages/contentstack-apps-cli/AGENTS.md) diff --git a/README.md b/README.md index e393e8e14..cae98a050 100644 --- a/README.md +++ b/README.md @@ -56,5 +56,6 @@ To get a more detailed documentation for every command, visit the [CLI section]( ## Useful Plugins - [Generate TypeScript typings from a Stack](https://github.com/Contentstack-Solutions/contentstack-cli-tsgen) +- [Manage Content Types (list, details, audit, compare, diagram)](https://github.com/contentstack/cli-plugins/tree/main/packages/contentstack-content-type) (`contentstack-cli-content-type`) - [Validate regex fields in Content Types and Global Fields](https://github.com/contentstack/cli-plugins/tree/main/packages/contentstack-cli-cm-regex-validate) (`@contentstack/cli-cm-regex-validate`) - [Generate TypeScript typings from a Stack](https://github.com/contentstack/cli-plugins/tree/v1-dev/packages/contentstack-cli-tsgen) (`contentstack-cli-tsgen`) diff --git a/packages/contentstack-content-type/.cursor/rules/README.md b/packages/contentstack-content-type/.cursor/rules/README.md new file mode 100644 index 000000000..f5c1f8701 --- /dev/null +++ b/packages/contentstack-content-type/.cursor/rules/README.md @@ -0,0 +1,5 @@ +# Cursor (optional) + +**Cursor** users: start at **[AGENTS.md](../../AGENTS.md)**. All conventions live in **`skills/*/SKILL.md`**. + +This folder only points contributors to **`AGENTS.md`** so editor-specific config does not duplicate the canonical docs. diff --git a/packages/contentstack-content-type/.editorconfig b/packages/contentstack-content-type/.editorconfig new file mode 100644 index 000000000..beffa3084 --- /dev/null +++ b/packages/contentstack-content-type/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/contentstack-content-type/.eslintignore b/packages/contentstack-content-type/.eslintignore new file mode 100644 index 000000000..dc555529d --- /dev/null +++ b/packages/contentstack-content-type/.eslintignore @@ -0,0 +1 @@ +/lib \ No newline at end of file diff --git a/packages/contentstack-content-type/.eslintrc b/packages/contentstack-content-type/.eslintrc new file mode 100644 index 000000000..dffeb7eca --- /dev/null +++ b/packages/contentstack-content-type/.eslintrc @@ -0,0 +1,51 @@ +{ + "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/.gitignore b/packages/contentstack-content-type/.gitignore new file mode 100644 index 000000000..f12d14f61 --- /dev/null +++ b/packages/contentstack-content-type/.gitignore @@ -0,0 +1,14 @@ +*-debug.log +*-error.log +/.nyc_output +/dist +/lib +/tmp +node_modules +.DS_Store +coverage +.env +oclif.manifest.json +talisman_output.log +snyk_output.log +tsconfig.tsbuildinfo diff --git a/packages/contentstack-content-type/AGENTS.md b/packages/contentstack-content-type/AGENTS.md new file mode 100644 index 000000000..cc48b9875 --- /dev/null +++ b/packages/contentstack-content-type/AGENTS.md @@ -0,0 +1,51 @@ +# contentstack-cli-content-type – Agent guide + +**Universal entry point** for contributors and AI agents. Detailed conventions live in **`skills/*/SKILL.md`**. + +## What this repo is + +| Field | Detail | +|-------|--------| +| **Name:** | `contentstack-cli-content-type` ([contentstack/cli-plugins](https://github.com/contentstack/cli-plugins) → `packages/contentstack-content-type`) | +| **Purpose:** | Contentstack CLI (`csdx`) plugin that reads Content Type metadata from a stack: list, details, audit logs, same-stack or cross-stack JSON compare (HTML diff), and stack content-model diagrams. | +| **Out of scope (if any):** | Bulk entry/asset mutations, Delivery API consumption, and unrelated HTTP clients—this package focuses on content-type introspection via the Management API patterns documented in the plugin skill. | + +## Tech stack (at a glance) + +| Area | Details | +|------|---------| +| Language | TypeScript, **`strict`** ([tsconfig.json](tsconfig.json)), target ES2017, CommonJS | +| Build | `tsc -b`; output **`lib/`**; **`npm run prepack`** runs compile + `oclif manifest` + `oclif readme` | +| Tests | Jest + ts-jest; tests under **`tests/`** ([jest.config.js](jest.config.js)) | +| Lint / coverage | ESLint via **`npm run posttest`** ([.eslintrc](.eslintrc)); Jest coverage **`npm run test:coverage`**, global thresholds in [jest.config.js](jest.config.js) | +| CLI / runtime | oclif; Node engines per [package.json](package.json); `bin` is `csdx` when installed as a CLI plugin | + +## Commands (quick reference) + +| Command type | Command | +|--------------|---------| +| Build (publishable) | `pnpm run build` | +| Test | `pnpm test` | +| Test + coverage | `pnpm run test:coverage` | +| Lint | `pnpm run lint` (or `eslint . --ext .ts --config .eslintrc`) | + +CI: [.github/workflows](.github/workflows) includes policy/SCA/release/issue automation—there is no single `ci.yml` that only runs `npm test`; follow team merge requirements. + +## Where the documentation lives: skills + +| Skill | Path | What it covers | +|-------|------|----------------| +| Dev workflow | [skills/dev-workflow/SKILL.md](skills/dev-workflow/SKILL.md) | Scripts, `tsconfig`, ESLint, Jest/coverage, oclif README/manifest, PR checks | +| Content Type plugin | [skills/contentstack-cli-content-type/SKILL.md](skills/contentstack-cli-content-type/SKILL.md) | `ContentTypeCommand`, CMA vs SDK, auth, commands, compare/diagram | +| Testing | [skills/testing/SKILL.md](skills/testing/SKILL.md) | Jest layout, mocks, conventions, coverage | +| Code review | [skills/code-review/SKILL.md](skills/code-review/SKILL.md) | PR checklist, security and dependency review | + +An index with “when to use” hints is in [skills/README.md](skills/README.md). + +## Security + +See [SECURITY.md](SECURITY.md) for reporting issues. + +## Using Cursor (optional) + +If you use **Cursor**, [.cursor/rules/README.md](.cursor/rules/README.md) only points to **[AGENTS.md](AGENTS.md)**—same docs as everyone else. diff --git a/packages/contentstack-content-type/LICENSE b/packages/contentstack-content-type/LICENSE new file mode 100644 index 000000000..562c492a2 --- /dev/null +++ b/packages/contentstack-content-type/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Contentstack Solutions + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/contentstack-content-type/README.md b/packages/contentstack-content-type/README.md new file mode 100644 index 000000000..429b3bedf --- /dev/null +++ b/packages/contentstack-content-type/README.md @@ -0,0 +1,234 @@ +![npm](https://img.shields.io/npm/v/contentstack-cli-content-type) + +## Description +This is a plugin for [Contentstack's](https://www.contentstack.com/) CLI. +It allows you to quickly retrieve information about Content Types in a Stack. + +## Why use this plugin +1. The `csdx content-type:audit` command lists recent changes to a content type and by whom. +This is useful when needing to find Content Type versions to compare with `csdx content-type:compare`. +[Audit logs](https://www.contentstack.com/docs/developers/set-up-stack/monitor-stack-activities-in-audit-log/) are stored for 90 days within Contentstack. + +1. The `csdx content-type:compare-remote` command allows you to compare the same Content Type between two Stacks. +This is useful when you have cloned or duplicated a Stack, and want to check what has changed in a child Stack. + +1. The `csdx content-type:compare` command allows you to compare multiple versions of a Content Type within a single Stack. +This is useful when you are working in a development team, and want to compare changes made by colleagues. + +1. The `csdx content-type:list` command is useful when you want to see all the Content Types within a Stack. +The Content Type's Display Name, UID, Last Modified Date, and Version number is shown. The list can be ordered by `title` or `modified` date. When developing against Contentstack, Content Type UIDs are needed when requesting data. + +1. The `csdx content-type:details` command provides useful information, such as: + * Field UID and Data Types + * Referenced Content Types + * Options such as required, multiple, and unique + * The full path to a field, useful when using the [include reference endpoint](https://www.contentstack.com/docs/developers/apis/content-delivery-api/#include-reference) or filtering operations, such as the [equality endpoint](https://www.contentstack.com/docs/developers/apis/content-delivery-api/#equals-operator). + +1. The `csdx content-type:diagram` command creates a visual representation of a Stack's content model. + * The ouput format can be either `svg` or `dot`. + * The diagram's orientation can be changed, using the `-d landscape|portrait` flag. + * [GraphViz](https://graphviz.org/) is the layout engine. You can export the generated DOT Language source, using the `-t dot` flag. + * ![Diagram Output](https://github.com/contentstack/contentstack-cli-content-type/blob/main/screenshots/starter-app.svg) + +## How to install this plugin + +```shell +$ csdx plugins:install contentstack-cli-content-type +``` + +## How to use this plugin +This plugin requires you to be authenticated using [csdx auth:login](https://www.contentstack.com/docs/developers/cli/authenticate-with-the-cli/). + +Several commands, such as `csdx content-type:compare` support token aliases as input. +These token aliases should be created using `csdx auth:tokens:add`. + +The commands only use the **Stack API Key**. The management token is ignored. +They are provided as a convenience, so the Stack API Keys do not have to be re-typed. + +## Usability +The `csdx content-type:details` command requires a wide terminal window. If the `path` column is not needed, you can hide it: + +```shell +$ 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/contentstack-cli-content-type/blob/v1.3.0/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/contentstack-cli-content-type/blob/v1.3.0/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/contentstack-cli-content-type/blob/v1.3.0/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/contentstack-cli-content-type/blob/v1.3.0/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=