@public-ui/kolibri-cli 1.7.0-rc.13 → 1.7.0-rc.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -53,14 +53,17 @@ Actually the following migrations are available:
53
53
  - Component removal (no one yet)
54
54
  - Property renaming ✓
55
55
  - Property removal ✓
56
- - Property type change (`_label={false}`) ⏰
57
56
  - Slots renaming (`content`) ✓
58
57
  - Slots removal (`footer`, `header`) ✓
59
58
  - Logic refactoring (no one yet)
60
59
  - Expert-Slot refactoring ⏰
60
+ - Move `innerText` to property ✓
61
+ - Property type change (remove `_label={false}`) ⏰
62
+ - Set `_label=""` to activate the expert slot ⏰
61
63
  - `.vscode/settings.json` add IntelliSense for HTML ✓
62
64
  - `.gitignore` exclude `.kolibri.migrate.json` ✓
63
65
  - `.tsconfig` add `@public-ui/components` to `types` array ✓
66
+ - Format modified files (`prettier@^3`) ✓
64
67
 
65
68
  #### How does it work?
66
69
 
@@ -86,10 +89,12 @@ kolibri migrate <path>
86
89
 
87
90
  #### Options
88
91
 
89
- | Option | Description | Type | Default |
90
- | ------------------------------ | ----------------------------------------- | :------------------: | :------: |
91
- | `--ignore-uncommitted-changes` | Allows execution with uncommitted changes | boolean | false |
92
- | `--remove-mode` | Prefix property name or delete property | `delete` \| `prefix` | `prefix` |
92
+ | Option | Description | Type | Default |
93
+ | ------------------------------ | ---------------------------------------------- | :------------------: | :------: |
94
+ | `--format` | Try to format the modified files with prettier | boolean | true |
95
+ | `--ignore-greater-version` | Allows execution with greater versions | boolean | false |
96
+ | `--ignore-uncommitted-changes` | Allows execution with uncommitted changes | boolean | false |
97
+ | `--remove-mode` | Prefix property name or delete property | `delete` \| `prefix` | `prefix` |
93
98
 
94
99
  #### Configuration
95
100
 
package/dist/index.js CHANGED
File without changes
@@ -3,10 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_child_process_1 = __importDefault(require("node:child_process"));
6
7
  const child_process_1 = require("child_process");
7
8
  const commander_1 = require("commander");
8
9
  const fs_1 = __importDefault(require("fs"));
9
10
  const path_1 = __importDefault(require("path"));
11
+ const semver_1 = __importDefault(require("semver"));
10
12
  const task_runner_1 = require("./runner/task-runner");
11
13
  const test_1 = require("./runner/tasks/test");
12
14
  const v1_1 = require("./runner/tasks/v1");
@@ -22,6 +24,8 @@ function default_1(program) {
22
24
  .command('migrate')
23
25
  .description('This command migrates KoliBri code to the current version.')
24
26
  .argument('[string]', 'Source code folder to migrate', 'src')
27
+ .addOption(new commander_1.Option('--format', 'Try to format the modified files with prettier').default(true))
28
+ .addOption(new commander_1.Option('--ignore-greater-version', 'Allows execution with greater versions').default(false))
25
29
  .addOption(new commander_1.Option('--ignore-uncommitted-changes', 'Allows execution with uncommitted changes').default(false))
26
30
  .addOption(new commander_1.Option('--remove-mode <mode>', 'Prefix property name or delete property').choices(types_1.REMOVE_MODE).default('prefix'))
27
31
  .addOption(new commander_1.Option('--test-tasks', 'Run additional test tasks').default(false).hideHelp())
@@ -41,6 +45,9 @@ function default_1(program) {
41
45
  Current version of @public-ui/components: ${versionOfPublicUiComponents}
42
46
  Source folder to migrate: ${baseDir}
43
47
  `);
48
+ if (!options.ignoreGreaterVersion && semver_1.default.lt(versionOfPublicUiKoliBriCli, versionOfPublicUiComponents)) {
49
+ throw (0, reuse_1.logAndCreateError)('Your current version of @public-ui/components is greater than the version of @public-ui/kolibri-cli. Please update @public-ui/kolibri-cli or force the migration with --ignore-greater-version.');
50
+ }
44
51
  const configFile = path_1.default.resolve(process.cwd(), '.kolibri.config.json');
45
52
  let config = {};
46
53
  if (fs_1.default.existsSync(configFile)) {
@@ -78,23 +85,60 @@ Source folder to migrate: ${baseDir}
78
85
  runLoop();
79
86
  });
80
87
  }
88
+ else if (semver_1.default.lt(version, versionOfPublicUiComponents)) {
89
+ version = versionOfPublicUiComponents;
90
+ let packageJson = (0, reuse_1.getContentOfProjectPkgJson)();
91
+ packageJson = packageJson.replace(/"(@public-ui\/[^"]+)":\s*".*"/g, `"$1": "${version}"`);
92
+ fs_1.default.writeFileSync(path_1.default.resolve(process.cwd(), 'package.json'), packageJson);
93
+ runner.setProjectVersion(version);
94
+ console.log(`- Update @public-ui/* to version ${version}`);
95
+ (0, child_process_1.exec)((0, reuse_1.getPackageManagerInstallCommand)(), (err) => {
96
+ if (err) {
97
+ console.error(`exec error: ${err.message}`);
98
+ return;
99
+ }
100
+ finish();
101
+ });
102
+ }
81
103
  else {
82
- console.log(`
104
+ finish();
105
+ }
106
+ }
107
+ /**
108
+ * Prints the status of the task runner and the modified files.
109
+ */
110
+ function finish() {
111
+ console.log(`
83
112
  Status of all executed Tasks:`);
84
- const status = runner.getStatus(true);
85
- fs_1.default.writeFileSync(configFile, JSON.stringify(status.config, null, 2));
86
- console.log(`
113
+ const status = runner.getStatus(true);
114
+ fs_1.default.writeFileSync(configFile, JSON.stringify(status.config, null, 2));
115
+ console.log(`
87
116
  Modified files: ${reuse_1.MODIFIED_FILES.size}`);
88
- reuse_1.MODIFIED_FILES.forEach((file) => {
89
- console.log(`- ${file}`);
90
- });
117
+ reuse_1.MODIFIED_FILES.forEach((file) => {
118
+ console.log(`- ${file}`);
119
+ });
120
+ if (options.format) {
91
121
  console.log(`
92
- After the code migration has gone through, the code formatting may no longer be as desired. Therefore, please reformat your code afterwards if necessary.
122
+ We try to format the modified files with prettier...`);
123
+ try {
124
+ node_child_process_1.default.execFileSync('npx', ['prettier', '-w', ...Array.from(reuse_1.MODIFIED_FILES)], {
125
+ encoding: 'utf-8',
126
+ });
127
+ console.log(`Modified files have been formatted.`);
128
+ }
129
+ catch (e) {
130
+ console.log(`Modified files could not be formatted. Please format them manually: npx prettier ${baseDir} -w`);
131
+ }
132
+ console.log();
133
+ }
134
+ console.log(`
135
+ After migrating the code, the formatting of the code may no longer be as desired. Therefore, reformat your code afterwards if necessary: npx prettier ${baseDir} -w
93
136
 
94
- Afterwards, it may be that functions or themes in newer major versions have changed or are no longer included. This should be checked finally and corrected manually if necessary.
137
+ When migrating the labels, the text (innerText) is assigned 1 to 1 to the _label property. There could be the following situation, where manual corrections have to be made: _label={\`I am {count} years old.\`} -> _label={\`I am \${count} years old.\`} (add a $)
95
138
 
96
- Is anything wrong, you can reset the migration with "git reset --hard HEAD~1" or by discarding the affected files. For more information read the troubleshooting section in the README.`);
97
- }
139
+ Afterwards, it may be that functions or themes have changed or are no longer included in newer major versions. This should be checked finally and corrected manually if necessary.
140
+
141
+ If something is wrong, the migration can be stopped with "git reset --hard HEAD~1" or by discarding the affected files. For more information, read the troubleshooting section in the README.`);
98
142
  }
99
143
  const status = runner.getStatus();
100
144
  console.log(`
@@ -26,6 +26,8 @@ class LabelExpertSlot extends abstract_task_1.AbstractTask {
26
26
  // https://regex101.com/r/WkEKxu/1
27
27
  this.componentRegExp = new RegExp(`(<${tagCapitalCase}[^>]*)>([^<]+(\\n\\s*)*)(<\\/${tagCapitalCase}>)`, 'g');
28
28
  this.customElementRegExp = new RegExp(`(<${tag}[^>]*)>([^<]+(\\n\\s*)*)(<\\/${tag}>)`, 'g');
29
+ this.componentRegExp = new RegExp(`(<${tagCapitalCase}[^>]+)>([^<>]+)(<\\/${tagCapitalCase}>)`, 'g');
30
+ this.customElementRegExp = new RegExp(`(<${tag}[^>]+)>([^<>]+)(<\\/${tag}>)`, 'g');
29
31
  }
30
32
  static getInstance(tag, property, versionRange, dependentTasks = [], options = {}) {
31
33
  const identifier = `${tag}-move-innerText-to-property-${property}`;
@@ -44,7 +46,7 @@ class LabelExpertSlot extends abstract_task_1.AbstractTask {
44
46
  const newContent = content
45
47
  // Replacements
46
48
  .replace(this.componentRegExp, removeLineBreaksAndSpaces)
47
- .replace(this.componentRegExp, `$1 ${this.propertyInCamelCase}="$2">$4`);
49
+ .replace(this.componentRegExp, `$1 ${this.propertyInCamelCase}={\`$2\`}/>`);
48
50
  if (content !== newContent) {
49
51
  reuse_1.MODIFIED_FILES.add(file);
50
52
  fs_1.default.writeFileSync(file, newContent);
@@ -57,10 +59,10 @@ class LabelExpertSlot extends abstract_task_1.AbstractTask {
57
59
  const newContent = content
58
60
  // Replacements
59
61
  .replace(this.customElementRegExp, removeLineBreaksAndSpaces)
60
- .replace(this.customElementRegExp, `$1 ${this.property}="$2">$4`);
62
+ .replace(this.customElementRegExp, `$1 ${this.property}={\`$2\`}/>`);
61
63
  if (content !== newContent) {
62
64
  reuse_1.MODIFIED_FILES.add(file);
63
- // fs.writeFileSync(file, newContent);
65
+ fs_1.default.writeFileSync(file, newContent);
64
66
  }
65
67
  });
66
68
  }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RefactorPropertyLabelReplaceFalse = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const types_1 = require("../../../../types");
9
+ const reuse_1 = require("../../../shares/reuse");
10
+ const abstract_task_1 = require("../../abstract-task");
11
+ class RefactorPropertyLabelReplaceFalse extends abstract_task_1.AbstractTask {
12
+ constructor() {
13
+ super(`refactor-property-label-replace-false`, `Refactor property "_label" - replace "false" with ""`, types_1.MARKUP_EXTENSIONS, '>=1.6 <=1.7');
14
+ this.componentRegExp = /_label={false}/g;
15
+ this.customElementRegExp = /_label="false"/g;
16
+ }
17
+ static getInstance() {
18
+ const identifier = `refact-property-label-replace-false`;
19
+ if (!this.instances.has(identifier)) {
20
+ this.instances.set(identifier, new RefactorPropertyLabelReplaceFalse());
21
+ }
22
+ return this.instances.get(identifier);
23
+ }
24
+ run(baseDir) {
25
+ this.transpileComponentFileDelete(baseDir);
26
+ this.transpileCustomElementFileDelete(baseDir);
27
+ }
28
+ transpileComponentFileDelete(baseDir) {
29
+ (0, reuse_1.filterFilesByExt)(baseDir, types_1.COMPONENT_FILE_EXTENSIONS).forEach((file) => {
30
+ const content = fs_1.default.readFileSync(file, 'utf8');
31
+ const newContent = content
32
+ // Replacements
33
+ .replace(this.componentRegExp, `_label=""`);
34
+ if (content !== newContent) {
35
+ reuse_1.MODIFIED_FILES.add(file);
36
+ fs_1.default.writeFileSync(file, newContent);
37
+ }
38
+ });
39
+ }
40
+ transpileCustomElementFileDelete(baseDir) {
41
+ (0, reuse_1.filterFilesByExt)(baseDir, types_1.CUSTOM_ELEMENT_FILE_EXTENSIONS).forEach((file) => {
42
+ const content = fs_1.default.readFileSync(file, 'utf8');
43
+ const newContent = content
44
+ // Replacements
45
+ .replace(this.customElementRegExp, `_label=""`);
46
+ if (content !== newContent) {
47
+ reuse_1.MODIFIED_FILES.add(file);
48
+ fs_1.default.writeFileSync(file, newContent);
49
+ }
50
+ });
51
+ }
52
+ }
53
+ exports.RefactorPropertyLabelReplaceFalse = RefactorPropertyLabelReplaceFalse;
@@ -33,10 +33,15 @@ class VsCodeSettingsReconfigureTask extends abstract_task_1.AbstractTask {
33
33
  run() {
34
34
  const settingsPath = path_1.default.join(process.cwd(), '.vscode', 'settings.json');
35
35
  if (fs_1.default.existsSync(settingsPath)) {
36
- const fileContent = JSON.parse(fs_1.default.readFileSync(settingsPath, 'utf8'));
37
- fileContent[this.key] = this.value;
38
- fs_1.default.writeFileSync(settingsPath, JSON.stringify(fileContent, null, 2));
39
- reuse_1.MODIFIED_FILES.add(settingsPath);
36
+ try {
37
+ const fileContent = JSON.parse(fs_1.default.readFileSync(settingsPath, 'utf8'));
38
+ fileContent[this.key] = this.value;
39
+ fs_1.default.writeFileSync(settingsPath, JSON.stringify(fileContent, null, 2));
40
+ reuse_1.MODIFIED_FILES.add(settingsPath);
41
+ }
42
+ catch (e) {
43
+ console.log(`Advice: Your .vscode/settings.json file is not valid JSON.`);
44
+ }
40
45
  }
41
46
  else {
42
47
  fs_1.default.mkdirSync(path_1.default.dirname(settingsPath), { recursive: true });
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.v1Tasks = void 0;
4
4
  const LabelExpertSlot_1 = require("../common/LabelExpertSlot");
5
5
  const MarkRemovedSlotTask_1 = require("../common/MarkRemovedSlotTask");
6
+ const RefactorPropertyLabelReplaceFalse_1 = require("../common/RefactorPropertyLabelReplaceFalse");
6
7
  const RenameSlotNameTask_1 = require("../common/RenameSlotNameTask");
7
8
  const abbr_1 = require("./abbr");
8
9
  const accordion_1 = require("./accordion");
@@ -110,24 +111,22 @@ exports.v1Tasks.push(toast_1.ToastRemovePropertyNameShowDuration);
110
111
  exports.v1Tasks.push(toast_1.ToastRenamePropertyHeadingToLabel);
111
112
  exports.v1Tasks.push(version_1.VersionRenamePropertyVersionToLabel);
112
113
  exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-heading', '_label', '^1'));
113
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-checkbox', '_label', '^1'));
114
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-color', '_label', '^1'));
115
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-date', '_label', '^1'));
116
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-email', '_label', '^1'));
117
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-file', '_label', '^1'));
118
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-number', '_label', '^1'));
119
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-password', '_label', '^1'));
120
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-radio', '_label', '^1'));
121
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-range', '_label', '^1'));
122
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-input-text', '_label', '^1'));
114
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-checkbox', '_label', '^1'));
115
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-color', '_label', '^1'));
116
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-date', '_label', '^1'));
117
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-email', '_label', '^1'));
118
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-file', '_label', '^1'));
119
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-number', '_label', '^1'));
120
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-password', '_label', '^1'));
121
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-radio', '_label', '^1'));
122
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-range', '_label', '^1'));
123
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-input-text', '_label', '^1'));
123
124
  exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-link', '_label', '^1'));
124
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-select', '_label', '^1'));
125
- // v1Tasks.push(LabelExpertSlot.getInstance('kol-textarea', '_label', '^1'));
125
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-select', '_label', '^1'));
126
+ exports.v1Tasks.push(LabelExpertSlot_1.LabelExpertSlot.getInstance('kol-textarea', '_label', '^1'));
126
127
  exports.v1Tasks.push(MarkRemovedSlotTask_1.MarkRemovedSlotTask.getInstance('kol-accordion', 'header', '^1'));
127
128
  exports.v1Tasks.push(MarkRemovedSlotTask_1.MarkRemovedSlotTask.getInstance('kol-card', 'footer', '^1'));
128
129
  exports.v1Tasks.push(MarkRemovedSlotTask_1.MarkRemovedSlotTask.getInstance('kol-card', 'header', '^1'));
129
130
  exports.v1Tasks.push(RenameSlotNameTask_1.RenameSlotNameTask.getInstance('kol-accordion', 'content', '', '^1'));
130
131
  exports.v1Tasks.push(RenameSlotNameTask_1.RenameSlotNameTask.getInstance('kol-card', 'content', '', '^1'));
131
- // .gitignore
132
- // .vscode/settings.json
133
- // tsconfig.json
132
+ exports.v1Tasks.push(RefactorPropertyLabelReplaceFalse_1.RefactorPropertyLabelReplaceFalse.getInstance());
package/package.json CHANGED
@@ -1,66 +1,65 @@
1
1
  {
2
- "name": "@public-ui/kolibri-cli",
3
- "version": "1.7.0-rc.13",
4
- "license": "EUPL-1.2",
5
- "homepage": "https://public-ui.github.io",
6
- "repository": "https://github.com/public-ui/kolibri",
7
- "bugs": {
8
- "url": "https://github.com/public-ui/kolibri/issues",
9
- "email": "kolibri@itzbund.de"
10
- },
11
- "author": {
12
- "name": "Informationstechnikzentrum Bund",
13
- "email": "kolibri@itzbund.de"
14
- },
15
- "bin": {
16
- "kolibri": "dist/index.js"
17
- },
18
- "description": "CLI for executing some helpful commands for KoliBri projects.",
19
- "scripts": {
20
- "reset": "pnpm i @public-ui/components@1.1.7",
21
- "depcheck": "depcheck --ignores=\"@public-ui/components,deepmerge,loglevel,mocha\"",
22
- "format": "prettier -c src",
23
- "lint": "eslint src && tsc --noEmit",
24
- "prepack": "tsc",
25
- "start": "rimraf test && cpy \"../../samples/react/src/components\" test && ts-node src/index.ts migrate --ignore-uncommitted-changes --test-tasks test",
26
- "restart": "pnpm reset && pnpm start",
27
- "unused": "knip",
28
- "watch": "nodemon --ignore package.json src/index.ts migrate --ignore-uncommitted-changes --test-tasks test"
29
- },
30
- "type": "commonjs",
31
- "dependencies": {
32
- "chalk": "4.1.2",
33
- "commander": "11.0.0",
34
- "deepmerge": "4.3.1",
35
- "gradient-string": "2.0.2",
36
- "loglevel": "1.8.1",
37
- "prettier": "3.0.3",
38
- "semver": "7.5.4"
39
- },
40
- "devDependencies": {
41
- "@public-ui/components": "1.6.2",
42
- "@types/gradient-string": "1.1.2",
43
- "@types/node": "20.6.2",
44
- "@typescript-eslint/eslint-plugin": "6.7.2",
45
- "@typescript-eslint/parser": "6.7.2",
46
- "cpy-cli": "5.0.0",
47
- "depcheck": "1.4.6",
48
- "eslint": "8.49.0",
49
- "eslint-config-prettier": "9.0.0",
50
- "eslint-plugin-html": "7.1.0",
51
- "eslint-plugin-jsdoc": "46.8.1",
52
- "eslint-plugin-json": "3.1.0",
53
- "eslint-plugin-jsx-a11y": "6.7.1",
54
- "eslint-plugin-no-loops": "0.3.0",
55
- "eslint-plugin-react": "7.33.2",
56
- "knip": "2.25.2",
57
- "mocha": "10.2.0",
58
- "nodemon": "3.0.1",
59
- "rimraf": "3.0.2",
60
- "ts-node": "10.9.1",
61
- "typescript": "5.2.2"
62
- },
63
- "files": [
64
- "dist"
65
- ]
66
- }
2
+ "name": "@public-ui/kolibri-cli",
3
+ "version": "1.7.0-rc.15",
4
+ "license": "EUPL-1.2",
5
+ "homepage": "https://public-ui.github.io",
6
+ "repository": "https://github.com/public-ui/kolibri",
7
+ "bugs": {
8
+ "url": "https://github.com/public-ui/kolibri/issues",
9
+ "email": "kolibri@itzbund.de"
10
+ },
11
+ "author": {
12
+ "name": "Informationstechnikzentrum Bund",
13
+ "email": "kolibri@itzbund.de"
14
+ },
15
+ "bin": {
16
+ "kolibri": "dist/index.js"
17
+ },
18
+ "description": "CLI for executing some helpful commands for KoliBri projects.",
19
+ "type": "commonjs",
20
+ "dependencies": {
21
+ "chalk": "4.1.2",
22
+ "commander": "11.0.0",
23
+ "deepmerge": "4.3.1",
24
+ "gradient-string": "2.0.2",
25
+ "loglevel": "1.8.1",
26
+ "prettier": "3.0.3",
27
+ "semver": "7.5.4"
28
+ },
29
+ "devDependencies": {
30
+ "@public-ui/components": "1.7.0-rc.15",
31
+ "@types/gradient-string": "1.1.3",
32
+ "@types/node": "20.6.5",
33
+ "@typescript-eslint/eslint-plugin": "6.7.2",
34
+ "@typescript-eslint/parser": "6.7.2",
35
+ "cpy-cli": "5.0.0",
36
+ "depcheck": "1.4.6",
37
+ "eslint": "8.50.0",
38
+ "eslint-config-prettier": "9.0.0",
39
+ "eslint-plugin-html": "7.1.0",
40
+ "eslint-plugin-jsdoc": "46.8.2",
41
+ "eslint-plugin-json": "3.1.0",
42
+ "eslint-plugin-jsx-a11y": "6.7.1",
43
+ "eslint-plugin-no-loops": "0.3.0",
44
+ "eslint-plugin-react": "7.33.2",
45
+ "knip": "2.27.1",
46
+ "mocha": "10.2.0",
47
+ "nodemon": "3.0.1",
48
+ "rimraf": "3.0.2",
49
+ "ts-node": "10.9.1",
50
+ "typescript": "5.2.2"
51
+ },
52
+ "files": [
53
+ "dist"
54
+ ],
55
+ "scripts": {
56
+ "reset": "pnpm i @public-ui/components@1.1.7",
57
+ "depcheck": "depcheck --ignores=\"@public-ui/components,deepmerge,loglevel,mocha\"",
58
+ "format": "prettier -c src",
59
+ "lint": "eslint src && tsc --noEmit",
60
+ "start": "rimraf test && cpy \"../../samples/react/src/components\" test && ts-node src/index.ts migrate --ignore-uncommitted-changes --test-tasks test",
61
+ "restart": "pnpm reset && pnpm start",
62
+ "unused": "knip",
63
+ "watch": "nodemon --ignore package.json src/index.ts migrate --ignore-uncommitted-changes --test-tasks test"
64
+ }
65
+ }