diff --git a/.eslintrc.js b/.eslintrc.js index 23dec113db66..c5b45485575f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -100,6 +100,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], @@ -112,4 +113,5 @@ module.exports = { }, }, ], + ignorePatterns: ['**/dist/**'], }; diff --git a/.gitignore b/.gitignore index f1f4c9cfd15f..b942f511a408 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ coverage/ .temp/ storybook-static/ .nx +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index a49fe6c1ec1d..2bdf1570fa06 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', '^#home-directory$': 'clean-stack/home-directory.js', }, diff --git a/package-lock.json b/package-lock.json index 68cc98e9232e..b2c483ab3db2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "stylelint-config-standard-scss": "^3.0.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", @@ -2084,6 +2084,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "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": "18.6.1", "dev": true, @@ -7487,6 +7500,12 @@ "dev": true, "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.7.1", "dev": true, @@ -31295,14 +31314,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -33272,6 +33293,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", @@ -33293,6 +33317,9 @@ "path-browserify": "^1.0.1", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33316,6 +33343,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", @@ -33399,6 +33429,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", @@ -33426,6 +33459,9 @@ "path-browserify": "^1.0.1", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33449,6 +33485,9 @@ "path-browserify": "^1.0.1", "semaphore": "^1.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "peerDependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", @@ -33547,13 +33586,13 @@ "@types/history": "^4.7.8", "@types/iarna__toml": "^2.0.5", "@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", @@ -33601,7 +33640,8 @@ "version": "3.3.0", "license": "MIT", "devDependencies": { - "cross-env": "^7.0.0" + "cross-env": "^7.0.0", + "decap-cms-core": "^3.0.0" }, "peerDependencies": { "react": "^19.1.0" @@ -33624,6 +33664,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 521fd64ed4fa..481e980c3e43 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", @@ -134,7 +134,7 @@ "stylelint-config-standard-scss": "^3.0.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 a883cb7c414f..300f69c7d2b8 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..f9188d753ccc --- /dev/null +++ b/packages/decap-cms-app/tsconfig.json @@ -0,0 +1,42 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-backend-aws-cognito-github-proxy"}, + {"path": "../decap-cms-backend-azure"}, + {"path": "../decap-cms-backend-bitbucket"}, + {"path": "../decap-cms-backend-git-gateway"}, + {"path": "../decap-cms-backend-gitea"}, + {"path": "../decap-cms-backend-github"}, + {"path": "../decap-cms-backend-gitlab"}, + {"path": "../decap-cms-backend-proxy"}, + {"path": "../decap-cms-backend-test"}, + {"path": "../decap-cms-core"}, + {"path": "../decap-cms-editor-component-image"}, + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-locales"}, + {"path": "../decap-cms-ui-default"}, + {"path": "../decap-cms-widget-boolean"}, + {"path": "../decap-cms-widget-code"}, + {"path": "../decap-cms-widget-colorstring"}, + {"path": "../decap-cms-widget-datetime"}, + {"path": "../decap-cms-widget-file"}, + {"path": "../decap-cms-widget-image"}, + {"path": "../decap-cms-widget-list"}, + {"path": "../decap-cms-widget-map"}, + {"path": "../decap-cms-widget-markdown"}, + {"path": "../decap-cms-widget-number"}, + {"path": "../decap-cms-widget-object"}, + {"path": "../decap-cms-widget-relation"}, + {"path": "../decap-cms-widget-select"}, + {"path": "../decap-cms-widget-string"}, + {"path": "../decap-cms-widget-text"} + ] +} 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 f03183a944e6..40af31050875 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", @@ -41,5 +44,8 @@ "lodash": "^4.17.11", "prop-types": "^15.7.2", "react": "^19.1.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..8dbb98cf362b --- /dev/null +++ b/packages/decap-cms-backend-aws-cognito-github-proxy/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-backend-github"}, + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-azure/package.json b/packages/decap-cms-backend-azure/package.json index a4710a957533..70cdb751af54 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", @@ -35,6 +38,9 @@ "prop-types": "^15.7.2", "react": "^19.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "browser": { "path": "path-browserify" } diff --git a/packages/decap-cms-backend-azure/tsconfig.json b/packages/decap-cms-backend-azure/tsconfig.json new file mode 100644 index 000000000000..8aca5d92328d --- /dev/null +++ b/packages/decap-cms-backend-azure/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-bitbucket/package.json b/packages/decap-cms-backend-bitbucket/package.json index 7b59e3be63c1..a1d11a2e8af8 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", @@ -37,6 +40,9 @@ "prop-types": "^15.7.2", "react": "^19.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "browser": { "path": "path-browserify" } diff --git a/packages/decap-cms-backend-bitbucket/src/API.ts b/packages/decap-cms-backend-bitbucket/src/API.ts index b2cab29f6c37..b55f95cc3e04 100644 --- a/packages/decap-cms-backend-bitbucket/src/API.ts +++ b/packages/decap-cms-backend-bitbucket/src/API.ts @@ -470,7 +470,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 2dfa49c2cb51..82b8b728411f 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..8aca5d92328d --- /dev/null +++ b/packages/decap-cms-backend-bitbucket/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-git-gateway/package.json b/packages/decap-cms-backend-git-gateway/package.json index 158cadced740..589761b021a3 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 c44606d42ef5..7d0b3fef3ade 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..b1906754c714 --- /dev/null +++ b/packages/decap-cms-backend-git-gateway/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-backend-bitbucket"}, + {"path": "../decap-cms-backend-github"}, + {"path": "../decap-cms-backend-gitlab"}, + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-gitea/package.json b/packages/decap-cms-backend-gitea/package.json index b2478c42f1a2..ee97fa18082a 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": "^19.1.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..8aca5d92328d --- /dev/null +++ b/packages/decap-cms-backend-gitea/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-github/package.json b/packages/decap-cms-backend-github/package.json index bd7bc242f3dd..e593220180c5 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": { @@ -41,6 +44,9 @@ "prop-types": "^15.7.2", "react": "^19.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "browser": { "path": "path-browserify" } diff --git a/packages/decap-cms-backend-github/src/API.ts b/packages/decap-cms-backend-github/src/API.ts index 13fb7327b692..767c4920a0df 100644 --- a/packages/decap-cms-backend-github/src/API.ts +++ b/packages/decap-cms-backend-github/src/API.ts @@ -223,7 +223,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 1c3f852ad700..1c6c728bf4d7 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..8aca5d92328d --- /dev/null +++ b/packages/decap-cms-backend-github/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-gitlab/package.json b/packages/decap-cms-backend-gitlab/package.json index 6ef610215fec..4f9a2e4adbf8 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", @@ -38,6 +41,9 @@ "prop-types": "^15.7.2", "react": "^19.1.0" }, + "devDependencies": { + "@types/semaphore": "^1.1.4" + }, "browser": { "path": "path-browserify" } diff --git a/packages/decap-cms-backend-gitlab/tsconfig.json b/packages/decap-cms-backend-gitlab/tsconfig.json new file mode 100644 index 000000000000..8aca5d92328d --- /dev/null +++ b/packages/decap-cms-backend-gitlab/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-proxy/package.json b/packages/decap-cms-backend-proxy/package.json index d465292e5f0e..5761a49ceccf 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..3f02507644f3 --- /dev/null +++ b/packages/decap-cms-backend-proxy/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-backend-test/package.json b/packages/decap-cms-backend-test/package.json index 1c05b8451011..378b391d107a 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" }, "dependencies": { "path-browserify": "^1.0.1" diff --git a/packages/decap-cms-backend-test/src/implementation.ts b/packages/decap-cms-backend-test/src/implementation.ts index 62548eb42ded..f06d13199971 100644 --- a/packages/decap-cms-backend-test/src/implementation.ts +++ b/packages/decap-cms-backend-test/src/implementation.ts @@ -26,7 +26,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 = { @@ -54,7 +54,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('/'); @@ -358,7 +358,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..3f02507644f3 --- /dev/null +++ b/packages/decap-cms-backend-test/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-core/package.json b/packages/decap-cms-core/package.json index 780e59e37ad0..6de21d74b954 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", @@ -76,7 +77,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", @@ -92,6 +92,7 @@ "@types/history": "^4.7.8", "@types/iarna__toml": "^2.0.5", "@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 0eb8a8742a89..6b60f9cfe256 100644 --- a/packages/decap-cms-core/src/actions/config.ts +++ b/packages/decap-cms-core/src/actions/config.ts @@ -273,10 +273,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; @@ -337,10 +338,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 c8bd3b8e5ed0..4432f9ea50fb 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 6e5f03d9e068..37e5b4c8b538 100644 --- a/packages/decap-cms-core/src/backend.ts +++ b/packages/decap-cms-core/src/backend.ts @@ -293,8 +293,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) { @@ -347,14 +347,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/formats/formats.ts b/packages/decap-cms-core/src/formats/formats.ts index ef44cc7a3dd2..ae16dfdfd199 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 5bce1d960999..4bbca7722bc5 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-core/src/lib/stega.ts b/packages/decap-cms-core/src/lib/stega.ts index 0cbeaaf63de6..ba49ee96f28b 100644 --- a/packages/decap-cms-core/src/lib/stega.ts +++ b/packages/decap-cms-core/src/lib/stega.ts @@ -3,7 +3,7 @@ import { vercelStegaEncode } from '@vercel/stega'; 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 3ddcaef5821e..f8f378ad83aa 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 653b77aee867..cf2140294e9e 100644 --- a/packages/decap-cms-core/src/reducers/entries.ts +++ b/packages/decap-cms-core/src/reducers/entries.ts @@ -66,6 +66,7 @@ import type { EntriesGroupRequestPayload, EntriesGroupFailurePayload, GroupOfEntries, + EntryGroup, } from '../types/redux'; const { keyToPathArray } = stringTemplate; @@ -457,7 +458,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'); @@ -466,7 +467,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/index.ts b/packages/decap-cms-core/src/types/index.ts new file mode 100644 index 000000000000..c68b008e1ab1 --- /dev/null +++ b/packages/decap-cms-core/src/types/index.ts @@ -0,0 +1,657 @@ +/* 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; + allow_remove?: boolean; + allow_reorder?: 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 CmsFieldRichText { + widget: 'richtext'; + 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; + visualEditing?: boolean; +} + +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 + | CmsFieldRichText + | 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; + preview_path_preserve_slashes?: boolean; + 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 SortableField { + field: string; + label?: string; + default_sort?: boolean | 'asc' | 'desc'; +} + +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; + preview_path_preserve_slashes?: boolean; + create?: boolean; + delete?: boolean; + hide?: boolean; + editor?: { + preview?: boolean; + visualEditing?: 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 | SortableField)[]; + view_filters?: ViewFilter[]; + view_groups?: ViewGroup[]; + i18n?: boolean | CmsI18nConfig; + + /** + * @deprecated Use sortable_fields instead + */ + sortableFields?: (string | SortableField)[]; +} + +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; + signoff_commits?: 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 CmsIssueReports { + url?: string; +} + +export interface CmsConfig { + backend: CmsBackend; + collections: CmsCollection[]; + locale?: string; + site_url?: string; + display_url?: string; + logo_url?: string; + logo?: { + src: string; + show_in_header?: boolean; + }; + 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; + issue_reports?: CmsIssueReports; + 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 37cb34263d8f..2159982afc2b 100644 --- a/packages/decap-cms-core/src/types/redux.ts +++ b/packages/decap-cms-core/src/types/redux.ts @@ -536,13 +536,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 d411218b3ab1..822608653220 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/isFunction'; +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..b17a87e023a7 --- /dev/null +++ b/packages/decap-cms-core/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "noImplicitAny": false, + "strictNullChecks": false, + "strictFunctionTypes": false, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-auth"}, + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-default-exports/package.json b/packages/decap-cms-default-exports/package.json index ea30f7d9a571..ee717afcce0a 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 5282acf73908..a972a1675fe4 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": "^19.1.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 9541d2236e48..ec7135df704a 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..3357777f95e6 --- /dev/null +++ b/packages/decap-cms-editor-component-image/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-core"} + ] +} diff --git a/packages/decap-cms-lib-auth/package.json b/packages/decap-cms-lib-auth/package.json index ca8d4c233a02..d3feb062e755 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 671027e7e6ad..a97ea1ca0c88 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", "files": [ "dist" @@ -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-sha256": "^0.9.0", @@ -27,5 +30,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 36108dcaeecc..53bb800a81a5 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 e8efad17bbbe..7777ee3b3ea4 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 6f7f1dcb593a..744ac72b431f 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..e4c780beced5 --- /dev/null +++ b/packages/decap-cms-media-library-cloudinary/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-util"} + ] +} 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 e8b5b261158d..b5f856ee9981 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 9694f9ac850d..b1dbd733edf7 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-boolean/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-code/package.json b/packages/decap-cms-widget-code/package.json index 1cbb3f14fdf3..6f093124eeec 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-code/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-colorstring/package.json b/packages/decap-cms-widget-colorstring/package.json index 132951f222e0..424d50f0823d 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-colorstring/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-datetime/package.json b/packages/decap-cms-widget-datetime/package.json index 6053ce5efe1d..cd88f3b70af5 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-datetime/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-file/package.json b/packages/decap-cms-widget-file/package.json index eb8a94a42aa8..a8dbe922a13e 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..3f02507644f3 --- /dev/null +++ b/packages/decap-cms-widget-file/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-util"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-image/package.json b/packages/decap-cms-widget-image/package.json index c06a5eab839e..7955e30dd4d0 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..44787061c1c9 --- /dev/null +++ b/packages/decap-cms-widget-image/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"}, + {"path": "../decap-cms-widget-file"} + ] +} diff --git a/packages/decap-cms-widget-list/package.json b/packages/decap-cms-widget-list/package.json index 592c58b59da8..05f3a0b46e90 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..4622e7a80385 --- /dev/null +++ b/packages/decap-cms-widget-list/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-ui-default"}, + {"path": "../decap-cms-widget-object"} + ] +} diff --git a/packages/decap-cms-widget-map/package.json b/packages/decap-cms-widget-map/package.json index 27eb88e7131b..c11a2d10295e 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-map/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-markdown/package.json b/packages/decap-cms-widget-markdown/package.json index 3cfe12353133..f82571f7a612 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": { "detab": "^2.0.4", 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 a0bb78b64dfb..dea8b2cb6746 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/flow'; -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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-markdown/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-number/package.json b/packages/decap-cms-widget-number/package.json index df243732c25e..5d8b1e577c05 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-number/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-object/package.json b/packages/decap-cms-widget-object/package.json index 6478dc156d78..de5028d937f7 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..a4242f2d12f4 --- /dev/null +++ b/packages/decap-cms-widget-object/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-relation/package.json b/packages/decap-cms-widget-relation/package.json index 2f313a67264b..24379a6a977e 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..a4242f2d12f4 --- /dev/null +++ b/packages/decap-cms-widget-relation/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-select/package.json b/packages/decap-cms-widget-select/package.json index a22dd9293ee7..03ddb04a00b1 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..a4242f2d12f4 --- /dev/null +++ b/packages/decap-cms-widget-select/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-lib-widgets"}, + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-string/package.json b/packages/decap-cms-widget-string/package.json index f47f3a3cc5c2..cdea0e4078ff 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-string/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} diff --git a/packages/decap-cms-widget-text/package.json b/packages/decap-cms-widget-text/package.json index d589ec955f46..6906e6d3f8bb 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..089100c8f9ca --- /dev/null +++ b/packages/decap-cms-widget-text/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/esm", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [ + {"path": "../decap-cms-ui-default"} + ] +} 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 f953092fe550..6aecf2e5efc2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,13 @@ { "compilerOptions": { + "composite": true, "declaration": true, + "emitDeclarationOnly": true, "jsx": "react", "target": "esnext", "module": "nodenext", "moduleResolution": "nodenext", "esModuleInterop": true, - "noEmit": true, "strict": true, "isolatedModules": true, "skipLibCheck": true, @@ -16,14 +17,87 @@ "useUnknownInCatchVariables": false, "baseUrl": "./", "paths": { + "decap-cms-app": ["packages/decap-cms-app/src"], + "decap-cms-backend-aws-cognito-github-proxy": [ + "packages/decap-cms-backend-aws-cognito-github-proxy/src" + ], + "decap-cms-backend-azure": ["packages/decap-cms-backend-azure/src"], "decap-cms-backend-bitbucket": ["packages/decap-cms-backend-bitbucket/src"], + "decap-cms-backend-git-gateway": ["packages/decap-cms-backend-git-gateway/src"], + "decap-cms-backend-gitea": ["packages/decap-cms-backend-gitea/src"], "decap-cms-backend-github": ["packages/decap-cms-backend-github/src"], "decap-cms-backend-gitlab": ["packages/decap-cms-backend-gitlab/src"], + "decap-cms-backend-proxy": ["packages/decap-cms-backend-proxy/src"], + "decap-cms-backend-test": ["packages/decap-cms-backend-test/src"], + "decap-cms-core": ["packages/decap-cms-core/src"], + "decap-cms-default-exports": ["packages/decap-cms-default-exports/src"], + "decap-cms-editor-component-image": ["packages/decap-cms-editor-component-image/src"], + "decap-cms-lib-auth": ["packages/decap-cms-lib-auth/src"], "decap-cms-lib-util": ["packages/decap-cms-lib-util/src"], "decap-cms-lib-widgets": ["packages/decap-cms-lib-widgets/src"], + "decap-cms-locales": ["packages/decap-cms-locales/src"], + "decap-cms-media-library-cloudinary": [ + "packages/decap-cms-media-library-cloudinary/src" + ], + "decap-cms-media-library-uploadcare": [ + "packages/decap-cms-media-library-uploadcare/src" + ], "decap-cms-ui-default": ["packages/decap-cms-ui-default/src"], + "decap-cms-widget-boolean": ["packages/decap-cms-widget-boolean/src"], + "decap-cms-widget-code": ["packages/decap-cms-widget-code/src"], + "decap-cms-widget-colorstring": ["packages/decap-cms-widget-colorstring/src"], + "decap-cms-widget-datetime": ["packages/decap-cms-widget-datetime/src"], + "decap-cms-widget-file": ["packages/decap-cms-widget-file/src"], + "decap-cms-widget-image": ["packages/decap-cms-widget-image/src"], + "decap-cms-widget-list": ["packages/decap-cms-widget-list/src"], + "decap-cms-widget-map": ["packages/decap-cms-widget-map/src"], + "decap-cms-widget-markdown": ["packages/decap-cms-widget-markdown/src"], + "decap-cms-widget-number": ["packages/decap-cms-widget-number/src"], + "decap-cms-widget-object": ["packages/decap-cms-widget-object/src"], + "decap-cms-widget-relation": ["packages/decap-cms-widget-relation/src"], + "decap-cms-widget-select": ["packages/decap-cms-widget-select/src"], + "decap-cms-widget-string": ["packages/decap-cms-widget-string/src"], + "decap-cms-widget-text": ["packages/decap-cms-widget-text/src"] } }, - "include": ["**/src/**/*"], - "exclude": ["node_modules", "**/*.spec.ts"] + "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": ["node_modules", "**/*.spec.*", "**/*.test.*"] }