add script to generate tsconfig from package.json

This commit is contained in:
Mads Rasmussen
2024-02-09 22:18:36 +01:00
committed by Jacob Overgaard
parent 14f43cd5d3
commit 8ea1de0f26
3 changed files with 223 additions and 153 deletions

View File

@@ -0,0 +1,67 @@
import { readFileSync, writeFileSync } from 'fs';
import { format } from 'prettier';
const packageJsonPath = 'package.json';
const packageJsonData = JSON.parse(readFileSync(packageJsonPath).toString());
const packageJsonName = packageJsonData.name;
const packageJsonExports = packageJsonData.exports;
const tsconfigPath = 'tsconfig.json';
const tsconfigComment = `// Don't edit this file directly. It is generated by /scripts/generate-ts-config.js\n\n`;
const tsConfigBase = {
compilerOptions: {
module: 'esnext',
target: 'ES2020',
lib: ['es2020', 'dom', 'dom.iterable'],
outDir: './types',
allowSyntheticDefaultImports: true,
experimentalDecorators: true,
forceConsistentCasingInFileNames: true,
useDefineForClassFields: false,
baseUrl: '.',
incremental: true,
skipLibCheck: true,
/* Bundler mode */
moduleResolution: 'bundler',
allowImportingTsExtensions: true,
resolveJsonModule: true,
isolatedModules: true,
noEmit: true,
/* Linting */
strict: true,
noFallthroughCasesInSwitch: true,
noImplicitReturns: true,
},
include: ['src/**/*.ts', 'apps/**/*.ts', 'e2e/**/*.ts', 'index.ts', 'storybook/stories/**/*.ts', 'examples/**/*.ts'],
references: [
{
path: './tsconfig.node.json',
},
],
};
const paths = {};
// Iterate over the exports in package.json
for (const [key, value] of Object.entries(packageJsonExports || {})) {
// remove leading ./
if (value) {
const moduleName = key.replace(/^\.\//, '');
// replace ./dist-cms with src and remove /index.js
const modulePath = value.replace(/^\.\/dist-cms/, 'src').replace(/\/index.js$/, '');
const importAlias = `${packageJsonName}/${moduleName}`;
paths[importAlias] = [modulePath];
}
}
tsConfigBase.compilerOptions.paths = paths;
const content = tsconfigComment + JSON.stringify(tsConfigBase, null, ' ');
const formattedContent = await format(content, {
parser: 'json',
});
writeFileSync(tsconfigPath, formattedContent);

View File

@@ -131,7 +131,8 @@
"test:watch": "web-test-runner --watch",
"test": "web-test-runner --coverage",
"wc-analyze:vscode": "wca **/*.element.ts --format vscode --outFile dist-cms/vscode-html-custom-data.json",
"wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json"
"wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json",
"generate:tsconfig": "node ./devops/tsconfig/index.js"
},
"engines": {
"node": ">=20.9 <21",

View File

@@ -1,154 +1,156 @@
{
"compilerOptions": {
"module": "esnext",
"target": "ES2020",
"lib": ["es2020", "dom", "dom.iterable"],
"outDir": "./types",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": false,
"baseUrl": ".",
"incremental": true,
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
/* Linting */
"strict": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"paths": {
// TODO: can we combine these of multiple tsconfigs so each package can hold their own?
// APPS
"@umbraco-cms/backoffice/app": ["src/apps/app"],
"@umbraco-cms/backoffice/external/lit": ["src/external/lit"],
"@umbraco-cms/backoffice/external/lodash": ["src/external/lodash"],
"@umbraco-cms/backoffice/external/monaco-editor": ["src/external/monaco-editor"],
"@umbraco-cms/backoffice/external/openid": ["src/external/openid"],
"@umbraco-cms/backoffice/external/router-slot": ["src/external/router-slot"],
"@umbraco-cms/backoffice/external/rxjs": ["src/external/rxjs"],
"@umbraco-cms/backoffice/external/tinymce": ["src/external/tinymce"],
"@umbraco-cms/backoffice/external/uui": ["src/external/uui"],
"@umbraco-cms/backoffice/external/uuid": ["src/external/uuid"],
"@umbraco-cms/backoffice/external/dompurify": ["src/external/dompurify"],
"@umbraco-cms/backoffice/external/marked": ["src/external/marked"],
"@umbraco-cms/backoffice/backend-api": ["src/external/backend-api"],
"@umbraco-cms/backoffice/class-api": ["src/libs/class-api"],
"@umbraco-cms/backoffice/context-api": ["src/libs/context-api"],
"@umbraco-cms/backoffice/controller-api": ["src/libs/controller-api"],
"@umbraco-cms/backoffice/element-api": ["src/libs/element-api"],
"@umbraco-cms/backoffice/extension-api": ["src/libs/extension-api"],
"@umbraco-cms/backoffice/localization-api": ["src/libs/localization-api"],
"@umbraco-cms/backoffice/observable-api": ["src/libs/observable-api"],
// SHARED
"@umbraco-cms/backoffice/auth": ["src/shared/auth"],
"@umbraco-cms/backoffice/event": ["src/packages/core/event"],
"@umbraco-cms/backoffice/icon": ["src/shared/icon-registry"],
"@umbraco-cms/backoffice/models": ["src/shared/models"],
"@umbraco-cms/backoffice/resources": ["src/shared/resources"],
"@umbraco-cms/backoffice/router": ["src/shared/router"],
"@umbraco-cms/backoffice/style": ["src/shared/style"],
"@umbraco-cms/backoffice/utils": ["src/shared/utils"],
// CORE
"@umbraco-cms/backoffice/action": ["src/packages/core/action"],
"@umbraco-cms/backoffice/collection": ["src/packages/core/collection"],
"@umbraco-cms/backoffice/components": ["src/packages/core/components"],
"@umbraco-cms/backoffice/content-type": ["src/packages/core/content-type"],
"@umbraco-cms/backoffice/debug": ["src/packages/core/debug"],
"@umbraco-cms/backoffice/entity-action": ["src/packages/core/entity-action"],
"@umbraco-cms/backoffice/entity-bulk-action": ["src/packages/core/entity-bulk-action"],
"@umbraco-cms/backoffice/extension-registry": ["src/packages/core/extension-registry"],
"@umbraco-cms/backoffice/server-file-system": ["src/packages/core/server-file-system"],
"@umbraco-cms/backoffice/id": ["src/packages/core/id"],
"@umbraco-cms/backoffice/localization": ["src/packages/core/localization"],
"@umbraco-cms/backoffice/menu": ["src/packages/core/menu"],
"@umbraco-cms/backoffice/modal": ["src/packages/core/modal"],
"@umbraco-cms/backoffice/notification": ["src/packages/core/notification"],
"@umbraco-cms/backoffice/picker-input": ["src/packages/core/picker-input"],
"@umbraco-cms/backoffice/property": ["src/packages/core/property"],
"@umbraco-cms/backoffice/property-action": ["src/packages/core/property-action"],
"@umbraco-cms/backoffice/property-editor": ["src/packages/core/property-editor"],
"@umbraco-cms/backoffice/section": ["src/packages/core/section"],
"@umbraco-cms/backoffice/sorter": ["src/packages/core/sorter"],
"@umbraco-cms/backoffice/store": ["src/packages/core/store"],
"@umbraco-cms/backoffice/themes": ["src/packages/core/themes/index.ts"],
"@umbraco-cms/backoffice/tree": ["src/packages/core/tree"],
"@umbraco-cms/backoffice/variant": ["src/packages/core/variant"],
"@umbraco-cms/backoffice/workspace": ["src/packages/core/workspace"],
"@umbraco-cms/backoffice/culture": ["src/packages/core/culture"],
"@umbraco-cms/backoffice/repository": ["src/packages/core/repository"],
"@umbraco-cms/backoffice/temporary-file": ["src/packages/core/temporary-file"],
"@umbraco-cms/backoffice/data-type": ["./src/packages/core/data-type/index.ts"],
"@umbraco-cms/backoffice/language": ["src/packages/language/index.ts"],
"@umbraco-cms/backoffice/dynamic-root": ["./src/packages/dynamic-root/index.ts"],
"@umbraco-cms/backoffice/logviewer": ["src/packages/log-viewer/index.ts"],
"@umbraco-cms/backoffice/relation-types": ["src/packages/relations/relation-types/index.ts"],
"@umbraco-cms/backoffice/relations": ["src/packages/relations/relations/index.ts"],
"@umbraco-cms/backoffice/tags": ["./src/packages/tags/index.ts"],
"@umbraco-cms/backoffice/static-file": ["./src/packages/static-file/index.ts"],
"@umbraco-cms/backoffice/block": ["./src/packages/block/index.ts"],
"@umbraco-cms/backoffice/audit-log": ["src/packages/audit-log/index.ts"],
"@umbraco-cms/backoffice/dictionary": ["src/packages/dictionary/index.ts"],
// DOCUMENT MANAGEMENT
"@umbraco-cms/backoffice/document": ["./src/packages/documents/documents/index.ts"],
"@umbraco-cms/backoffice/document-blueprint": ["./src/packages/documents/document-blueprints/index.ts"],
"@umbraco-cms/backoffice/document-type": ["./src/packages/documents/document-types/index.ts"],
// MEDIA MANAGEMENT
"@umbraco-cms/backoffice/media": ["./src/packages/media/media/index.ts"],
"@umbraco-cms/backoffice/media-type": ["./src/packages/media/media-types/index.ts"],
// MEMBER MANAGEMENT
"@umbraco-cms/backoffice/member": ["./src/packages/members/members/index.ts"],
"@umbraco-cms/backoffice/member-group": ["./src/packages/members/member-groups/index.ts"],
"@umbraco-cms/backoffice/member-type": ["./src/packages/members/member-types/index.ts"],
// PACKAGE MANAGEMENT
"@umbraco-cms/backoffice/package": ["./src/packages/packages/package/index.ts"],
// USER MANAGEMENT
"@umbraco-cms/backoffice/user-group": ["src/packages/user/user-group"],
"@umbraco-cms/backoffice/current-user": ["src/packages/user/current-user"],
"@umbraco-cms/backoffice/user": ["src/packages/user/user"],
"@umbraco-cms/backoffice/user-permission": ["src/packages/user/user-permission"],
// TEMPLATING
"@umbraco-cms/backoffice/code-editor": ["src/packages/templating/code-editor"],
"@umbraco-cms/backoffice/partial-view": ["./src/packages/templating/partial-views/index.ts"],
"@umbraco-cms/backoffice/stylesheet": ["./src/packages/templating/stylesheets/index.ts"],
"@umbraco-cms/backoffice/template": ["./src/packages/templating/templates/index.ts"],
"@umbraco-cms/backoffice/css": ["src/shared/css/custom-properties.css"],
"@umbraco-cms/internal/lit-element": ["src/shared/lit-element"],
"@umbraco-cms/internal/test-utils": ["utils/test-utils.ts"]
}
},
"include": [
"src/**/*.ts",
"apps/**/*.ts",
"e2e/**/*.ts",
"index.ts",
"storybook/stories/**/*.ts",
"examples/**/*.ts"
],
"references": [
{
"path": "./tsconfig.node.json"
}
]
"compilerOptions": {
"rootDir": "./",
"module": "esnext",
"target": "ES2020",
"lib": ["es2020", "dom", "dom.iterable"],
"outDir": "./types",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": false,
"baseUrl": ".",
"incremental": true,
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"strict": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"paths": {
"@umbraco-cms/backoffice/app": ["src/apps/app"],
"@umbraco-cms/backoffice/class-api": ["src/libs/class-api"],
"@umbraco-cms/backoffice/context-api": ["src/libs/context-api"],
"@umbraco-cms/backoffice/controller-api": ["src/libs/controller-api"],
"@umbraco-cms/backoffice/element-api": ["src/libs/element-api"],
"@umbraco-cms/backoffice/extension-api": ["src/libs/extension-api"],
"@umbraco-cms/backoffice/localization-api": ["src/libs/localization-api"],
"@umbraco-cms/backoffice/observable-api": ["src/libs/observable-api"],
"@umbraco-cms/backoffice/auth": ["src/shared/auth"],
"@umbraco-cms/backoffice/event": ["src/packages/core/event"],
"@umbraco-cms/backoffice/icon": ["src/shared/icon"],
"@umbraco-cms/backoffice/models": ["src/shared/models"],
"@umbraco-cms/backoffice/resources": ["src/shared/resources"],
"@umbraco-cms/backoffice/router": ["src/shared/router"],
"@umbraco-cms/backoffice/style": ["src/shared/style"],
"@umbraco-cms/backoffice/utils": ["src/shared/utils"],
"@umbraco-cms/backoffice/action": ["src/packages/core/action"],
"@umbraco-cms/backoffice/collection": ["src/packages/core/collection"],
"@umbraco-cms/backoffice/components": ["src/packages/core/components"],
"@umbraco-cms/backoffice/content-type": [
"src/packages/core/content-type"
],
"@umbraco-cms/backoffice/culture": ["src/packages/core/culture"],
"@umbraco-cms/backoffice/data-type": ["src/packages/core/data-type"],
"@umbraco-cms/backoffice/debug": ["src/packages/core/debug"],
"@umbraco-cms/backoffice/entity-action": [
"src/packages/core/entity-action"
],
"@umbraco-cms/backoffice/entity-bulk-action": [
"src/packages/core/entity-bulk-action"
],
"@umbraco-cms/backoffice/extension-registry": [
"src/packages/core/extension-registry"
],
"@umbraco-cms/backoffice/server-file-system": [
"src/packages/core/server-file-system"
],
"@umbraco-cms/backoffice/id": ["src/packages/core/id"],
"@umbraco-cms/backoffice/localization": [
"src/packages/core/localization"
],
"@umbraco-cms/backoffice/menu": ["src/packages/core/menu"],
"@umbraco-cms/backoffice/modal": ["src/packages/core/modal"],
"@umbraco-cms/backoffice/notification": [
"src/packages/core/notification"
],
"@umbraco-cms/backoffice/picker-input": [
"src/packages/core/picker-input"
],
"@umbraco-cms/backoffice/property": ["src/packages/core/property"],
"@umbraco-cms/backoffice/property-action": [
"src/packages/core/property-action"
],
"@umbraco-cms/backoffice/property-editor": [
"src/packages/core/property-editor"
],
"@umbraco-cms/backoffice/section": ["src/packages/core/section"],
"@umbraco-cms/backoffice/sorter": ["src/packages/core/sorter"],
"@umbraco-cms/backoffice/store": ["src/packages/core/store"],
"@umbraco-cms/backoffice/themes": ["src/packages/core/themes"],
"@umbraco-cms/backoffice/tree": ["src/packages/core/tree"],
"@umbraco-cms/backoffice/variant": ["src/packages/core/variant"],
"@umbraco-cms/backoffice/workspace": ["src/packages/core/workspace"],
"@umbraco-cms/backoffice/repository": ["src/packages/core/repository"],
"@umbraco-cms/backoffice/temporary-file": [
"src/packages/core/temporary-file"
],
"@umbraco-cms/backoffice/block": ["src/packages/block"],
"@umbraco-cms/backoffice/audit-log": ["src/packages/audit-log"],
"@umbraco-cms/backoffice/dictionary": ["src/packages/dictionary"],
"@umbraco-cms/backoffice/document": ["src/packages/documents/documents"],
"@umbraco-cms/backoffice/document-blueprint": [
"src/packages/documents/document-blueprints"
],
"@umbraco-cms/backoffice/document-type": [
"src/packages/documents/document-types"
],
"@umbraco-cms/backoffice/media": ["src/packages/media/media"],
"@umbraco-cms/backoffice/media-type": ["src/packages/media/media-types"],
"@umbraco-cms/backoffice/member": ["src/packages/members/members"],
"@umbraco-cms/backoffice/member-group": [
"src/packages/members/member-groups"
],
"@umbraco-cms/backoffice/member-type": [
"src/packages/members/member-types"
],
"@umbraco-cms/backoffice/package": ["src/packages/packages/package"],
"@umbraco-cms/backoffice/language": ["src/packages/language"],
"@umbraco-cms/backoffice/dynamic-root": ["src/packages/dynamic-root"],
"@umbraco-cms/backoffice/logviewer": ["src/packages/settings/logviewer"],
"@umbraco-cms/backoffice/relation-type": [
"src/packages/relations/relation-types"
],
"@umbraco-cms/backoffice/relations": ["src/packages/relations/relations"],
"@umbraco-cms/backoffice/tags": ["src/packages/tags"],
"@umbraco-cms/backoffice/static-file": ["src/packages/static-file"],
"@umbraco-cms/backoffice/partial-view": [
"src/packages/templating/partial-views"
],
"@umbraco-cms/backoffice/stylesheet": [
"src/packages/templating/stylesheets"
],
"@umbraco-cms/backoffice/template": ["src/packages/templating/templates"],
"@umbraco-cms/backoffice/user-group": ["src/packages/user/user-group"],
"@umbraco-cms/backoffice/current-user": [
"src/packages/user/current-user"
],
"@umbraco-cms/backoffice/user": ["src/packages/user/user"],
"@umbraco-cms/backoffice/user-permission": [
"src/packages/user/user-permission"
],
"@umbraco-cms/backoffice/code-editor": [
"src/packages/templating/code-editor"
],
"@umbraco-cms/backoffice/external/*": ["src/external/*"],
"@umbraco-cms/backoffice/examples/*": ["./examples/*"],
"@umbraco-cms/backoffice/examples": ["./examples"]
}
},
"include": [
"src/**/*.ts",
"apps/**/*.ts",
"e2e/**/*.ts",
"index.ts",
"storybook/stories/**/*.ts",
"examples/**/*.ts"
],
"references": [
{
"path": "./tsconfig.node.json"
}
]
}