merge-tsconfigs 0.0.6 → 0.1.0

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
@@ -128,12 +128,16 @@ const config = mergeTsconfigs({
128
128
 
129
129
  ---
130
130
 
131
- ## How do I install this?
131
+ ## How do I start using this?
132
+
133
+ Install merge-tsconfigs with your preferred package manager.
132
134
 
133
135
  ```sh
134
136
  npm install merge-tsconfigs --save-dev
135
137
  ```
136
138
 
139
+ \*unpkg and skypack support coming very soon! 🚀
140
+
137
141
  ---
138
142
 
139
143
  Made by [@yowainwright](https://github.com/yowainwright), MIT 2023
package/dist/index.cjs CHANGED
@@ -63,21 +63,29 @@ function resolveJSON(path, debug = false) {
63
63
  const json = JSON.parse((0, import_fs.readFileSync)(path, "utf8"));
64
64
  return json;
65
65
  } catch (err) {
66
+ console.log({ err });
66
67
  if (debug)
67
68
  logger({ isDebugging: debug })("error")("resolveJSON")("There was an error:")(err);
68
69
  return {};
69
70
  }
70
71
  }
71
72
  var mergeConfigContent = (tsconfigs, debug = false) => tsconfigs.reduce((acc = {}, tsconfig) => {
72
- let tsconfigJSON = resolveJSON(tsconfig, true);
73
- if (tsconfigJSON?.extends) {
74
- const parentTsconfig = resolveJSON(tsconfigJSON.extends, true);
73
+ let tsconfigJSON = resolveJSON(tsconfig, debug);
74
+ const parentPath = tsconfigJSON?.extends;
75
+ if (parentPath) {
76
+ const relativeParentPath = (0, import_path.join)((0, import_path.dirname)(tsconfig), parentPath);
77
+ const parentTsconfig = resolveJSON(relativeParentPath, debug);
75
78
  if (parentTsconfig?.extends) {
76
- logger({ isDebugging: false })("error")("mergeConfigContent")("Parent tsconfig:merge-tsconfigs only handles extending from a parent, consider extending tsconfigs less.")(parentTsconfig);
79
+ logger({ isDebugging: debug })("error")("mergeConfigContent")("Parent tsconfig:merge-tsconfigs only handles extending from a parent, consider extending tsconfigs less.")(parentTsconfig);
77
80
  }
81
+ const { extends: _, ...tsconfigWithoutExtends } = tsconfigJSON;
78
82
  tsconfigJSON = {
79
83
  ...parentTsconfig,
80
- ...tsconfigJSON
84
+ ...tsconfigWithoutExtends,
85
+ compilerOptions: {
86
+ ...parentTsconfig?.compilerOptions,
87
+ ...tsconfigWithoutExtends?.compilerOptions
88
+ }
81
89
  };
82
90
  }
83
91
  if (!tsconfigJSON) {
@@ -87,10 +95,16 @@ var mergeConfigContent = (tsconfigs, debug = false) => tsconfigs.reduce((acc = {
87
95
  }
88
96
  return {
89
97
  ...acc,
90
- ...tsconfigJSON
98
+ ...tsconfigJSON,
99
+ compilerOptions: {
100
+ ...acc?.compilerOptions,
101
+ ...tsconfigJSON?.compilerOptions
102
+ }
91
103
  };
92
104
  }, {});
93
- var writeTsconfig = (tsconfig, out) => {
105
+ var writeTsconfig = (tsconfig, out, isTesting) => {
106
+ if (isTesting)
107
+ return tsconfig;
94
108
  const path = out.length ? out : "./tsconfig.merged.json";
95
109
  (0, import_fs.mkdirSync)((0, import_path.dirname)(path), { recursive: true });
96
110
  (0, import_fs.writeFileSync)(path, JSON.stringify(tsconfig, null, 2));
@@ -102,7 +116,8 @@ var mergeTsConfigs = ({
102
116
  include = [],
103
117
  compilerOptions: compilerOptions2 = {},
104
118
  debug = false,
105
- out = ""
119
+ out = "",
120
+ isTesting = false
106
121
  }) => {
107
122
  if (tsconfigs.length === 0) {
108
123
  if (debug)
@@ -118,7 +133,7 @@ var mergeTsConfigs = ({
118
133
  include: [...updatedTsconfig.include || [], ...include],
119
134
  ...compilerOptions2
120
135
  };
121
- return writeTsconfig(tsconfig, out);
136
+ return writeTsconfig(tsconfig, out, isTesting);
122
137
  };
123
138
  var script = mergeTsConfigs;
124
139
  var scripts_default = mergeTsConfigs;
@@ -172,7 +187,7 @@ var compilerOptions = {
172
187
  async function action(files, options = {}) {
173
188
  const { debug = false, isTesting = false, isTestingCLI = false, ...compilerOptions2 } = options;
174
189
  if (isTestingCLI) {
175
- console.info({ files });
190
+ console.info({ files, options });
176
191
  return;
177
192
  }
178
193
  try {
@@ -183,9 +198,11 @@ async function action(files, options = {}) {
183
198
  }
184
199
  import_commander.program.name("merge-tsconfigs").description(
185
200
  "Merge-tsconfigs is a CLI and node tool for merging tsconfig files into the exact tsconfig file you want \u{1F6E3}\uFE0F"
186
- ).argument("[files...]", "files to check, matches an array pattern").option("-d, --debug", "enable debugging").option("-e, --exclude [exclude...]", "files to exclude, matches a glob or array pattern").option("-i, --include [include...]", "files to include, matches a glob or array pattern").option("--isTesting", "enable testing").option("-o, --out <file>", "output file, otherwise, the file will be written to tsconfig.merged.json").option("-t, --isTestingCLI", "enable CLI only testing");
201
+ ).argument("[files...]", "files to check, matches an array pattern").option("-d, --debug", "enable debugging").option("-e, --exclude [exclude...]", "files to exclude, matches a glob or array pattern").option("-i, --include [include...]", "files to include, matches a glob or array pattern").option("--isTesting", "enable testing").option("-o, --out <file>", "output file, otherwise, the file will be written to tsconfig.merged.json").option("--isTesting", "enable testing").option("-t, --isTestingCLI", "enable CLI only testing");
187
202
  Object.keys(compilerOptions).map((name) => ({ name, value: compilerOptions[name] })).forEach(({ name, value }) => {
188
- if (["string", "boolean"].includes(value)) {
203
+ if (value === "boolean") {
204
+ import_commander.program.option(`--${name}`, `tsconfig.compilerOptions.${name}`);
205
+ } else if (value === "string") {
189
206
  import_commander.program.option(`--${name} <${value}>`, `tsconfig.compilerOptions.${name}`);
190
207
  } else if (value === "array") {
191
208
  import_commander.program.option(`--${name} [${value}...]`, `tsconfig.compilerOptions.${name}`);
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ interface ConfigOptions {
8
8
  tsconfigs?: string[];
9
9
  exclude?: string[];
10
10
  include?: string[];
11
+ isTesting?: boolean;
11
12
  }
12
13
  type LoggerParams = {
13
14
  isDebugging?: boolean;
@@ -25,8 +26,8 @@ interface TsConfig {
25
26
  declare const logger: ({ isDebugging, emoji, gap, name }: LoggerParams) => (type: string) => (section: string) => (message: string) => (err: unknown) => void;
26
27
  declare function resolveJSON(path: string, debug?: boolean): TsConfig;
27
28
  declare const mergeConfigContent: (tsconfigs: string[], debug?: boolean) => TsConfig;
28
- declare const writeTsconfig: (tsconfig: TsConfig, out: string) => TsConfig;
29
- declare const mergeTsConfigs: ({ tsconfigs, exclude, include, compilerOptions, debug, out, }: ConfigOptions) => TsConfig | undefined;
30
- declare const script: ({ tsconfigs, exclude, include, compilerOptions, debug, out, }: ConfigOptions) => TsConfig | undefined;
29
+ declare const writeTsconfig: (tsconfig: TsConfig, out: string, isTesting: boolean) => TsConfig;
30
+ declare const mergeTsConfigs: ({ tsconfigs, exclude, include, compilerOptions, debug, out, isTesting, }: ConfigOptions) => TsConfig | undefined;
31
+ declare const script: ({ tsconfigs, exclude, include, compilerOptions, debug, out, isTesting, }: ConfigOptions) => TsConfig | undefined;
31
32
 
32
33
  export { mergeTsConfigs as default, logger, mergeConfigContent, mergeTsConfigs, resolveJSON, script, writeTsconfig };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/scripts.ts
2
2
  import { mkdirSync, readFileSync, writeFileSync } from "fs";
3
- import { dirname } from "path";
3
+ import { dirname, join } from "path";
4
4
  var logger = ({ isDebugging = false, emoji = `\u{1F6E3}\uFE0F`, gap = ` => `, name = "merge-tsconfigs" }) => (type) => (section) => (message) => (err) => {
5
5
  const debugMsg = isDebugging ? "debugging:" : "";
6
6
  const sectionMsg = section.length ? `${section}:` : "";
@@ -31,21 +31,29 @@ function resolveJSON(path, debug = false) {
31
31
  const json = JSON.parse(readFileSync(path, "utf8"));
32
32
  return json;
33
33
  } catch (err) {
34
+ console.log({ err });
34
35
  if (debug)
35
36
  logger({ isDebugging: debug })("error")("resolveJSON")("There was an error:")(err);
36
37
  return {};
37
38
  }
38
39
  }
39
40
  var mergeConfigContent = (tsconfigs, debug = false) => tsconfigs.reduce((acc = {}, tsconfig) => {
40
- let tsconfigJSON = resolveJSON(tsconfig, true);
41
- if (tsconfigJSON?.extends) {
42
- const parentTsconfig = resolveJSON(tsconfigJSON.extends, true);
41
+ let tsconfigJSON = resolveJSON(tsconfig, debug);
42
+ const parentPath = tsconfigJSON?.extends;
43
+ if (parentPath) {
44
+ const relativeParentPath = join(dirname(tsconfig), parentPath);
45
+ const parentTsconfig = resolveJSON(relativeParentPath, debug);
43
46
  if (parentTsconfig?.extends) {
44
- logger({ isDebugging: false })("error")("mergeConfigContent")("Parent tsconfig:merge-tsconfigs only handles extending from a parent, consider extending tsconfigs less.")(parentTsconfig);
47
+ logger({ isDebugging: debug })("error")("mergeConfigContent")("Parent tsconfig:merge-tsconfigs only handles extending from a parent, consider extending tsconfigs less.")(parentTsconfig);
45
48
  }
49
+ const { extends: _, ...tsconfigWithoutExtends } = tsconfigJSON;
46
50
  tsconfigJSON = {
47
51
  ...parentTsconfig,
48
- ...tsconfigJSON
52
+ ...tsconfigWithoutExtends,
53
+ compilerOptions: {
54
+ ...parentTsconfig?.compilerOptions,
55
+ ...tsconfigWithoutExtends?.compilerOptions
56
+ }
49
57
  };
50
58
  }
51
59
  if (!tsconfigJSON) {
@@ -55,10 +63,16 @@ var mergeConfigContent = (tsconfigs, debug = false) => tsconfigs.reduce((acc = {
55
63
  }
56
64
  return {
57
65
  ...acc,
58
- ...tsconfigJSON
66
+ ...tsconfigJSON,
67
+ compilerOptions: {
68
+ ...acc?.compilerOptions,
69
+ ...tsconfigJSON?.compilerOptions
70
+ }
59
71
  };
60
72
  }, {});
61
- var writeTsconfig = (tsconfig, out) => {
73
+ var writeTsconfig = (tsconfig, out, isTesting) => {
74
+ if (isTesting)
75
+ return tsconfig;
62
76
  const path = out.length ? out : "./tsconfig.merged.json";
63
77
  mkdirSync(dirname(path), { recursive: true });
64
78
  writeFileSync(path, JSON.stringify(tsconfig, null, 2));
@@ -70,7 +84,8 @@ var mergeTsConfigs = ({
70
84
  include = [],
71
85
  compilerOptions: compilerOptions2 = {},
72
86
  debug = false,
73
- out = ""
87
+ out = "",
88
+ isTesting = false
74
89
  }) => {
75
90
  if (tsconfigs.length === 0) {
76
91
  if (debug)
@@ -86,7 +101,7 @@ var mergeTsConfigs = ({
86
101
  include: [...updatedTsconfig.include || [], ...include],
87
102
  ...compilerOptions2
88
103
  };
89
- return writeTsconfig(tsconfig, out);
104
+ return writeTsconfig(tsconfig, out, isTesting);
90
105
  };
91
106
  var script = mergeTsConfigs;
92
107
  var scripts_default = mergeTsConfigs;
@@ -140,7 +155,7 @@ var compilerOptions = {
140
155
  async function action(files, options = {}) {
141
156
  const { debug = false, isTesting = false, isTestingCLI = false, ...compilerOptions2 } = options;
142
157
  if (isTestingCLI) {
143
- console.info({ files });
158
+ console.info({ files, options });
144
159
  return;
145
160
  }
146
161
  try {
@@ -151,9 +166,11 @@ async function action(files, options = {}) {
151
166
  }
152
167
  program.name("merge-tsconfigs").description(
153
168
  "Merge-tsconfigs is a CLI and node tool for merging tsconfig files into the exact tsconfig file you want \u{1F6E3}\uFE0F"
154
- ).argument("[files...]", "files to check, matches an array pattern").option("-d, --debug", "enable debugging").option("-e, --exclude [exclude...]", "files to exclude, matches a glob or array pattern").option("-i, --include [include...]", "files to include, matches a glob or array pattern").option("--isTesting", "enable testing").option("-o, --out <file>", "output file, otherwise, the file will be written to tsconfig.merged.json").option("-t, --isTestingCLI", "enable CLI only testing");
169
+ ).argument("[files...]", "files to check, matches an array pattern").option("-d, --debug", "enable debugging").option("-e, --exclude [exclude...]", "files to exclude, matches a glob or array pattern").option("-i, --include [include...]", "files to include, matches a glob or array pattern").option("--isTesting", "enable testing").option("-o, --out <file>", "output file, otherwise, the file will be written to tsconfig.merged.json").option("--isTesting", "enable testing").option("-t, --isTestingCLI", "enable CLI only testing");
155
170
  Object.keys(compilerOptions).map((name) => ({ name, value: compilerOptions[name] })).forEach(({ name, value }) => {
156
- if (["string", "boolean"].includes(value)) {
171
+ if (value === "boolean") {
172
+ program.option(`--${name}`, `tsconfig.compilerOptions.${name}`);
173
+ } else if (value === "string") {
157
174
  program.option(`--${name} <${value}>`, `tsconfig.compilerOptions.${name}`);
158
175
  } else if (value === "array") {
159
176
  program.option(`--${name} [${value}...]`, `tsconfig.compilerOptions.${name}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "merge-tsconfigs",
3
- "version": "0.0.6",
3
+ "version": "0.1.0",
4
4
  "description": "Merge-tsconfigs is a CLI and node tool for merging tsconfig files into the exact tsconfig file you want 🛣️",
5
5
  "type": "module",
6
6
  "module": "dist/index.js",