@checkdigit/typescript-config 3.2.0-PR.23-1083 → 3.3.0-PR.29-5bac

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/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2021-2023 Check Digit, LLC
3
+ Copyright (c) 2021-2022 Check Digit, LLC
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -8,10 +8,9 @@ Copyright (c) 2022-2023 [Check Digit, LLC](https://checkdigit.com)
8
8
 
9
9
  This module contains the standard Check Digit Typescript configuration.
10
10
 
11
- - requires Node 18 or above
11
+ - requires Node 16 or above
12
12
  - emits ES2022
13
- - uses `esnext` for `target` and `module`
14
- - uses the `moduleResoltion` of `bundler`
13
+ - uses the `module` type of `commonjs`.
15
14
  - all compiler options set for maximum strictness
16
15
 
17
16
  #### A note about versioning
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/typescript-config","version":"3.2.0-PR.23-1083","description":"Check Digit standard Typescript configuration","prettier":"@checkdigit/prettier-config","engines":{"node":">=18"},"type":"module","peerDependencies":{"@types/node":">=18","typescript":">=5.0.2 <5.1"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/typescript-config.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/typescript-config/issues"},"homepage":"https://github.com/checkdigit/typescript-config#readme","scripts":{"preversion":"npm test","postversion":"git push && git push --tags","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:style","build-tsc":"rimraf build && tsc","build-es":"rimraf build-es && esbuild ./src/* --platform=node --bundle --format=esm --sourcemap=inline --outdir=build-es","build-swc":"rimraf build-swc && swc ./src -d ./build-swc","ci:test":"NODE_OPTIONS=\"--no-warnings --experimental-vm-modules\" jest --coverage=false","ci:compile":"npm run build-tsc && npm run build-es && npm run build-swc","ci:style":"npm run prettier"},"devDependencies":{"@checkdigit/prettier-config":"^3.3.0","@swc/cli":"^0.1.62","@swc/core":"^1.3.42","@types/jest":"^29.5.0","esbuild":"^0.17.14","get-port":"^6.1.2","got":"11.8.6","jest":"^29.5.0","rimraf":"^4.4.1","ts-jest":"^29.0.5"},"jest":{"extensionsToTreatAsEsm":[".ts"],"transform":{"^.+\\.ts$":["ts-jest",{"isolatedModules":true,"diagnostics":false,"useESM":true}]},"collectCoverageFrom":["<rootDir>/src/**","!<rootDir>/src/**/*.spec.ts","!<rootDir>/src/**/*.test.ts"],"testMatch":["<rootDir>/src/**/*.spec.ts"]},"files":["tsconfig.json","SECURITY.md","/src/"]}
1
+ {"name":"@checkdigit/typescript-config","version":"3.3.0-PR.29-5bac","description":"Check Digit standard Typescript configuration","prettier":"@checkdigit/prettier-config","engines":{"node":">=16"},"peerDependencies":{"@types/node":">=16","typescript":">=5.0.2 <5.1"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/typescript-config.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/typescript-config/issues"},"homepage":"https://github.com/checkdigit/typescript-config#readme","scripts":{"preversion":"npm test","postversion":"git push && git push --tags","prettier":"prettier --list-different .","prettier:fix":"prettier --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:style","ci:compile":"tsc --noEmit","ci:test":"tsc && node build/index.js | grep -q 'complete' && rimraf build","ci:style":"npm run prettier"},"devDependencies":{"@checkdigit/prettier-config":"^3.3.0","rimraf":"^4.4.0"},"files":["tsconfig.json","SECURITY.md","/src/"]}
package/src/index.ts ADDED
@@ -0,0 +1,135 @@
1
+ // index.ts
2
+
3
+ import { strict as assert } from 'node:assert';
4
+
5
+ /**
6
+ * Check for Typescript 4.4 features
7
+ */
8
+
9
+ interface SymbolIndexSignature44 {
10
+ [name: symbol]: number;
11
+ }
12
+
13
+ assert.ok({} as SymbolIndexSignature44);
14
+
15
+ interface Person44 {
16
+ name: string;
17
+ age?: number;
18
+ }
19
+
20
+ // @ts-expect-error
21
+ const person: Person44 = {
22
+ name: 'Bob',
23
+ age: undefined, // errors with exactOptionalPropertyTypes = true.
24
+ };
25
+
26
+ try {
27
+ console.log('hello');
28
+ } catch (error) {
29
+ // @ts-expect-error
30
+ console.error(err.message); // errors with useUnknownInCatchVariables = true
31
+ }
32
+
33
+ /**
34
+ * Check for Typescript 4.5 features
35
+ */
36
+
37
+ // type modifiers on import names
38
+ import { ok, type AssertPredicate } from 'node:assert';
39
+
40
+ ok({} as AssertPredicate);
41
+
42
+ // Awaited type
43
+ ok({} as Awaited<Promise<string>>);
44
+
45
+ // template string types as discriminants
46
+ interface Success45 {
47
+ type: `${string}Success`;
48
+ body: string;
49
+ }
50
+
51
+ interface Error45 {
52
+ type: `${string}Error`;
53
+ message: string;
54
+ }
55
+
56
+ function handler45(r: Success45 | Error45) {
57
+ if (r.type === 'HttpSuccess') {
58
+ // 'r' has type 'Success'
59
+ assert.ok(r.body);
60
+ }
61
+ }
62
+ handler45({ type: 'HttpSuccess', body: 'Hello' });
63
+
64
+ /**
65
+ * Check for Typescript 4.6 features
66
+ */
67
+
68
+ // control flow analysis for destructured discriminated unions
69
+ type Action46 = { kind: 'NumberContents'; payload: number } | { kind: 'StringContents'; payload: string };
70
+
71
+ function processAction46(action: Action46) {
72
+ const { kind, payload } = action;
73
+ if (kind === 'NumberContents') {
74
+ assert.ok(payload * 2);
75
+ } else if (kind === 'StringContents') {
76
+ assert.ok(payload.trim());
77
+ }
78
+ }
79
+ assert.equal(processAction46({ kind: 'NumberContents', payload: 5 }), undefined);
80
+
81
+ /**
82
+ * Check for Typescript 4.7 features
83
+ */
84
+
85
+ // control-flow analysis for bracketed element access
86
+ const key = Symbol();
87
+ const numberOrString = Math.random() < 0.5 ? 42 : 'hello';
88
+ const obj = {
89
+ [key]: numberOrString,
90
+ };
91
+ if (typeof obj[key] === 'string') {
92
+ assert.ok(obj[key].toUpperCase()); // 4.7 knows that obj[key] is a string
93
+ }
94
+
95
+ /**
96
+ * Check for Typescript 4.8 features
97
+ */
98
+
99
+ // improved intersection reduction, union compatibility, and narrowing
100
+ function f48(x: unknown, y: {} | null | undefined) {
101
+ x = y;
102
+ y = x; // works in 4.8
103
+ assert.equal(x, y);
104
+ }
105
+ f48(null, undefined);
106
+
107
+ function foo48<T>(x: NonNullable<T>, y: NonNullable<NonNullable<T>>) {
108
+ x = y;
109
+ y = x; // works in 4.8
110
+ assert.equal(x, y);
111
+ }
112
+ foo48<string>('hello', 'world');
113
+
114
+ function throwIfNullable48<T>(value: T): NonNullable<T> {
115
+ if (value === undefined || value === null) {
116
+ throw Error('Nullable value!');
117
+ }
118
+ return value; // works in 4.8
119
+ }
120
+ assert.equal(throwIfNullable48(42), 42);
121
+
122
+ /**
123
+ * Check for Typescript 4.9 features
124
+ */
125
+ type Colors49 = 'red' | 'green' | 'blue';
126
+ type RGB49 = [red: number, green: number, blue: number];
127
+ const palette49 = {
128
+ red: [255, 0, 0],
129
+ green: '#00ff00',
130
+ // @ts-expect-error
131
+ bleu: [0, 0, 255], // typo is now caught
132
+ } satisfies Record<Colors49, string | RGB49>;
133
+ assert.equal(typeof palette49, 'object');
134
+
135
+ console.log('complete');
package/tsconfig.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "esnext",
4
- "module": "esnext",
5
- "moduleResolution": "bundler",
3
+ "module": "commonjs",
4
+ "target": "es2022",
6
5
  "lib": ["esnext", "dom", "webworker"],
7
6
  "sourceMap": true,
8
7
  "inlineSources": true,
@@ -19,13 +18,12 @@
19
18
  "noUnusedLocals": true,
20
19
  "noUnusedParameters": true,
21
20
  "alwaysStrict": true,
22
- "verbatimModuleSyntax": true,
21
+ "verbatimModuleSyntax": false,
23
22
  "noFallthroughCasesInSwitch": true,
24
23
  "forceConsistentCasingInFileNames": true,
25
24
  "emitDecoratorMetadata": true,
26
25
  "experimentalDecorators": true,
27
26
  "resolveJsonModule": true,
28
- "esModuleInterop": true,
29
27
  "noUncheckedIndexedAccess": true,
30
28
  "noPropertyAccessFromIndexSignature": true,
31
29
  "allowUnusedLabels": false,
@@ -1,3 +0,0 @@
1
- // module-directory/index.ts
2
-
3
- export default () => 'module-directory-index';
package/src/module.ts DELETED
@@ -1,9 +0,0 @@
1
- // module.ts
2
-
3
- export function test() {
4
- return 'export function test';
5
- }
6
-
7
- export default function () {
8
- return 'export default function';
9
- }