diff --git a/.eslintrc.js b/.eslintrc.js index 6753607da287..401333d34c8b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -90,6 +90,7 @@ module.exports = { rules: { 'no-duplicate-imports': [0], // handled by @typescript-eslint '@typescript-eslint/ban-types': [0], // TODO enable in future + '@typescript-eslint/no-explicit-any': [0], // TODO enable in future '@typescript-eslint/no-non-null-assertion': [0], '@typescript-eslint/consistent-type-imports': 'error', '@typescript-eslint/explicit-function-return-type': [0], @@ -102,4 +103,5 @@ module.exports = { }, }, ], + ignorePatterns: ['**/dist/**'], }; diff --git a/.gitignore b/.gitignore index 5a36cf21b91b..a8a5525c5aef 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ coverage/ .temp/ storybook-static/ .nx/cache +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 74e19e1458c6..925b42339f6b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,7 +6,7 @@ module.exports = { 'decap-cms-ui-default': '/packages/decap-cms-ui-default/src/index.js', 'decap-cms-backend-github': '/packages/decap-cms-backend-github/src/index.ts', 'decap-cms-lib-widgets': '/packages/decap-cms-lib-widgets/src/index.ts', - 'decap-cms-widget-object': '/packages/decap-cms-widget-object/src/index.js', + 'decap-cms-widget-object': '/packages/decap-cms-widget-object/src/index.ts', '\\.(css|less)$': '/__mocks__/styleMock.js', }, snapshotSerializers: ['@emotion/jest/serializer'], diff --git a/package-lock.json b/package-lock.json index a286b69edb9a..490895d5aea7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -115,7 +115,7 @@ "stylelint-processor-styled-components": "^1.10.0", "svg-inline-loader": "^0.8.0", "to-string-loader": "^1.1.5", - "typescript": "^4.9.4", + "typescript": "^5.3.0", "unist-util-visit": "^1.4.0", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", @@ -2460,6 +2460,19 @@ "node": ">=v12" } }, + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/@commitlint/message": { "version": "16.2.1", "dev": true, @@ -7190,6 +7203,12 @@ "version": "0.16.5", "license": "MIT" }, + "node_modules/@types/semaphore": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/semaphore/-/semaphore-1.1.4.tgz", + "integrity": "sha512-W+KOVSGHKo5yoPXG69RFIKOdmvAcrAo2qnRrcDv80kIcxDnEUQ+c3IVKq0Jkp+BhhYfrbthPY9cXWFL0L9uzuw==", + "dev": true + }, "node_modules/@types/semver": { "version": "7.5.4", "dev": true, @@ -31308,14 +31327,15 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "license": "Apache-2.0", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -33240,6 +33260,9 @@ "js-base64": "^3.0.0", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33259,6 +33282,9 @@ "js-base64": "^3.0.0", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33280,6 +33306,9 @@ "semaphore": "^1.1.0", "what-the-diff": "^0.6.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33332,6 +33361,9 @@ "js-base64": "^3.0.0", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33358,6 +33390,9 @@ "js-base64": "^3.0.0", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33380,6 +33415,9 @@ "js-base64": "^3.0.0", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33477,13 +33515,13 @@ "devDependencies": { "@types/history": "^4.7.8", "@types/redux-mock-store": "^1.0.2", + "@types/semaphore": "^1.1.4", "@types/url-join": "^4.0.0", "redux-mock-store": "^1.5.3" }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", - "decap-cms-editor-component-image": "^3.0.0", "decap-cms-lib-auth": "^3.0.0", "decap-cms-lib-util": "^3.0.0", "decap-cms-lib-widgets": "^3.0.0", @@ -33552,7 +33590,8 @@ "version": "3.1.3", "license": "MIT", "devDependencies": { - "cross-env": "^7.0.0" + "cross-env": "^7.0.0", + "decap-cms-core": "^3.0.0" }, "peerDependencies": { "react": "^18.2.0" @@ -33575,6 +33614,9 @@ "localforage": "^1.7.3", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "immutable": "^3.7.6", "lodash": "^4.17.11" diff --git a/package.json b/package.json index 4c8a1300b45a..48c6522a1d0e 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,13 @@ "build:esm": "nx run-many -t build:esm", "build:demo": "npm run build && ncp packages/decap-cms/dist dev-test/dist/", "build-preview": "npm run build && nx run decap-cms:build-preview --output-style=stream", - "type-check": "tsc --noEmit", + "type-check": "tsc --build", "type-check:watch": "npm run type-check -- --watch", - "clean": "rimraf \"packages/*/dist\" dev-test/dist \"packages/*/node_modules\" \".nx/cache\"", + "clean": "rimraf \"packages/*/dist\" dev-test/dist \"packages/*/node_modules\" \".nx/cache\" \"packages/*/tsconfig.tsbuildinfo\"", "reset": "npm run clean", "test": "npm run lint && npm run type-check && npm run test:unit", "test:all": "npm run test && npm run test:e2e", - "test:ci": "npm run lint-quiet && npm run type-check && npm run test:unit", + "test:ci": "npm run lint-quiet && npm run test:unit", "test:unit": "cross-env NODE_ENV=test jest --no-cache", "test:e2e": "npm run build:demo && npm run test:e2e:run", "test:e2e:ci": "npm run build:demo && npm run test:e2e:run-ci", @@ -141,7 +141,7 @@ "stylelint-processor-styled-components": "^1.10.0", "svg-inline-loader": "^0.8.0", "to-string-loader": "^1.1.5", - "typescript": "^4.9.4", + "typescript": "^5.3.0", "unist-util-visit": "^1.4.0", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", diff --git a/packages/decap-cms-app/index.d.ts b/packages/decap-cms-app/index.d.ts deleted file mode 100644 index 71c98a8d9310..000000000000 --- a/packages/decap-cms-app/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module 'decap-cms-app' { - import type { CMS } from 'decap-cms-core'; - - export const DecapCmsApp: CMS; - - export default DecapCmsApp; -} diff --git a/packages/decap-cms-app/package.json b/packages/decap-cms-app/package.json index b65e22bcd6b3..0bdcf6990a7f 100644 --- a/packages/decap-cms-app/package.json +++ b/packages/decap-cms-app/package.json @@ -6,18 +6,20 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-app", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-app.js", "files": [ "src/", "dist/", "index.d.ts" ], - "types": "index.d.ts", "scripts": { "develop": "npm run build:esm -- --watch", "webpack": "node --max_old_space_size=4096 ../../node_modules/webpack/bin/webpack.js", - "build": "cross-env NODE_ENV=production run-s webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build": "cross-env NODE_ENV=production webpack", + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "keywords": [ "cms", diff --git a/packages/decap-cms-app/src/index.js b/packages/decap-cms-app/src/index.ts similarity index 66% rename from packages/decap-cms-app/src/index.js rename to packages/decap-cms-app/src/index.ts index 2e0c08afae08..edae630c4e8f 100644 --- a/packages/decap-cms-app/src/index.js +++ b/packages/decap-cms-app/src/index.ts @@ -1,6 +1,13 @@ import { DecapCmsCore as CMS } from 'decap-cms-core'; import './extensions.js'; +export * from 'decap-cms-core'; + +declare global { + // This is not really a global but a literal injected by babel + const DECAP_CMS_APP_VERSION: string; +} + // Log version if (typeof window !== 'undefined') { if (typeof DECAP_CMS_APP_VERSION === 'string') { diff --git a/packages/decap-cms-app/tsconfig.json b/packages/decap-cms-app/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-app/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-aws-cognito-github-proxy/package.json b/packages/decap-cms-backend-aws-cognito-github-proxy/package.json index ff45694102fb..cb82a27fd636 100644 --- a/packages/decap-cms-backend-aws-cognito-github-proxy/package.json +++ b/packages/decap-cms-backend-aws-cognito-github-proxy/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-aws-cognito-github-proxy", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-aws-cognito-github-proxy.js", "keywords": [ "decap-cms", @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "apollo-cache-inmemory": "^1.6.2", @@ -40,5 +43,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-aws-cognito-github-proxy/tsconfig.json b/packages/decap-cms-backend-aws-cognito-github-proxy/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-aws-cognito-github-proxy/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-azure/package.json b/packages/decap-cms-backend-azure/package.json index d1e9e209dc58..a342c5ed971f 100644 --- a/packages/decap-cms-backend-azure/package.json +++ b/packages/decap-cms-backend-azure/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-azure", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-azure.js", "keywords": [ "decap-cms", @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "js-base64": "^3.0.0", @@ -33,5 +36,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-azure/tsconfig.json b/packages/decap-cms-backend-azure/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-azure/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-bitbucket/package.json b/packages/decap-cms-backend-bitbucket/package.json index 801444f51539..d26dc598f7ff 100644 --- a/packages/decap-cms-backend-bitbucket/package.json +++ b/packages/decap-cms-backend-bitbucket/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-bitbucket", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-bitbucket.js", "license": "MIT", "keywords": [ @@ -16,7 +17,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "common-tags": "^1.8.0", @@ -34,5 +37,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-bitbucket/src/API.ts b/packages/decap-cms-backend-bitbucket/src/API.ts index 22cb4ace4ab4..91b379539e3e 100644 --- a/packages/decap-cms-backend-bitbucket/src/API.ts +++ b/packages/decap-cms-backend-bitbucket/src/API.ts @@ -469,7 +469,11 @@ export default class API { branch: filesBranch, parseText: false, }); - formData.append(file.path.replace(sourceDir, destDir), content, basename(file.path)); + formData.append( + file.path.replace(sourceDir, destDir), + content as Blob, + basename(file.path), + ); } } diff --git a/packages/decap-cms-backend-bitbucket/src/implementation.ts b/packages/decap-cms-backend-bitbucket/src/implementation.ts index 2f6ce39d706e..e46212c5961d 100644 --- a/packages/decap-cms-backend-bitbucket/src/implementation.ts +++ b/packages/decap-cms-backend-bitbucket/src/implementation.ts @@ -134,7 +134,7 @@ export default class BitbucketBackend implements Implementation { } async status() { - const api = await fetch(BITBUCKET_STATUS_ENDPOINT) + const api = await fetch(BITBUCKET_STATUS_ENDPOINT, undefined) .then(res => res.json()) .then(res => { return res['components'] @@ -272,10 +272,14 @@ export default class BitbucketBackend implements Implementation { this.authenticator = new NetlifyAuthenticator(cfg); } - this.refreshedTokenPromise = this.authenticator!.refresh({ - provider: 'bitbucket', - refresh_token: this.refreshToken as string, - }).then(({ token, refresh_token }) => { + this.refreshedTokenPromise = this.authenticator!.refresh( + { + provider: 'bitbucket', + refresh_token: this.refreshToken as string, + }, + undefined, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ).then(({ token, refresh_token }: any) => { this.token = token; this.refreshToken = refresh_token; this.refreshedTokenPromise = undefined; diff --git a/packages/decap-cms-backend-bitbucket/tsconfig.json b/packages/decap-cms-backend-bitbucket/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-bitbucket/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-git-gateway/package.json b/packages/decap-cms-backend-git-gateway/package.json index 0f1444cc4a2c..2272fd0b3e6c 100644 --- a/packages/decap-cms-backend-git-gateway/package.json +++ b/packages/decap-cms-backend-git-gateway/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-git-gateway", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-git-gateway.js", "license": "MIT", "keywords": [ @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "gotrue-js": "^0.9.24", diff --git a/packages/decap-cms-backend-git-gateway/src/GitHubAPI.ts b/packages/decap-cms-backend-git-gateway/src/GitHubAPI.ts index 70cc9f8e2289..1c9f76ba93f8 100644 --- a/packages/decap-cms-backend-git-gateway/src/GitHubAPI.ts +++ b/packages/decap-cms-backend-git-gateway/src/GitHubAPI.ts @@ -14,7 +14,6 @@ type Config = Omit & { export default class API extends GithubAPI { tokenPromise: () => Promise; - commitAuthor: { name: string }; isLargeMedia: (filename: string) => Promise; constructor(config: Config) { @@ -77,7 +76,7 @@ export default class API extends GithubAPI { } user() { - return Promise.resolve({ login: '', ...this.commitAuthor }); + return Promise.resolve({ login: '', ...this.commitAuthor! }); } async getHeadReference(head: string) { diff --git a/packages/decap-cms-backend-git-gateway/tsconfig.json b/packages/decap-cms-backend-git-gateway/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-git-gateway/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-gitea/package.json b/packages/decap-cms-backend-gitea/package.json index cb343a98f0d4..761c82fcf2a3 100644 --- a/packages/decap-cms-backend-gitea/package.json +++ b/packages/decap-cms-backend-gitea/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-gitea.js", "keywords": [ "decap-cms", @@ -16,7 +17,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "js-base64": "^3.0.0", @@ -32,5 +35,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-gitea/tsconfig.json b/packages/decap-cms-backend-gitea/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-gitea/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-github/package.json b/packages/decap-cms-backend-github/package.json index 5f506b7d4287..8295c1c2d407 100644 --- a/packages/decap-cms-backend-github/package.json +++ b/packages/decap-cms-backend-github/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-github", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-github.js", "keywords": [ "decap-cms", @@ -16,7 +17,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc", "createFragmentTypes": "node scripts/createFragmentTypes.js" }, "dependencies": { @@ -39,5 +42,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-github/src/API.ts b/packages/decap-cms-backend-github/src/API.ts index 244a3e228509..ef41184051fa 100644 --- a/packages/decap-cms-backend-github/src/API.ts +++ b/packages/decap-cms-backend-github/src/API.ts @@ -195,7 +195,7 @@ export default class API { _userPromise?: Promise; _metadataSemaphore?: Semaphore; - commitAuthor?: {}; + commitAuthor?: { name: string }; constructor(config: Config) { this.apiRoot = config.apiRoot || 'https://api.github.com'; diff --git a/packages/decap-cms-backend-github/src/implementation.tsx b/packages/decap-cms-backend-github/src/implementation.tsx index 31149d8e9f26..ad89ed2e824c 100644 --- a/packages/decap-cms-backend-github/src/implementation.tsx +++ b/packages/decap-cms-backend-github/src/implementation.tsx @@ -138,7 +138,7 @@ export default class GitHub implements Implementation { } async status() { - const api = await fetch(GITHUB_STATUS_ENDPOINT) + const api = await fetch(GITHUB_STATUS_ENDPOINT, undefined) .then(res => res.json()) .then(res => { return res['components'] diff --git a/packages/decap-cms-backend-github/tsconfig.json b/packages/decap-cms-backend-github/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-github/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-gitlab/package.json b/packages/decap-cms-backend-gitlab/package.json index 4fcd5edd891d..5f0c5ba2f230 100644 --- a/packages/decap-cms-backend-gitlab/package.json +++ b/packages/decap-cms-backend-gitlab/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-gitlab.js", "keywords": [ "decap-cms", @@ -16,7 +17,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "apollo-cache-inmemory": "^1.6.2", @@ -36,5 +39,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^18.2.0" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-backend-gitlab/tsconfig.json b/packages/decap-cms-backend-gitlab/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-gitlab/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-proxy/package.json b/packages/decap-cms-backend-proxy/package.json index 47fa5f7932b6..ae68151793a6 100644 --- a/packages/decap-cms-backend-proxy/package.json +++ b/packages/decap-cms-backend-proxy/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-proxy.js", "keywords": [ "decap-cms", @@ -15,7 +16,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-backend-proxy/tsconfig.json b/packages/decap-cms-backend-proxy/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-proxy/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-backend-test/package.json b/packages/decap-cms-backend-test/package.json index bc237a0a499e..c5725174a49a 100644 --- a/packages/decap-cms-backend-test/package.json +++ b/packages/decap-cms-backend-test/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-backend-test.js", "keywords": [ "decap-cms", @@ -15,7 +16,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-backend-test/src/implementation.ts b/packages/decap-cms-backend-test/src/implementation.ts index e168795ba8cf..de9604bacb0d 100644 --- a/packages/decap-cms-backend-test/src/implementation.ts +++ b/packages/decap-cms-backend-test/src/implementation.ts @@ -22,7 +22,7 @@ import type { DataFile, } from 'decap-cms-lib-util'; -type RepoFile = { path: string; content: string | AssetProxy }; +type RepoFile = { path: string; content?: string | AssetProxy }; type RepoTree = { [key: string]: RepoFile | RepoTree }; type Diff = { @@ -50,7 +50,7 @@ declare global { } window.repoFiles = window.repoFiles || {}; -window.repoFilesUnpublished = window.repoFilesUnpublished || []; +window.repoFilesUnpublished = window.repoFilesUnpublished || {}; function getFile(path: string, tree: RepoTree) { const segments = path.split('/'); @@ -354,7 +354,7 @@ export default class TestBackend implements Implementation { ); toMove.forEach(f => { deleteFile(f.path, tree); - writeFile(f.path.replace(sourceDir, destDir), f.content, tree); + writeFile(f.path.replace(sourceDir, destDir), f.content!, tree); }); } writeFile(d.path, d.content, tree); diff --git a/packages/decap-cms-backend-test/tsconfig.json b/packages/decap-cms-backend-test/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-backend-test/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-core/index.d.ts b/packages/decap-cms-core/index.d.ts deleted file mode 100644 index d5efb55dd7dd..000000000000 --- a/packages/decap-cms-core/index.d.ts +++ /dev/null @@ -1,604 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -declare module 'decap-cms-core' { - import type { ComponentType } from 'react'; - import type { List, Map } from 'immutable'; - import type { Pluggable } from 'unified'; - - export type CmsBackendType = - | 'azure' - | 'git-gateway' - | 'github' - | 'gitlab' - | 'gitea' - | 'bitbucket' - | 'test-repo' - | 'proxy'; - - export type CmsMapWidgetType = 'Point' | 'LineString' | 'Polygon'; - - export type CmsMarkdownWidgetButton = - | 'bold' - | 'italic' - | 'code' - | 'link' - | 'heading-one' - | 'heading-two' - | 'heading-three' - | 'heading-four' - | 'heading-five' - | 'heading-six' - | 'quote' - | 'code-block' - | 'bulleted-list' - | 'numbered-list'; - - export interface CmsSelectWidgetOptionObject { - label: string; - value: any; - } - - export type CmsCollectionFormatType = string; - - export type CmsAuthScope = 'repo' | 'public_repo'; - - export type CmsPublishMode = 'simple' | 'editorial_workflow' | ''; - - export type CmsSlugEncoding = 'unicode' | 'ascii'; - - export interface CmsI18nConfig { - structure: 'multiple_folders' | 'multiple_files' | 'single_file'; - locales: string[]; - default_locale?: string; - } - - export interface CmsFieldBase { - name: string; - label?: string; - required?: boolean; - hint?: string; - pattern?: [string, string]; - i18n?: boolean | 'translate' | 'duplicate' | 'none'; - media_folder?: string; - public_folder?: string; - comment?: string; - } - - export interface CmsFieldBoolean { - widget: 'boolean'; - default?: boolean; - } - - export interface CmsFieldCode { - widget: 'code'; - default?: any; - - default_language?: string; - allow_language_selection?: boolean; - keys?: { code: string; lang: string }; - output_code_only?: boolean; - } - - export interface CmsFieldColor { - widget: 'color'; - default?: string; - - allowInput?: boolean; - enableAlpha?: boolean; - } - - export interface CmsFieldDateTime { - widget: 'datetime'; - default?: string; - - format?: string; - date_format?: boolean | string; - time_format?: boolean | string; - picker_utc?: boolean; - - /** - * @deprecated Use date_format instead - */ - dateFormat?: boolean | string; - /** - * @deprecated Use time_format instead - */ - timeFormat?: boolean | string; - /** - * @deprecated Use picker_utc instead - */ - pickerUtc?: boolean; - } - - export interface CmsFieldFileOrImage { - widget: 'file' | 'image'; - default?: string; - - media_library?: CmsMediaLibrary; - allow_multiple?: boolean; - choose_url?: boolean; - config?: any; - } - - export interface CmsFieldObject { - widget: 'object'; - default?: any; - - collapsed?: boolean; - summary?: string; - fields: CmsField[]; - } - - export interface CmsFieldList { - widget: 'list'; - default?: any; - - allow_add?: boolean; - collapsed?: boolean; - summary?: string; - minimize_collapsed?: boolean; - label_singular?: string; - field?: CmsField; - fields?: CmsField[]; - max?: number; - min?: number; - add_to_top?: boolean; - types?: (CmsFieldBase & CmsFieldObject)[]; - } - - export interface CmsFieldMap { - widget: 'map'; - default?: string; - - decimals?: number; - type?: CmsMapWidgetType; - } - - export interface CmsFieldMarkdown { - widget: 'markdown'; - default?: string; - - minimal?: boolean; - buttons?: CmsMarkdownWidgetButton[]; - editor_components?: string[]; - modes?: ('raw' | 'rich_text')[]; - - /** - * @deprecated Use editor_components instead - */ - editorComponents?: string[]; - } - - export interface CmsFieldNumber { - widget: 'number'; - default?: string | number; - - value_type?: 'int' | 'float' | string; - min?: number; - max?: number; - - step?: number; - - /** - * @deprecated Use valueType instead - */ - valueType?: 'int' | 'float' | string; - } - - export interface CmsFieldSelect { - widget: 'select'; - default?: string | string[]; - - options: string[] | CmsSelectWidgetOptionObject[]; - multiple?: boolean; - min?: number; - max?: number; - } - - export interface CmsFieldRelation { - widget: 'relation'; - default?: string | string[]; - - collection: string; - value_field: string; - search_fields: string[]; - file?: string; - display_fields?: string[]; - multiple?: boolean; - options_length?: number; - - /** - * @deprecated Use value_field instead - */ - valueField?: string; - /** - * @deprecated Use search_fields instead - */ - searchFields?: string[]; - /** - * @deprecated Use display_fields instead - */ - displayFields?: string[]; - /** - * @deprecated Use options_length instead - */ - optionsLength?: number; - } - - export interface CmsFieldHidden { - widget: 'hidden'; - default?: any; - } - - export interface CmsFieldStringOrText { - // This is the default widget, so declaring its type is optional. - widget?: 'string' | 'text'; - default?: string; - } - - export interface CmsFieldMeta { - name: string; - label: string; - widget: string; - required: boolean; - index_file: string; - meta: boolean; - } - - export type CmsField = CmsFieldBase & - ( - | CmsFieldBoolean - | CmsFieldCode - | CmsFieldColor - | CmsFieldDateTime - | CmsFieldFileOrImage - | CmsFieldList - | CmsFieldMap - | CmsFieldMarkdown - | CmsFieldNumber - | CmsFieldObject - | CmsFieldRelation - | CmsFieldSelect - | CmsFieldHidden - | CmsFieldStringOrText - | CmsFieldMeta - ); - - export interface CmsCollectionFile { - name: string; - label: string; - file: string; - fields: CmsField[]; - label_singular?: string; - description?: string; - preview_path?: string; - preview_path_date_field?: string; - i18n?: boolean | CmsI18nConfig; - media_folder?: string; - public_folder?: string; - } - - export interface ViewFilter { - label: string; - field: string; - pattern: string; - } - - export interface ViewGroup { - label: string; - field: string; - pattern?: string; - } - - export interface CmsCollection { - name: string; - label: string; - label_singular?: string; - description?: string; - folder?: string; - files?: CmsCollectionFile[]; - identifier_field?: string; - summary?: string; - slug?: string; - preview_path?: string; - preview_path_date_field?: string; - create?: boolean; - delete?: boolean; - hide?: boolean; - editor?: { - preview?: boolean; - }; - publish?: boolean; - nested?: { - depth: number; - subfolders?: boolean; - }; - meta?: { path?: { label: string; widget: string; index_file: string } }; - - /** - * It accepts the following values: yml, yaml, toml, json, md, markdown, html - * - * You may also specify a custom extension not included in the list above, by specifying the format value. - */ - extension?: string; - format?: CmsCollectionFormatType; - - frontmatter_delimiter?: string[] | string; - fields?: CmsField[]; - filter?: { field: string; value: any }; - path?: string; - media_folder?: string; - public_folder?: string; - sortable_fields?: string[]; - view_filters?: ViewFilter[]; - view_groups?: ViewGroup[]; - i18n?: boolean | CmsI18nConfig; - - /** - * @deprecated Use sortable_fields instead - */ - sortableFields?: string[]; - } - - export interface CmsBackend { - name: CmsBackendType; - auth_scope?: CmsAuthScope; - open_authoring?: boolean; - always_fork?: boolean; - repo?: string; - branch?: string; - api_root?: string; - site_domain?: string; - base_url?: string; - auth_endpoint?: string; - app_id?: string; - auth_type?: 'implicit' | 'pkce'; - cms_label_prefix?: string; - squash_merges?: boolean; - proxy_url?: string; - commit_messages?: { - create?: string; - update?: string; - delete?: string; - uploadMedia?: string; - deleteMedia?: string; - openAuthoring?: string; - }; - } - - export interface CmsSlug { - encoding?: CmsSlugEncoding; - clean_accents?: boolean; - sanitize_replacement?: string; - } - - export interface CmsLocalBackend { - url?: string; - allowed_hosts?: string[]; - } - - export interface CmsConfig { - backend: CmsBackend; - collections: CmsCollection[]; - locale?: string; - site_url?: string; - display_url?: string; - logo_url?: string; - show_preview_links?: boolean; - media_folder?: string; - public_folder?: string; - media_folder_relative?: boolean; - media_library?: CmsMediaLibrary; - publish_mode?: CmsPublishMode; - load_config_file?: boolean; - integrations?: { - hooks: string[]; - provider: string; - collections?: '*' | string[]; - applicationID?: string; - apiKey?: string; - getSignedFormURL?: string; - }[]; - slug?: CmsSlug; - i18n?: CmsI18nConfig; - local_backend?: boolean | CmsLocalBackend; - editor?: { - preview?: boolean; - }; - } - - export interface InitOptions { - config: CmsConfig; - } - - export type EditorComponentField = - | ({ - name: string; - label: string; - } & { - widget: Omit; - }) - | { - widget: 'list'; - /** - * Used if widget === "list" to create a flat array - */ - field?: EditorComponentField; - /** - * Used if widget === "list" to create an array of objects - */ - fields?: EditorComponentField[]; - }; - - export interface EditorComponentOptions { - id: string; - label: string; - fields?: EditorComponentField[]; - pattern: RegExp; - allow_add?: boolean; - fromBlock: (match: RegExpMatchArray) => any; - toBlock: (data: any) => string; - toPreview: (data: any) => string | JSX.Element; - } - - export interface PreviewStyleOptions { - raw: boolean; - } - - export interface PreviewStyle extends PreviewStyleOptions { - value: string; - } - - export type CmsBackendClass = any; // TODO: type properly - - export interface CmsRegistryBackend { - init: (args: any) => CmsBackendClass; - } - - export interface CmsWidgetControlProps { - value: T; - field: Map; - onChange: (value: T) => void; - forID: string; - classNameWrapper: string; - } - - export interface CmsWidgetPreviewProps { - value: T; - field: Map; - metadata: Map; - getAsset: GetAssetFunction; - entry: Map; - fieldsMetaData: Map; - } - - export interface CmsWidgetParam { - name: string; - controlComponent: CmsWidgetControlProps; - previewComponent?: CmsWidgetPreviewProps; - globalStyles?: any; - } - - export interface CmsWidget { - control: CmsWidgetControlProps; - preview?: CmsWidgetPreviewProps; - globalStyles?: any; - } - - export type CmsWidgetValueSerializer = any; // TODO: type properly - - export type CmsMediaLibraryOptions = any; // TODO: type properly - - export interface CmsMediaLibrary { - name: string; - config?: CmsMediaLibraryOptions; - } - - export interface CmsEventListener { - name: 'prePublish' | 'postPublish' | 'preUnpublish' | 'postUnpublish' | 'preSave' | 'postSave'; - handler: ({ - entry, - author, - }: { - entry: Map; - author: { login: string; name: string }; - }) => any; - } - - export type CmsEventListenerOptions = any; // TODO: type properly - - export type CmsLocalePhrases = any; // TODO: type properly - - export type Formatter = { - fromFile(content: string): unknown; - toFile(data: object, sortedKeys?: string[], comments?: Record): string; - }; - - export interface CmsRegistry { - backends: { - [name: string]: CmsRegistryBackend; - }; - templates: { - [name: string]: ComponentType; - }; - previewStyles: PreviewStyle[]; - widgets: { - [name: string]: CmsWidget; - }; - editorComponents: Map>; - widgetValueSerializers: { - [name: string]: CmsWidgetValueSerializer; - }; - mediaLibraries: CmsMediaLibrary[]; - locales: { - [name: string]: CmsLocalePhrases; - }; - formats: { - [name: string]: Formatter; - }; - } - - type GetAssetFunction = (asset: string) => { - url: string; - path: string; - field?: any; - fileObj: File; - }; - - export type PreviewTemplateComponentProps = { - entry: Map; - collection: Map; - getCollection: (collectionName: string, slug?: string) => Promise[]>; - widgetFor: (name: any, fields?: any, values?: any, fieldsMetaData?: any) => JSX.Element | null; - widgetsFor: (name: any) => any; - getAsset: GetAssetFunction; - boundGetAsset: (collection: any, path: any) => GetAssetFunction; - fieldsMetaData: Map; - config: Map; - fields: List>; - isLoadingAsset: boolean; - window: Window; - document: Document; - }; - - export interface CMS { - getBackend: (name: string) => CmsRegistryBackend | undefined; - getEditorComponents: () => Map>; - getRemarkPlugins: () => Array; - getLocale: (locale: string) => CmsLocalePhrases | undefined; - getMediaLibrary: (name: string) => CmsMediaLibrary | undefined; - getPreviewStyles: () => PreviewStyle[]; - getPreviewTemplate: (name: string) => ComponentType | undefined; - getWidget: (name: string) => CmsWidget | undefined; - getWidgetValueSerializer: (widgetName: string) => CmsWidgetValueSerializer | undefined; - init: (options?: InitOptions) => void; - registerBackend: (name: string, backendClass: CmsBackendClass) => void; - registerEditorComponent: (options: EditorComponentOptions) => void; - registerRemarkPlugin: (plugin: Pluggable) => void; - registerEventListener: ( - eventListener: CmsEventListener, - options?: CmsEventListenerOptions, - ) => void; - registerLocale: (locale: string, phrases: CmsLocalePhrases) => void; - registerMediaLibrary: (mediaLibrary: CmsMediaLibrary, options?: CmsMediaLibraryOptions) => void; - registerPreviewStyle: (filePath: string, options?: PreviewStyleOptions) => void; - registerPreviewTemplate: ( - name: string, - component: ComponentType, - ) => void; - registerWidget: ( - widget: string | CmsWidgetParam, - control?: ComponentType | string, - preview?: ComponentType, - ) => void; - registerWidgetValueSerializer: ( - widgetName: string, - serializer: CmsWidgetValueSerializer, - ) => void; - resolveWidget: (name: string) => CmsWidget | undefined; - registerCustomFormat: (name: string, extension: string, formatter: Formatter) => void; - } - - export const DecapCmsCore: CMS; - - export default DecapCmsCore; -} diff --git a/packages/decap-cms-core/package.json b/packages/decap-cms-core/package.json index e65f70c8ef3a..3d1760e8b923 100644 --- a/packages/decap-cms-core/package.json +++ b/packages/decap-cms-core/package.json @@ -5,18 +5,19 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-core.js", "files": [ "src/", - "dist/", - "index.d.ts" + "dist/" ], - "types": "index.d.ts", "scripts": { "develop": "npm run build:esm -- --watch", "webpack": "node --max_old_space_size=4096 ../../node_modules/webpack/bin/webpack.js", - "build": "cross-env NODE_ENV=production run-s webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build": "cross-env NODE_ENV=production webpack", + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "keywords": [ "cms", @@ -79,7 +80,6 @@ "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", - "decap-cms-editor-component-image": "^3.0.0", "decap-cms-lib-auth": "^3.0.0", "decap-cms-lib-util": "^3.0.0", "decap-cms-lib-widgets": "^3.0.0", @@ -94,6 +94,7 @@ "devDependencies": { "@types/history": "^4.7.8", "@types/redux-mock-store": "^1.0.2", + "@types/semaphore": "^1.1.4", "@types/url-join": "^4.0.0", "redux-mock-store": "^1.5.3" } diff --git a/packages/decap-cms-core/src/actions/config.ts b/packages/decap-cms-core/src/actions/config.ts index 66062a50a1ee..1f7d1ba4f447 100644 --- a/packages/decap-cms-core/src/actions/config.ts +++ b/packages/decap-cms-core/src/actions/config.ts @@ -249,10 +249,11 @@ export function applyDefaults(originalConfig: CmsConfig) { collection.publish = true; } - let collectionI18n = collection[I18N]; + const i18nConfig = collection[I18N]; + let collectionI18n: CmsI18nConfig; - if (i18n && collectionI18n) { - collectionI18n = getI18nDefaults(collectionI18n, i18n); + if (i18n && i18nConfig) { + collectionI18n = getI18nDefaults(i18nConfig, i18n); collection[I18N] = collectionI18n; } else { collectionI18n = undefined; @@ -313,10 +314,11 @@ export function applyDefaults(originalConfig: CmsConfig) { file.fields = traverseFieldsJS(file.fields, setDefaultPublicFolderForField); } - let fileI18n = file[I18N]; + const fileI18nConfig = file[I18N]; + let fileI18n: CmsI18nConfig; - if (fileI18n && collectionI18n) { - fileI18n = getI18nDefaults(fileI18n, collectionI18n); + if (fileI18nConfig && collectionI18n) { + fileI18n = getI18nDefaults(fileI18nConfig, collectionI18n); file[I18N] = fileI18n; } else { fileI18n = undefined; diff --git a/packages/decap-cms-core/src/actions/mediaLibrary.ts b/packages/decap-cms-core/src/actions/mediaLibrary.ts index 705825b6b8f2..433a4011c7e8 100644 --- a/packages/decap-cms-core/src/actions/mediaLibrary.ts +++ b/packages/decap-cms-core/src/actions/mediaLibrary.ts @@ -526,7 +526,7 @@ export async function getMediaDisplayURL( ) { const displayURLState: DisplayURLState = selectMediaDisplayURL(state, file.id); - let url: string | null | undefined; + let url: string | null | void; if (displayURLState.get('url')) { // url was already loaded url = displayURLState.get('url'); diff --git a/packages/decap-cms-core/src/actions/search.ts b/packages/decap-cms-core/src/actions/search.ts index d927e21795d7..9164d6730064 100644 --- a/packages/decap-cms-core/src/actions/search.ts +++ b/packages/decap-cms-core/src/actions/search.ts @@ -111,7 +111,7 @@ export function searchEntries(searchTerm: string, searchCollections: string[], p const state = getState(); const { search } = state; const backend = currentBackend(state.config); - const allCollections = searchCollections || state.collections.keySeq().toArray(); + const allCollections = searchCollections || (state.collections.keySeq().toArray() as string[]); const collections = allCollections.filter(collection => selectIntegration(state, collection, 'search'), ); diff --git a/packages/decap-cms-core/src/backend.ts b/packages/decap-cms-core/src/backend.ts index bcb8881de045..67eb5c4ecb64 100644 --- a/packages/decap-cms-core/src/backend.ts +++ b/packages/decap-cms-core/src/backend.ts @@ -286,8 +286,8 @@ interface ImplementationInitOptions { initialWorkflowStatus: string; } -type Implementation = BackendImplementation & { - init: (config: CmsConfig, options: ImplementationInitOptions) => Implementation; +export type CmsRegistryBackend = { + init: (config: CmsConfig, options: ImplementationInitOptions) => BackendImplementation; }; function prepareMetaPath(path: string, collection: Collection) { @@ -340,14 +340,17 @@ function collectionRegex(collection: Collection): RegExp | undefined { } export class Backend { - implementation: Implementation; + implementation: BackendImplementation; backendName: string; config: CmsConfig; authStore?: AuthStore; user?: User | null; backupSync: AsyncLock; - constructor(implementation: Implementation, { backendName, authStore, config }: BackendOptions) { + constructor( + implementation: CmsRegistryBackend, + { backendName, authStore, config }: BackendOptions, + ) { // We can't reliably run this on exit, so we do cleanup on load. this.deleteAnonymousBackup(); this.config = config; diff --git a/packages/decap-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js b/packages/decap-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js index 39424176ac95..3cc025fd705d 100644 --- a/packages/decap-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +++ b/packages/decap-cms-core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js @@ -6,8 +6,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import Frame, { FrameContextConsumer } from 'react-frame-component'; import { lengths } from 'decap-cms-ui-default'; import { connect } from 'react-redux'; -import { encodeEntry } from 'decap-cms-lib-util/src/stega'; +import { encodeEntry } from '../../../lib/stega'; import { resolveWidget, getPreviewTemplate, diff --git a/packages/decap-cms-core/src/formats/formats.ts b/packages/decap-cms-core/src/formats/formats.ts index 6e79c5e5035b..3f3e12e040a6 100644 --- a/packages/decap-cms-core/src/formats/formats.ts +++ b/packages/decap-cms-core/src/formats/formats.ts @@ -10,7 +10,7 @@ import { getCustomFormatsExtensions, getCustomFormatsFormatters } from '../lib/r import type { Delimiter } from './frontmatter'; import type { Collection, EntryObject, Format } from '../types/redux'; import type { EntryValue } from '../valueObjects/Entry'; -import type { Formatter } from 'decap-cms-core'; +import type { Formatter } from '../types'; export const frontmatterFormats = ['yaml-frontmatter', 'toml-frontmatter', 'json-frontmatter']; diff --git a/packages/decap-cms-core/src/index.js b/packages/decap-cms-core/src/index.ts similarity index 59% rename from packages/decap-cms-core/src/index.js rename to packages/decap-cms-core/src/index.ts index 43e7ed7a39f3..900cb5143f32 100644 --- a/packages/decap-cms-core/src/index.js +++ b/packages/decap-cms-core/src/index.ts @@ -1,7 +1,10 @@ import bootstrap from './bootstrap'; import Registry from './lib/registry'; -export const DecapCmsCore = { +import type { CMS } from './types'; +export * from './types'; + +export const DecapCmsCore: CMS = { ...Registry, init: bootstrap, }; diff --git a/packages/decap-cms-core/src/lib/registry.js b/packages/decap-cms-core/src/lib/registry.ts similarity index 92% rename from packages/decap-cms-core/src/lib/registry.js rename to packages/decap-cms-core/src/lib/registry.ts index 573d8867762c..0d7b330308dc 100644 --- a/packages/decap-cms-core/src/lib/registry.js +++ b/packages/decap-cms-core/src/lib/registry.ts @@ -2,7 +2,10 @@ import { Map } from 'immutable'; import { produce } from 'immer'; import { oneLine } from 'common-tags'; -import EditorComponent from '../valueObjects/EditorComponent'; +import createEditorComponent from '../valueObjects/EditorComponent'; + +import type { ComponentType } from 'react'; +import type { CmsRegistry, CmsWidgetParam, EditorComponentOptions } from '../types'; const allowedEvents = [ 'prePublish', @@ -12,7 +15,7 @@ const allowedEvents = [ 'preSave', 'postSave', ]; -const eventHandlers = {}; +const eventHandlers: any = {}; allowedEvents.forEach(e => { eventHandlers[e] = []; }); @@ -20,7 +23,7 @@ allowedEvents.forEach(e => { /** * Global Registry Object */ -const registry = { +const registry: CmsRegistry = { backends: {}, templates: {}, previewStyles: [], @@ -91,7 +94,12 @@ export function getPreviewTemplate(name) { /** * Editor Widgets */ -export function registerWidget(name, control, preview, schema = {}) { +export function registerWidget( + name: string | CmsWidgetParam | CmsWidgetParam[], + control?: ComponentType | string, + preview?: ComponentType, + schema = {}, +) { if (Array.isArray(name)) { name.forEach(widget => { if (typeof widget !== 'object') { @@ -140,7 +148,7 @@ export function getWidget(name) { return registry.widgets[name]; } export function getWidgets() { - return produce(Object.entries(registry.widgets), draft => { + return produce(Object.entries(registry.widgets), (draft: any) => { return draft.map(([key, value]) => ({ name: key, ...value })); }); } @@ -151,8 +159,8 @@ export function resolveWidget(name) { /** * Markdown Editor Custom Components */ -export function registerEditorComponent(component) { - const plugin = EditorComponent(component); +export function registerEditorComponent(component: EditorComponentOptions) { + const plugin = createEditorComponent(component); if (plugin.type === 'code-block') { const codeBlock = registry.editorComponents.find(c => c.type === 'code-block'); diff --git a/packages/decap-cms-lib-util/src/stega.ts b/packages/decap-cms-core/src/lib/stega.ts similarity index 97% rename from packages/decap-cms-lib-util/src/stega.ts rename to packages/decap-cms-core/src/lib/stega.ts index 099b86e6db03..88006a94d1cb 100644 --- a/packages/decap-cms-lib-util/src/stega.ts +++ b/packages/decap-cms-core/src/lib/stega.ts @@ -1,9 +1,9 @@ import { vercelStegaEncode } from '@vercel/stega'; -import { isImmutableMap, isImmutableList } from './types'; +import { isImmutableMap, isImmutableList } from '../types/immutable'; import type { Map as ImmutableMap, List } from 'immutable'; -import type { CmsField } from 'decap-cms-core'; +import type { CmsField } from '../types'; /** * Context passed to encode functions, containing the current state of the encoding process diff --git a/packages/decap-cms-core/src/reducers/deploys.ts b/packages/decap-cms-core/src/reducers/deploys.ts index d8113e83b623..9c0a2165e35a 100644 --- a/packages/decap-cms-core/src/reducers/deploys.ts +++ b/packages/decap-cms-core/src/reducers/deploys.ts @@ -10,7 +10,7 @@ import type { DeploysAction } from '../actions/deploys'; export type Deploys = { [key: string]: { - isFetching: boolean; + isFetching?: boolean; url?: string; status?: string; }; diff --git a/packages/decap-cms-core/src/reducers/entries.ts b/packages/decap-cms-core/src/reducers/entries.ts index 068d486a0e75..823759246504 100644 --- a/packages/decap-cms-core/src/reducers/entries.ts +++ b/packages/decap-cms-core/src/reducers/entries.ts @@ -61,6 +61,7 @@ import type { EntriesGroupRequestPayload, EntriesGroupFailurePayload, GroupOfEntries, + EntryGroup, } from '../types/redux'; const { keyToPathArray } = stringTemplate; @@ -444,7 +445,7 @@ export function selectEntries(state: Entries, collection: Collection) { return entries; } -function getGroup(entry: EntryMap, selectedGroup: GroupMap) { +function getGroup(entry: EntryMap, selectedGroup: GroupMap): EntryGroup { const label = selectedGroup.get('label'); const field = selectedGroup.get('field'); @@ -453,7 +454,7 @@ function getGroup(entry: EntryMap, selectedGroup: GroupMap) { return { id: 'missing_value', label, - value: fieldData, + value: undefined, }; } diff --git a/packages/decap-cms-core/src/reducers/medias.ts b/packages/decap-cms-core/src/reducers/medias.ts index 778692dab76d..8ff097054c51 100644 --- a/packages/decap-cms-core/src/reducers/medias.ts +++ b/packages/decap-cms-core/src/reducers/medias.ts @@ -13,7 +13,11 @@ import type { MediasAction } from '../actions/media'; import type AssetProxy from '../valueObjects/AssetProxy'; export type Medias = { - [path: string]: { asset: AssetProxy | undefined; isLoading: boolean; error: Error | null }; + [key: string]: { + asset?: AssetProxy; + isLoading?: boolean; + error?: Error | null; + }; }; const defaultState: Medias = {}; @@ -60,7 +64,7 @@ const medias = produce((state: Medias, action: MediasAction) => { }, defaultState); export function selectIsLoadingAsset(state: Medias) { - return Object.values(state).some(state => state.isLoading); + return Object.values(state).some(state => state?.isLoading); } export default medias; diff --git a/packages/decap-cms-core/src/types/immutable.ts b/packages/decap-cms-core/src/types/immutable.ts index 0afa58cdf915..3ab5fb5f1e00 100644 --- a/packages/decap-cms-core/src/types/immutable.ts +++ b/packages/decap-cms-core/src/types/immutable.ts @@ -1,3 +1,13 @@ +import { Map as ImmutableMap, List } from 'immutable'; + +export function isImmutableMap(value: unknown): value is ImmutableMap { + return ImmutableMap.isMap(value); +} + +export function isImmutableList(value: unknown): value is List { + return List.isList(value); +} + export interface StaticallyTypedRecord { get(key: K, defaultValue?: T[K]): T[K]; set(key: K, value: V): StaticallyTypedRecord & T; diff --git a/packages/decap-cms-core/src/types/index.ts b/packages/decap-cms-core/src/types/index.ts new file mode 100644 index 000000000000..eb0346a8cc78 --- /dev/null +++ b/packages/decap-cms-core/src/types/index.ts @@ -0,0 +1,619 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import type { ComponentType, JSX } from 'react'; +import type { List, Map } from 'immutable'; +import type { Pluggable } from 'unified'; +import type { Implementation } from 'decap-cms-lib-util'; +import type { CmsRegistryBackend } from '../backend'; + +export type { CmsRegistryBackend }; +export type CmsBackendClass = new (...args: any[]) => Implementation; + +export type CmsBackendType = + | 'azure' + | 'git-gateway' + | 'github' + | 'gitlab' + | 'gitea' + | 'bitbucket' + | 'test-repo' + | 'proxy'; + +export type CmsMapWidgetType = 'Point' | 'LineString' | 'Polygon'; + +export type CmsMarkdownWidgetButton = + | 'bold' + | 'italic' + | 'code' + | 'link' + | 'heading-one' + | 'heading-two' + | 'heading-three' + | 'heading-four' + | 'heading-five' + | 'heading-six' + | 'quote' + | 'code-block' + | 'bulleted-list' + | 'numbered-list'; + +export interface CmsSelectWidgetOptionObject { + label: string; + value: any; +} + +export type CmsCollectionFormatType = string; + +export type CmsAuthScope = 'repo' | 'public_repo'; + +export type CmsPublishMode = 'simple' | 'editorial_workflow' | ''; + +export type CmsSlugEncoding = 'unicode' | 'ascii'; + +export interface CmsI18nConfig { + structure: 'multiple_folders' | 'multiple_files' | 'single_file'; + locales: string[]; + default_locale?: string; +} + +export interface CmsFieldBase { + name: string; + label?: string; + required?: boolean; + hint?: string; + pattern?: [string, string]; + i18n?: boolean | 'translate' | 'duplicate' | 'none'; + media_folder?: string; + public_folder?: string; + comment?: string; +} + +export interface CmsFieldBoolean { + widget: 'boolean'; + default?: boolean; +} + +export interface CmsFieldCode { + widget: 'code'; + default?: any; + + default_language?: string; + allow_language_selection?: boolean; + keys?: { code: string; lang: string }; + output_code_only?: boolean; +} + +export interface CmsFieldColor { + widget: 'color'; + default?: string; + + allowInput?: boolean; + enableAlpha?: boolean; +} + +export interface CmsFieldDateTime { + widget: 'datetime'; + default?: string; + + format?: string; + date_format?: boolean | string; + time_format?: boolean | string; + picker_utc?: boolean; + + /** + * @deprecated Use date_format instead + */ + dateFormat?: boolean | string; + /** + * @deprecated Use time_format instead + */ + timeFormat?: boolean | string; + /** + * @deprecated Use picker_utc instead + */ + pickerUtc?: boolean; +} + +export interface CmsFieldFileOrImage { + widget: 'file' | 'image'; + default?: string; + + media_library?: CmsMediaLibrary; + allow_multiple?: boolean; + choose_url?: boolean; + config?: any; +} + +export interface CmsFieldObject { + widget: 'object'; + default?: any; + + collapsed?: boolean; + summary?: string; + fields: CmsField[]; +} + +export interface CmsFieldList { + widget: 'list'; + default?: any; + + allow_add?: boolean; + collapsed?: boolean; + summary?: string; + minimize_collapsed?: boolean; + label_singular?: string; + field?: CmsField; + fields?: CmsField[]; + max?: number; + min?: number; + add_to_top?: boolean; + types?: (CmsFieldBase & CmsFieldObject)[]; +} + +export interface CmsFieldMap { + widget: 'map'; + default?: string; + + decimals?: number; + type?: CmsMapWidgetType; +} + +export interface CmsFieldMarkdown { + widget: 'markdown'; + default?: string; + + minimal?: boolean; + buttons?: CmsMarkdownWidgetButton[]; + editor_components?: string[]; + modes?: ('raw' | 'rich_text')[]; + + /** + * @deprecated Use editor_components instead + */ + editorComponents?: string[]; +} + +export interface CmsFieldNumber { + widget: 'number'; + default?: string | number; + + value_type?: 'int' | 'float' | string; + min?: number; + max?: number; + + step?: number; + + /** + * @deprecated Use valueType instead + */ + valueType?: 'int' | 'float' | string; +} + +export interface CmsFieldSelect { + widget: 'select'; + default?: string | string[]; + + options: string[] | CmsSelectWidgetOptionObject[]; + multiple?: boolean; + min?: number; + max?: number; +} + +export interface CmsFieldRelation { + widget: 'relation'; + default?: string | string[]; + + collection: string; + value_field: string; + search_fields: string[]; + file?: string; + display_fields?: string[]; + multiple?: boolean; + options_length?: number; + + /** + * @deprecated Use value_field instead + */ + valueField?: string; + /** + * @deprecated Use search_fields instead + */ + searchFields?: string[]; + /** + * @deprecated Use display_fields instead + */ + displayFields?: string[]; + /** + * @deprecated Use options_length instead + */ + optionsLength?: number; +} + +export interface CmsFieldHidden { + widget: 'hidden'; + default?: any; +} + +export interface CmsFieldStringOrText { + // This is the default widget, so declaring its type is optional. + widget?: 'string' | 'text'; + default?: string; +} + +export interface CmsFieldMeta { + name: string; + label: string; + widget: string; + required: boolean; + index_file: string; + meta: boolean; +} + +export type CmsField = CmsFieldBase & + ( + | CmsFieldBoolean + | CmsFieldCode + | CmsFieldColor + | CmsFieldDateTime + | CmsFieldFileOrImage + | CmsFieldList + | CmsFieldMap + | CmsFieldMarkdown + | CmsFieldNumber + | CmsFieldObject + | CmsFieldRelation + | CmsFieldSelect + | CmsFieldHidden + | CmsFieldStringOrText + | CmsFieldMeta + ); + +export interface CmsCollectionFile { + name: string; + label: string; + file: string; + fields: CmsField[]; + label_singular?: string; + description?: string; + preview_path?: string; + preview_path_date_field?: string; + i18n?: boolean | CmsI18nConfig; + media_folder?: string; + public_folder?: string; +} + +export interface ViewFilter { + label: string; + field: string; + pattern: string; +} + +export interface ViewGroup { + label: string; + field: string; + pattern?: string; +} + +export interface CmsCollection { + name: string; + label: string; + label_singular?: string; + description?: string; + folder?: string; + files?: CmsCollectionFile[]; + identifier_field?: string; + summary?: string; + slug?: string; + preview_path?: string; + preview_path_date_field?: string; + create?: boolean; + delete?: boolean; + hide?: boolean; + editor?: { + preview?: boolean; + visualEditing?: boolean; + }; + publish?: boolean; + nested?: { + depth: number; + }; + meta?: { path?: { label: string; widget: string; index_file: string } }; + + /** + * It accepts the following values: yml, yaml, toml, json, md, markdown, html + * + * You may also specify a custom extension not included in the list above, by specifying the format value. + */ + extension?: string; + format?: CmsCollectionFormatType; + + frontmatter_delimiter?: string[] | string; + fields?: CmsField[]; + filter?: { field: string; value: any }; + path?: string; + media_folder?: string; + public_folder?: string; + sortable_fields?: string[]; + view_filters?: ViewFilter[]; + view_groups?: ViewGroup[]; + i18n?: boolean | CmsI18nConfig; + + /** + * @deprecated Use sortable_fields instead + */ + sortableFields?: string[]; +} + +export interface CmsBackend { + name: CmsBackendType; + auth_scope?: CmsAuthScope; + open_authoring?: boolean; + always_fork?: boolean; + repo?: string; + branch?: string; + api_root?: string; + site_domain?: string; + base_url?: string; + auth_endpoint?: string; + app_id?: string; + auth_type?: 'implicit' | 'pkce'; + cms_label_prefix?: string; + squash_merges?: boolean; + proxy_url?: string; + commit_messages?: { + create?: string; + update?: string; + delete?: string; + uploadMedia?: string; + deleteMedia?: string; + openAuthoring?: string; + }; +} + +export interface CmsSlug { + encoding?: CmsSlugEncoding; + clean_accents?: boolean; + sanitize_replacement?: string; +} + +export interface CmsLocalBackend { + url?: string; + allowed_hosts?: string[]; +} + +export interface CmsConfig { + backend: CmsBackend; + collections: CmsCollection[]; + locale?: string; + site_url?: string; + display_url?: string; + logo_url?: string; + show_preview_links?: boolean; + media_folder?: string; + public_folder?: string; + media_folder_relative?: boolean; + media_library?: CmsMediaLibrary; + publish_mode?: CmsPublishMode; + load_config_file?: boolean; + integrations?: { + hooks: string[]; + provider: string; + collections?: '*' | string[]; + applicationID?: string; + apiKey?: string; + getSignedFormURL?: string; + }[]; + slug?: CmsSlug; + i18n?: CmsI18nConfig; + local_backend?: boolean | CmsLocalBackend; + editor?: { + preview?: boolean; + }; +} + +export interface InitOptions { + config: CmsConfig; +} + +export type EditorComponentField = { + name: string; + label: string; +} & ( + | { + widget?: Exclude; + } + | { + widget: 'image'; + media_library?: { + allow_multiple?: boolean; + }; + } + | { + widget: 'list'; + /** + * Used if widget === "list" to create a flat array + */ + field?: EditorComponentField; + /** + * Used if widget === "list" to create an array of objects + */ + fields?: EditorComponentField[]; + } +); + +export interface EditorComponentOptions { + id: string; + label: string; + icon?: string; + type?: string; + widget?: string; + fields?: EditorComponentField[]; + pattern: RegExp; + allow_add?: boolean; + fromBlock: (match: RegExpMatchArray) => any; + toBlock: (data: any) => string; + toPreview: (data: any, getAsset: GetAssetFunction, fields: any) => string | JSX.Element; +} + +export interface PreviewStyleOptions { + raw: boolean; +} + +export interface PreviewStyle extends PreviewStyleOptions { + value: string; +} + +export interface CmsWidgetControlProps { + value: T; + field: Map; + onChange: (value: T) => void; + forID: string; + classNameWrapper: string; +} + +export interface CmsWidgetPreviewProps { + value: T; + field: Map; + metadata: Map; + getAsset: GetAssetFunction; + entry: Map; + fieldsMetaData: Map; +} + +export interface CmsWidgetParam { + name: string; + controlComponent: ComponentType; + previewComponent?: ComponentType; + globalStyles?: any; + schema?: Record; + allowMapValue?: boolean; +} + +export interface CmsWidget { + control: ComponentType>>; + preview?: ComponentType>>; + globalStyles?: any; + schema?: Record; + allowMapValue?: boolean; +} + +export type CmsWidgetValueSerializer = any; // TODO: type properly + +export type CmsMediaLibraryOptions = any; // TODO: type properly + +export interface CmsMediaLibrary { + name: string; + config?: CmsMediaLibraryOptions; +} + +export interface CmsEventListener { + name: 'prePublish' | 'postPublish' | 'preUnpublish' | 'postUnpublish' | 'preSave' | 'postSave'; + handler: ({ + entry, + author, + }: { + entry: Map; + author: { login: string; name: string }; + }) => any; +} + +export type CmsEventListenerOptions = any; // TODO: type properly + +export type CmsLocalePhrases = any; // TODO: type properly + +export type Formatter = { + fromFile(content: string): unknown; + toFile(data: object, sortedKeys?: string[], comments?: Record): string; +}; + +export interface CmsRegistry { + backends: { + [name: string]: CmsRegistryBackend; + }; + templates: { + [name: string]: ComponentType; + }; + previewStyles: PreviewStyle[]; + widgets: { + [name: string]: CmsWidget; + }; + editorComponents: Map; + remarkPlugins: Pluggable[]; + widgetValueSerializers: { + [name: string]: CmsWidgetValueSerializer; + }; + mediaLibraries: CmsMediaLibrary[]; + locales: { + [name: string]: CmsLocalePhrases; + }; + formats: { + [name: string]: { + extension: string; + formatter: Formatter; + }; + }; + eventHandlers: { + [name in CmsEventListener['name']]: Array<{ + handler: CmsEventListener['handler']; + options: CmsEventListenerOptions; + }>; + }; +} + +type GetAssetFunction = (asset: string) => { + url: string; + path: string; + field?: any; + fileObj: File; +}; + +export type PreviewTemplateComponentProps = { + entry: Map; + collection: Map; + getCollection: (collectionName: string, slug?: string) => Promise[]>; + widgetFor: (name: any, fields?: any, values?: any, fieldsMetaData?: any) => JSX.Element | null; + widgetsFor: (name: any) => any; + getAsset: GetAssetFunction; + boundGetAsset: (collection: any, path: any) => GetAssetFunction; + fieldsMetaData: Map; + config: Map; + fields: List>; + isLoadingAsset: boolean; + window: Window; + document: Document; +}; + +export interface CMS { + getBackend: (name: string) => CmsRegistryBackend | undefined; + getEditorComponents: () => Map; + getRemarkPlugins: () => Array; + getLocale: (locale: string) => CmsLocalePhrases | undefined; + getMediaLibrary: (name: string) => CmsMediaLibrary | undefined; + getPreviewStyles: () => PreviewStyle[]; + getPreviewTemplate: (name: string) => ComponentType | undefined; + getWidget: (name: string) => CmsWidget | undefined; + getWidgetValueSerializer: (widgetName: string) => CmsWidgetValueSerializer | undefined; + init: (options?: InitOptions) => void; + registerBackend: (name: string, backendClass: CmsBackendClass) => void; + registerEditorComponent: (options: EditorComponentOptions) => void; + registerRemarkPlugin: (plugin: Pluggable) => void; + registerEventListener: ( + eventListener: CmsEventListener, + options?: CmsEventListenerOptions, + ) => void; + registerLocale: (locale: string, phrases: CmsLocalePhrases) => void; + registerMediaLibrary: (mediaLibrary: CmsMediaLibrary, options?: CmsMediaLibraryOptions) => void; + registerPreviewStyle: (filePath: string, options?: PreviewStyleOptions) => void; + registerPreviewTemplate: ( + name: string, + component: ComponentType, + ) => void; + registerWidget: ( + widget: string | CmsWidgetParam | CmsWidgetParam[], + control?: ComponentType | string, + preview?: ComponentType, + ) => void; + registerWidgetValueSerializer: (widgetName: string, serializer: CmsWidgetValueSerializer) => void; + resolveWidget: (name: string) => CmsWidget | undefined; + registerCustomFormat: (name: string, extension: string, formatter: Formatter) => void; +} diff --git a/packages/decap-cms-core/src/types/redux.ts b/packages/decap-cms-core/src/types/redux.ts index f88f5becdc76..fb03d0f91da3 100644 --- a/packages/decap-cms-core/src/types/redux.ts +++ b/packages/decap-cms-core/src/types/redux.ts @@ -322,6 +322,7 @@ export interface CmsCollection { delete?: boolean; editor?: { preview?: boolean; + visualEditing?: boolean; }; publish?: boolean; nested?: { @@ -498,13 +499,14 @@ export type Filter = Map>; // collection.field.ac export type Group = Map>; // collection.field.active -export type GroupOfEntries = { +export type EntryGroup = { id: string; label: string; value: string | boolean | undefined; - paths: Set; }; +export type GroupOfEntries = EntryGroup & { paths: Set }; + export type Entities = StaticallyTypedRecord; export type Entries = StaticallyTypedRecord<{ diff --git a/packages/decap-cms-core/src/valueObjects/EditorComponent.js b/packages/decap-cms-core/src/valueObjects/EditorComponent.ts similarity index 82% rename from packages/decap-cms-core/src/valueObjects/EditorComponent.js rename to packages/decap-cms-core/src/valueObjects/EditorComponent.ts index 710f3470e4ae..9fabfdeccddc 100644 --- a/packages/decap-cms-core/src/valueObjects/EditorComponent.js +++ b/packages/decap-cms-core/src/valueObjects/EditorComponent.ts @@ -1,13 +1,17 @@ import { fromJS } from 'immutable'; import { isFunction } from 'lodash'; +import type { EditorComponentOptions } from '../types'; + const catchesNothing = /.^/; function bind(fn) { return isFunction(fn) && fn.bind(null); } -export default function createEditorComponent(config) { +export default function createEditorComponent( + config: EditorComponentOptions, +): EditorComponentOptions { const { id = null, label = 'unnamed component', diff --git a/packages/decap-cms-core/tsconfig.json b/packages/decap-cms-core/tsconfig.json new file mode 100644 index 000000000000..902a9da76b50 --- /dev/null +++ b/packages/decap-cms-core/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "noImplicitAny": false, + "strictNullChecks": false, + "strictFunctionTypes": false, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-default-exports/package.json b/packages/decap-cms-default-exports/package.json index 30837512d5ca..039b59af229b 100644 --- a/packages/decap-cms-default-exports/package.json +++ b/packages/decap-cms-default-exports/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-default-exports", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-default-exports.js", "license": "MIT", "keywords": [ @@ -16,7 +17,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-default-exports/tsconfig.json b/packages/decap-cms-default-exports/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-default-exports/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-editor-component-image/package.json b/packages/decap-cms-editor-component-image/package.json index 20646619a9bc..cdd28d277d00 100644 --- a/packages/decap-cms-editor-component-image/package.json +++ b/packages/decap-cms-editor-component-image/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-editor-component-image", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-editor-component-image.js", "license": "MIT", "keywords": [ @@ -16,10 +17,13 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "devDependencies": { - "cross-env": "^7.0.0" + "cross-env": "^7.0.0", + "decap-cms-core": "^3.0.0" }, "peerDependencies": { "react": "^18.2.0" diff --git a/packages/decap-cms-editor-component-image/src/index.js b/packages/decap-cms-editor-component-image/src/index.tsx similarity index 73% rename from packages/decap-cms-editor-component-image/src/index.js rename to packages/decap-cms-editor-component-image/src/index.tsx index 88e56b49edb4..fd830595d8be 100644 --- a/packages/decap-cms-editor-component-image/src/index.js +++ b/packages/decap-cms-editor-component-image/src/index.tsx @@ -1,6 +1,8 @@ import React from 'react'; -const image = { +import type { EditorComponentOptions } from 'decap-cms-core'; + +const image: EditorComponentOptions = { label: 'Image', id: 'image', fromBlock: match => @@ -9,11 +11,11 @@ const image = { alt: match[1], title: match[4], }, - toBlock: ({ alt, image, title }) => + toBlock: ({ alt, image, title }: any) => `![${alt || ''}](${image || ''}${title ? ` "${title.replace(/"/g, '\\"')}"` : ''})`, // eslint-disable-next-line react/display-name - toPreview: ({ alt, image, title }, getAsset, fields) => { - const imageField = fields?.find(f => f.get('widget') === 'image'); + toPreview: ({ alt, image, title }: any, getAsset: any, fields: any) => { + const imageField = fields?.find((f: any) => f.get('widget') === 'image'); const src = getAsset(image, imageField); return {alt; }, diff --git a/packages/decap-cms-editor-component-image/tsconfig.json b/packages/decap-cms-editor-component-image/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-editor-component-image/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-lib-auth/package.json b/packages/decap-cms-lib-auth/package.json index 1d981305a625..8a9b4bae375a 100644 --- a/packages/decap-cms-lib-auth/package.json +++ b/packages/decap-cms-lib-auth/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-lib-auth.js", "license": "MIT", "files": [ @@ -18,7 +19,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "immutable": "^3.7.6", diff --git a/packages/decap-cms-lib-auth/tsconfig.json b/packages/decap-cms-lib-auth/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-lib-auth/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-lib-util/package.json b/packages/decap-cms-lib-util/package.json index 2f9c59073b49..0d7ccb56a271 100644 --- a/packages/decap-cms-lib-util/package.json +++ b/packages/decap-cms-lib-util/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-lib-util.js", "license": "MIT", "keywords": [ @@ -14,7 +15,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "js-sha256": "^0.9.0", @@ -24,5 +27,8 @@ "peerDependencies": { "immutable": "^3.7.6", "lodash": "^4.17.11" + }, + "devDependencies": { + "@types/semaphore": "^1.1.4" } } diff --git a/packages/decap-cms-lib-util/tsconfig.json b/packages/decap-cms-lib-util/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-lib-util/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-lib-widgets/package.json b/packages/decap-cms-lib-widgets/package.json index 2a2668d78775..b00d4c7d5987 100644 --- a/packages/decap-cms-lib-widgets/package.json +++ b/packages/decap-cms-lib-widgets/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-widgets", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-lib-widgets.js", "license": "MIT", "keywords": [ @@ -14,7 +15,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "dayjs": "^1.11.10" diff --git a/packages/decap-cms-lib-widgets/tsconfig.json b/packages/decap-cms-lib-widgets/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-lib-widgets/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-locales/package.json b/packages/decap-cms-locales/package.json index e84bef19908d..b90f2f30bffe 100644 --- a/packages/decap-cms-locales/package.json +++ b/packages/decap-cms-locales/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-locales.js", "keywords": [ "decap-cms" @@ -14,6 +15,8 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" } } diff --git a/packages/decap-cms-locales/tsconfig.json b/packages/decap-cms-locales/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-locales/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-media-library-cloudinary/package.json b/packages/decap-cms-media-library-cloudinary/package.json index adfa6598a037..6bd7f378e0b0 100644 --- a/packages/decap-cms-media-library-cloudinary/package.json +++ b/packages/decap-cms-media-library-cloudinary/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-media-library-cloudinary", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-media-library-cloudinary.js", "license": "MIT", "keywords": [ @@ -21,7 +22,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "decap-cms-lib-util": "^3.0.0" diff --git a/packages/decap-cms-media-library-cloudinary/tsconfig.json b/packages/decap-cms-media-library-cloudinary/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-media-library-cloudinary/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-media-library-uploadcare/package.json b/packages/decap-cms-media-library-uploadcare/package.json index 3a1ff06f70b4..1c8970cbad09 100644 --- a/packages/decap-cms-media-library-uploadcare/package.json +++ b/packages/decap-cms-media-library-uploadcare/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-media-library-uploadcare", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-media-library-uploadcare.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "uploadcare-widget": "^3.7.0", diff --git a/packages/decap-cms-media-library-uploadcare/tsconfig.json b/packages/decap-cms-media-library-uploadcare/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-media-library-uploadcare/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-ui-default/package.json b/packages/decap-cms-ui-default/package.json index da0de26fc859..ba11f850a489 100644 --- a/packages/decap-cms-ui-default/package.json +++ b/packages/decap-cms-ui-default/package.json @@ -6,6 +6,7 @@ "bugs": "https://github.com/decaporg/decap-cms/issues", "license": "MIT", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-ui-default.js", "keywords": [ "decap-cms" @@ -14,7 +15,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "react-aria-menubutton": "^7.0.0", diff --git a/packages/decap-cms-ui-default/tsconfig.json b/packages/decap-cms-ui-default/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-ui-default/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-boolean/package.json b/packages/decap-cms-widget-boolean/package.json index 46970028664a..cd00c5d22508 100644 --- a/packages/decap-cms-widget-boolean/package.json +++ b/packages/decap-cms-widget-boolean/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-boolean", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-boolean.js", "license": "MIT", "keywords": [ @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-widget-boolean/tsconfig.json b/packages/decap-cms-widget-boolean/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-boolean/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-code/package.json b/packages/decap-cms-widget-code/package.json index e5a9d0257355..35d5bc9288dd 100644 --- a/packages/decap-cms-widget-code/package.json +++ b/packages/decap-cms-widget-code/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-code", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-code.js", "license": "MIT", "keywords": [ @@ -20,7 +21,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward", + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc", "process:languages": "node ./scripts/process-languages" }, "peerDependencies": { diff --git a/packages/decap-cms-widget-code/tsconfig.json b/packages/decap-cms-widget-code/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-code/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-colorstring/package.json b/packages/decap-cms-widget-colorstring/package.json index c0515c6c9644..87fb3b35781b 100644 --- a/packages/decap-cms-widget-colorstring/package.json +++ b/packages/decap-cms-widget-colorstring/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-colorstring", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-colorstring.js", "license": "MIT", "keywords": [ @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "react-color": "^2.18.1", diff --git a/packages/decap-cms-widget-colorstring/tsconfig.json b/packages/decap-cms-widget-colorstring/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-colorstring/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-datetime/package.json b/packages/decap-cms-widget-datetime/package.json index c7df361d3bcd..ad96b5715e07 100644 --- a/packages/decap-cms-widget-datetime/package.json +++ b/packages/decap-cms-widget-datetime/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-datetime", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-datetime.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "dayjs": "^1.11.10" diff --git a/packages/decap-cms-widget-datetime/tsconfig.json b/packages/decap-cms-widget-datetime/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-datetime/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-file/package.json b/packages/decap-cms-widget-file/package.json index 633f0aa13bf3..a12535f44138 100644 --- a/packages/decap-cms-widget-file/package.json +++ b/packages/decap-cms-widget-file/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-file", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-file.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "@dnd-kit/core": "^6.0.8", diff --git a/packages/decap-cms-widget-file/tsconfig.json b/packages/decap-cms-widget-file/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-file/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-image/package.json b/packages/decap-cms-widget-image/package.json index 9c300d33c298..1f6f2b5106cb 100644 --- a/packages/decap-cms-widget-image/package.json +++ b/packages/decap-cms-widget-image/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-image", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-image.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-widget-image/src/index.js b/packages/decap-cms-widget-image/src/index.ts similarity index 100% rename from packages/decap-cms-widget-image/src/index.js rename to packages/decap-cms-widget-image/src/index.ts diff --git a/packages/decap-cms-widget-image/tsconfig.json b/packages/decap-cms-widget-image/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-image/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-list/package.json b/packages/decap-cms-widget-list/package.json index e312aa084726..15f4408b0d30 100644 --- a/packages/decap-cms-widget-list/package.json +++ b/packages/decap-cms-widget-list/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-list", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-list.js", "license": "MIT", "keywords": [ @@ -18,7 +19,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "@dnd-kit/core": "^6.0.8", diff --git a/packages/decap-cms-widget-list/tsconfig.json b/packages/decap-cms-widget-list/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-list/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-map/package.json b/packages/decap-cms-widget-map/package.json index c4506c2f4887..39758e2261d3 100644 --- a/packages/decap-cms-widget-map/package.json +++ b/packages/decap-cms-widget-map/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-map", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-map.js", "license": "MIT", "keywords": [ @@ -18,7 +19,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-widget-map/tsconfig.json b/packages/decap-cms-widget-map/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-map/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-markdown/package.json b/packages/decap-cms-widget-markdown/package.json index 3f382d0e03df..505be2b02072 100644 --- a/packages/decap-cms-widget-markdown/package.json +++ b/packages/decap-cms-widget-markdown/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-markdown", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-markdown.js", "license": "MIT", "keywords": [ @@ -18,7 +19,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "dompurify": "^2.2.6", diff --git a/packages/decap-cms-widget-markdown/src/index.js b/packages/decap-cms-widget-markdown/src/index.ts similarity index 100% rename from packages/decap-cms-widget-markdown/src/index.js rename to packages/decap-cms-widget-markdown/src/index.ts diff --git a/packages/decap-cms-widget-markdown/src/serializers/__tests__/slate.spec.js b/packages/decap-cms-widget-markdown/src/serializers/__tests__/slate.spec.js index 9f3770fa5e96..cfa82dcccb98 100644 --- a/packages/decap-cms-widget-markdown/src/serializers/__tests__/slate.spec.js +++ b/packages/decap-cms-widget-markdown/src/serializers/__tests__/slate.spec.js @@ -2,7 +2,7 @@ import { flow } from 'lodash'; -import h from '../../../test-helpers/h'; +import h from '../test-helpers/h'; import { markdownToSlate, slateToMarkdown } from '../index'; const process = flow([markdownToSlate, slateToMarkdown]); diff --git a/packages/decap-cms-widget-markdown/test-helpers/h.js b/packages/decap-cms-widget-markdown/src/serializers/test-helpers/h.js similarity index 100% rename from packages/decap-cms-widget-markdown/test-helpers/h.js rename to packages/decap-cms-widget-markdown/src/serializers/test-helpers/h.js diff --git a/packages/decap-cms-widget-markdown/tsconfig.json b/packages/decap-cms-widget-markdown/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-markdown/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-number/package.json b/packages/decap-cms-widget-number/package.json index 02f4135e2485..3baca5f247d8 100644 --- a/packages/decap-cms-widget-number/package.json +++ b/packages/decap-cms-widget-number/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-number", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-number.js", "license": "MIT", "keywords": [ @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "decap-cms-ui-default": "^3.0.0", diff --git a/packages/decap-cms-widget-number/tsconfig.json b/packages/decap-cms-widget-number/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-number/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-object/package.json b/packages/decap-cms-widget-object/package.json index 1b5e6489913d..d4e2db7fe586 100644 --- a/packages/decap-cms-widget-object/package.json +++ b/packages/decap-cms-widget-object/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-object", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-object.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "@emotion/react": "^11.11.1", diff --git a/packages/decap-cms-widget-object/src/index.js b/packages/decap-cms-widget-object/src/index.ts similarity index 100% rename from packages/decap-cms-widget-object/src/index.js rename to packages/decap-cms-widget-object/src/index.ts diff --git a/packages/decap-cms-widget-object/tsconfig.json b/packages/decap-cms-widget-object/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-object/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-relation/package.json b/packages/decap-cms-widget-relation/package.json index d6bf32ee191f..f9c06143a324 100644 --- a/packages/decap-cms-widget-relation/package.json +++ b/packages/decap-cms-widget-relation/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-relation", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-relation.js", "license": "MIT", "keywords": [ @@ -18,7 +19,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "@dnd-kit/core": "^6.0.8", diff --git a/packages/decap-cms-widget-relation/tsconfig.json b/packages/decap-cms-widget-relation/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-relation/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-select/package.json b/packages/decap-cms-widget-select/package.json index aad6c506b478..cd81f67baf4e 100644 --- a/packages/decap-cms-widget-select/package.json +++ b/packages/decap-cms-widget-select/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-select", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-select.js", "license": "MIT", "keywords": [ @@ -19,7 +20,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "decap-cms-lib-widgets": "^3.0.0", diff --git a/packages/decap-cms-widget-select/tsconfig.json b/packages/decap-cms-widget-select/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-select/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-string/package.json b/packages/decap-cms-widget-string/package.json index def7f3dc1816..3b264ed9e19a 100644 --- a/packages/decap-cms-widget-string/package.json +++ b/packages/decap-cms-widget-string/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-string", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-string.js", "license": "MIT", "keywords": [ @@ -17,7 +18,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "peerDependencies": { "decap-cms-ui-default": "^3.0.0", diff --git a/packages/decap-cms-widget-string/tsconfig.json b/packages/decap-cms-widget-string/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-string/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-cms-widget-text/package.json b/packages/decap-cms-widget-text/package.json index 4c108d0bd1f2..b58d93ec5f34 100644 --- a/packages/decap-cms-widget-text/package.json +++ b/packages/decap-cms-widget-text/package.json @@ -6,6 +6,7 @@ "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-widget-text", "bugs": "https://github.com/decaporg/decap-cms/issues", "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", "main": "dist/decap-cms-widget-text.js", "license": "MIT", "keywords": [ @@ -20,7 +21,9 @@ "scripts": { "develop": "npm run build:esm -- --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" + "build:esm": "run-p build:types build:babel", + "build:babel": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward --extensions \".js,.jsx,.ts,.tsx\"", + "build:types": "tsc" }, "dependencies": { "react-textarea-autosize": "^8.0.0" diff --git a/packages/decap-cms-widget-text/tsconfig.json b/packages/decap-cms-widget-text/tsconfig.json new file mode 100644 index 000000000000..2caecd21f852 --- /dev/null +++ b/packages/decap-cms-widget-text/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/packages/decap-server/tsconfig.json b/packages/decap-server/tsconfig.json index a847f832cafa..de552cfa7ad6 100644 --- a/packages/decap-server/tsconfig.json +++ b/packages/decap-server/tsconfig.json @@ -12,6 +12,7 @@ "noImplicitAny": true, "noUnusedLocals": true, "noUnusedParameters": true, + "skipLibCheck": true, "sourceMap": true }, "include": ["src/**/*"], diff --git a/tsconfig.json b/tsconfig.json index 732806af3e16..8ca9f4d40b13 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,59 @@ { "compilerOptions": { + "composite": true, "declaration": true, + "emitDeclarationOnly": true, "jsx": "react", "target": "esnext", "module": "esnext", "moduleResolution": "node", "esModuleInterop": true, - "noEmit": true, "strict": true, "isolatedModules": true, "skipLibCheck": true, "allowJs": true, "noUnusedLocals": true, "noUnusedParameters": true, - "useUnknownInCatchVariables": false, - "baseUrl": "./", - "paths": { - "decap-cms-backend-bitbucket": ["packages/decap-cms-backend-bitbucket/src"], - "decap-cms-backend-github": ["packages/decap-cms-backend-github/src"], - "decap-cms-backend-gitlab": ["packages/decap-cms-backend-gitlab/src"], - "decap-cms-lib-util": ["packages/decap-cms-lib-util/src"], - "decap-cms-lib-widgets": ["packages/decap-cms-lib-widgets/src"] - } - }, - "include": ["**/src/**/*"], - "exclude": ["node_modules", "**/*.spec.ts"] + "useUnknownInCatchVariables": false, + }, + "references": [ + {"path": "packages/decap-cms-app"}, + {"path": "packages/decap-cms-backend-aws-cognito-github-proxy"}, + {"path": "packages/decap-cms-backend-azure"}, + {"path": "packages/decap-cms-backend-bitbucket"}, + {"path": "packages/decap-cms-backend-git-gateway"}, + {"path": "packages/decap-cms-backend-gitea"}, + {"path": "packages/decap-cms-backend-github"}, + {"path": "packages/decap-cms-backend-gitlab"}, + {"path": "packages/decap-cms-backend-proxy"}, + {"path": "packages/decap-cms-backend-test"}, + {"path": "packages/decap-cms-core"}, + {"path": "packages/decap-cms-default-exports"}, + {"path": "packages/decap-cms-editor-component-image"}, + {"path": "packages/decap-cms-lib-auth"}, + {"path": "packages/decap-cms-lib-util"}, + {"path": "packages/decap-cms-lib-widgets"}, + {"path": "packages/decap-cms-locales"}, + {"path": "packages/decap-cms-media-library-cloudinary"}, + {"path": "packages/decap-cms-media-library-uploadcare"}, + {"path": "packages/decap-cms-ui-default"}, + {"path": "packages/decap-cms-widget-boolean"}, + {"path": "packages/decap-cms-widget-code"}, + {"path": "packages/decap-cms-widget-colorstring"}, + {"path": "packages/decap-cms-widget-datetime"}, + {"path": "packages/decap-cms-widget-file"}, + {"path": "packages/decap-cms-widget-image"}, + {"path": "packages/decap-cms-widget-list"}, + {"path": "packages/decap-cms-widget-map"}, + {"path": "packages/decap-cms-widget-markdown"}, + {"path": "packages/decap-cms-widget-number"}, + {"path": "packages/decap-cms-widget-object"}, + {"path": "packages/decap-cms-widget-relation"}, + {"path": "packages/decap-cms-widget-select"}, + {"path": "packages/decap-cms-widget-string"}, + {"path": "packages/decap-cms-widget-text"}, + {"path": "packages/decap-server"} + ], + "include": [], + "exclude": ["**/*.spec.*", "**/*.test.*"] }