@financeable/lenders 0.5.4 → 0.5.6
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 +11 -7
- package/bin/mcp-server.js +30 -20
- package/bin/mcp-server.js.map +16 -16
- package/dist/commonjs/funcs/createCommercialSubmission.d.ts.map +1 -1
- package/dist/commonjs/funcs/createCommercialSubmission.js +2 -1
- package/dist/commonjs/funcs/createCommercialSubmission.js.map +1 -1
- package/dist/commonjs/funcs/createConsumerSubmission.d.ts.map +1 -1
- package/dist/commonjs/funcs/createConsumerSubmission.js +2 -1
- package/dist/commonjs/funcs/createConsumerSubmission.js.map +1 -1
- package/dist/commonjs/funcs/createDocumentsSubmission.d.ts.map +1 -1
- package/dist/commonjs/funcs/createDocumentsSubmission.js +2 -1
- package/dist/commonjs/funcs/createDocumentsSubmission.js.map +1 -1
- package/dist/commonjs/funcs/createPersonalSubmission.d.ts.map +1 -1
- package/dist/commonjs/funcs/createPersonalSubmission.js +2 -1
- package/dist/commonjs/funcs/createPersonalSubmission.js.map +1 -1
- package/dist/commonjs/lib/config.d.ts +3 -3
- package/dist/commonjs/lib/config.js +3 -3
- package/dist/commonjs/lib/encodings.d.ts +1 -0
- package/dist/commonjs/lib/encodings.d.ts.map +1 -1
- package/dist/commonjs/lib/encodings.js +27 -5
- package/dist/commonjs/lib/encodings.js.map +1 -1
- package/dist/commonjs/lib/files.d.ts +13 -0
- package/dist/commonjs/lib/files.d.ts.map +1 -1
- package/dist/commonjs/lib/files.js +19 -0
- package/dist/commonjs/lib/files.js.map +1 -1
- package/dist/commonjs/lib/matchers.d.ts.map +1 -1
- package/dist/commonjs/lib/matchers.js +0 -1
- package/dist/commonjs/lib/matchers.js.map +1 -1
- package/dist/commonjs/lib/sdks.d.ts +1 -1
- package/dist/commonjs/lib/sdks.d.ts.map +1 -1
- package/dist/commonjs/lib/sdks.js +10 -6
- package/dist/commonjs/lib/sdks.js.map +1 -1
- package/dist/commonjs/lib/security.d.ts.map +1 -1
- package/dist/commonjs/lib/security.js +1 -2
- package/dist/commonjs/lib/security.js.map +1 -1
- package/dist/commonjs/lib/url.d.ts.map +1 -1
- package/dist/commonjs/lib/url.js +4 -2
- package/dist/commonjs/lib/url.js.map +1 -1
- package/dist/commonjs/mcp-server/mcp-server.js +1 -1
- package/dist/commonjs/mcp-server/server.js +1 -1
- package/dist/commonjs/mcp-server/shared.js +1 -1
- package/dist/commonjs/mcp-server/shared.js.map +1 -1
- package/dist/commonjs/models/components/consumerincometypes.d.ts +1 -0
- package/dist/commonjs/models/components/consumerincometypes.d.ts.map +1 -1
- package/dist/commonjs/models/components/consumerincometypes.js +1 -0
- package/dist/commonjs/models/components/consumerincometypes.js.map +1 -1
- package/dist/commonjs/models/components/customerprofile.d.ts +2 -0
- package/dist/commonjs/models/components/customerprofile.d.ts.map +1 -1
- package/dist/commonjs/models/components/customerprofile.js +2 -0
- package/dist/commonjs/models/components/customerprofile.js.map +1 -1
- package/dist/esm/funcs/createCommercialSubmission.d.ts.map +1 -1
- package/dist/esm/funcs/createCommercialSubmission.js +2 -1
- package/dist/esm/funcs/createCommercialSubmission.js.map +1 -1
- package/dist/esm/funcs/createConsumerSubmission.d.ts.map +1 -1
- package/dist/esm/funcs/createConsumerSubmission.js +2 -1
- package/dist/esm/funcs/createConsumerSubmission.js.map +1 -1
- package/dist/esm/funcs/createDocumentsSubmission.d.ts.map +1 -1
- package/dist/esm/funcs/createDocumentsSubmission.js +2 -1
- package/dist/esm/funcs/createDocumentsSubmission.js.map +1 -1
- package/dist/esm/funcs/createPersonalSubmission.d.ts.map +1 -1
- package/dist/esm/funcs/createPersonalSubmission.js +2 -1
- package/dist/esm/funcs/createPersonalSubmission.js.map +1 -1
- package/dist/esm/lib/config.d.ts +3 -3
- package/dist/esm/lib/config.js +3 -3
- package/dist/esm/lib/encodings.d.ts +1 -0
- package/dist/esm/lib/encodings.d.ts.map +1 -1
- package/dist/esm/lib/encodings.js +26 -5
- package/dist/esm/lib/encodings.js.map +1 -1
- package/dist/esm/lib/files.d.ts +13 -0
- package/dist/esm/lib/files.d.ts.map +1 -1
- package/dist/esm/lib/files.js +18 -0
- package/dist/esm/lib/files.js.map +1 -1
- package/dist/esm/lib/matchers.d.ts.map +1 -1
- package/dist/esm/lib/matchers.js +0 -1
- package/dist/esm/lib/matchers.js.map +1 -1
- package/dist/esm/lib/sdks.d.ts +1 -1
- package/dist/esm/lib/sdks.d.ts.map +1 -1
- package/dist/esm/lib/sdks.js +11 -7
- package/dist/esm/lib/sdks.js.map +1 -1
- package/dist/esm/lib/security.d.ts.map +1 -1
- package/dist/esm/lib/security.js +1 -2
- package/dist/esm/lib/security.js.map +1 -1
- package/dist/esm/lib/url.d.ts.map +1 -1
- package/dist/esm/lib/url.js +4 -2
- package/dist/esm/lib/url.js.map +1 -1
- package/dist/esm/mcp-server/mcp-server.js +1 -1
- package/dist/esm/mcp-server/server.js +1 -1
- package/dist/esm/mcp-server/shared.js +1 -1
- package/dist/esm/mcp-server/shared.js.map +1 -1
- package/dist/esm/models/components/consumerincometypes.d.ts +1 -0
- package/dist/esm/models/components/consumerincometypes.d.ts.map +1 -1
- package/dist/esm/models/components/consumerincometypes.js +1 -0
- package/dist/esm/models/components/consumerincometypes.js.map +1 -1
- package/dist/esm/models/components/customerprofile.d.ts +2 -0
- package/dist/esm/models/components/customerprofile.d.ts.map +1 -1
- package/dist/esm/models/components/customerprofile.js +2 -0
- package/dist/esm/models/components/customerprofile.js.map +1 -1
- package/jsr.json +1 -1
- package/package.json +2 -2
- package/src/funcs/createCommercialSubmission.ts +3 -1
- package/src/funcs/createConsumerSubmission.ts +3 -1
- package/src/funcs/createDocumentsSubmission.ts +3 -1
- package/src/funcs/createPersonalSubmission.ts +3 -1
- package/src/lib/config.ts +3 -3
- package/src/lib/encodings.ts +32 -4
- package/src/lib/files.ts +22 -0
- package/src/lib/matchers.ts +3 -2
- package/src/lib/sdks.ts +10 -9
- package/src/lib/security.ts +1 -2
- package/src/lib/url.ts +16 -14
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/server.ts +1 -1
- package/src/mcp-server/shared.ts +2 -2
- package/src/models/components/consumerincometypes.ts +1 -0
- package/src/models/components/customerprofile.ts +4 -0
- package/.devcontainer/devcontainer.json +0 -45
- package/examples/package-lock.json +0 -620
- package/examples/package.json +0 -18
- package/tsconfig.json +0 -40
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { FinanceableLendersCore } from "../core.js";
|
|
6
6
|
import { encodeFormQuery, encodeJSON } from "../lib/encodings.js";
|
|
7
|
+
import { matchStatusCode } from "../lib/http.js";
|
|
7
8
|
import * as M from "../lib/matchers.js";
|
|
8
9
|
import { compactMap } from "../lib/primitives.js";
|
|
9
10
|
import { safeParse } from "../lib/schemas.js";
|
|
@@ -136,7 +137,8 @@ async function $do(
|
|
|
136
137
|
|
|
137
138
|
const doResult = await client._do(req, {
|
|
138
139
|
context,
|
|
139
|
-
|
|
140
|
+
isErrorStatusCode: (statusCode: number) =>
|
|
141
|
+
matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
|
|
140
142
|
retryConfig: context.retryConfig,
|
|
141
143
|
retryCodes: context.retryCodes,
|
|
142
144
|
});
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { FinanceableLendersCore } from "../core.js";
|
|
6
6
|
import { encodeFormQuery, encodeJSON } from "../lib/encodings.js";
|
|
7
|
+
import { matchStatusCode } from "../lib/http.js";
|
|
7
8
|
import * as M from "../lib/matchers.js";
|
|
8
9
|
import { compactMap } from "../lib/primitives.js";
|
|
9
10
|
import { safeParse } from "../lib/schemas.js";
|
|
@@ -136,7 +137,8 @@ async function $do(
|
|
|
136
137
|
|
|
137
138
|
const doResult = await client._do(req, {
|
|
138
139
|
context,
|
|
139
|
-
|
|
140
|
+
isErrorStatusCode: (statusCode: number) =>
|
|
141
|
+
matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
|
|
140
142
|
retryConfig: context.retryConfig,
|
|
141
143
|
retryCodes: context.retryCodes,
|
|
142
144
|
});
|
package/src/lib/config.ts
CHANGED
|
@@ -59,8 +59,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
|
|
|
59
59
|
export const SDK_METADATA = {
|
|
60
60
|
language: "typescript",
|
|
61
61
|
openapiDocVersion: "0.1.0",
|
|
62
|
-
sdkVersion: "0.5.
|
|
63
|
-
genVersion: "2.
|
|
62
|
+
sdkVersion: "0.5.6",
|
|
63
|
+
genVersion: "2.881.0",
|
|
64
64
|
userAgent:
|
|
65
|
-
"speakeasy-sdk/typescript 0.5.
|
|
65
|
+
"speakeasy-sdk/typescript 0.5.6 2.881.0 0.1.0 @financeable/lenders",
|
|
66
66
|
} as const;
|
package/src/lib/encodings.ts
CHANGED
|
@@ -479,6 +479,23 @@ export const encodeSpaceDelimitedQuery = queryEncoder(encodeSpaceDelimited);
|
|
|
479
479
|
export const encodePipeDelimitedQuery = queryEncoder(encodePipeDelimited);
|
|
480
480
|
export const encodeDeepObjectQuery = queryEncoder(encodeDeepObject);
|
|
481
481
|
|
|
482
|
+
function isBlobLike(val: unknown): val is Blob {
|
|
483
|
+
if (val instanceof Blob) {
|
|
484
|
+
return true;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
if (typeof val !== "object" || val == null || !(Symbol.toStringTag in val)) {
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
const tag = val[Symbol.toStringTag];
|
|
492
|
+
if (tag !== "Blob" && tag !== "File") {
|
|
493
|
+
return false;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
return "stream" in val && typeof val.stream === "function";
|
|
497
|
+
}
|
|
498
|
+
|
|
482
499
|
export function appendForm(
|
|
483
500
|
fd: FormData,
|
|
484
501
|
key: string,
|
|
@@ -487,11 +504,22 @@ export function appendForm(
|
|
|
487
504
|
): void {
|
|
488
505
|
if (value == null) {
|
|
489
506
|
return;
|
|
490
|
-
} else if (value
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
507
|
+
} else if (isBlobLike(value)) {
|
|
508
|
+
if (fileName) {
|
|
509
|
+
fd.append(key, value as Blob, fileName);
|
|
510
|
+
} else {
|
|
511
|
+
fd.append(key, value as Blob);
|
|
512
|
+
}
|
|
494
513
|
} else {
|
|
495
514
|
fd.append(key, String(value));
|
|
496
515
|
}
|
|
497
516
|
}
|
|
517
|
+
|
|
518
|
+
export async function normalizeBlob(
|
|
519
|
+
value: Pick<Blob, "arrayBuffer" | "type">,
|
|
520
|
+
): Promise<Blob> {
|
|
521
|
+
if (value instanceof Blob) {
|
|
522
|
+
return value;
|
|
523
|
+
}
|
|
524
|
+
return new Blob([await value.arrayBuffer()], { type: value.type });
|
|
525
|
+
}
|
package/src/lib/files.ts
CHANGED
|
@@ -80,3 +80,25 @@ export function getContentTypeFromFileName(fileName: string): string | null {
|
|
|
80
80
|
|
|
81
81
|
return mimeTypes[ext] || null;
|
|
82
82
|
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Creates a Blob from file content with the given MIME type.
|
|
86
|
+
*
|
|
87
|
+
* Node.js Buffers are Uint8Array subclasses that may share a pooled
|
|
88
|
+
* ArrayBuffer (byteOffset > 0, byteLength < buffer.byteLength). Passing
|
|
89
|
+
* such a Buffer directly to `new Blob([buf])` can include the entire
|
|
90
|
+
* underlying pool on some runtimes, producing a Blob with extra bytes
|
|
91
|
+
* that corrupts multipart uploads.
|
|
92
|
+
*
|
|
93
|
+
* Copying into a standalone Uint8Array ensures the Blob receives only the
|
|
94
|
+
* intended bytes regardless of runtime behaviour.
|
|
95
|
+
*/
|
|
96
|
+
export function bytesToBlob(
|
|
97
|
+
content: Uint8Array<ArrayBufferLike> | ArrayBuffer | Blob | string,
|
|
98
|
+
contentType: string,
|
|
99
|
+
): Blob {
|
|
100
|
+
if (content instanceof Uint8Array) {
|
|
101
|
+
return new Blob([new Uint8Array(content)], { type: contentType });
|
|
102
|
+
}
|
|
103
|
+
return new Blob([content as BlobPart], { type: contentType });
|
|
104
|
+
}
|
package/src/lib/matchers.ts
CHANGED
|
@@ -248,8 +248,9 @@ export function match<T, E>(
|
|
|
248
248
|
raw = body;
|
|
249
249
|
break;
|
|
250
250
|
default:
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
throw new Error(
|
|
252
|
+
`Unsupported response type: ${encoding satisfies never}`,
|
|
253
|
+
);
|
|
253
254
|
}
|
|
254
255
|
|
|
255
256
|
if (matcher.enc === "fail") {
|
package/src/lib/sdks.ts
CHANGED
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
isConnectionError,
|
|
23
23
|
isTimeoutError,
|
|
24
24
|
matchContentType,
|
|
25
|
-
matchStatusCode,
|
|
26
25
|
} from "./http.js";
|
|
27
26
|
import { Logger } from "./logger.js";
|
|
28
27
|
import { retry, RetryConfig } from "./retries.js";
|
|
@@ -127,13 +126,15 @@ export class ClientSDK {
|
|
|
127
126
|
if (!base) {
|
|
128
127
|
return ERR(new InvalidRequestError("No base URL provided for operation"));
|
|
129
128
|
}
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
const baseURL = new URL(base);
|
|
130
|
+
let reqURL: URL;
|
|
133
131
|
if (path) {
|
|
134
|
-
|
|
135
|
-
reqURL
|
|
132
|
+
baseURL.pathname = baseURL.pathname.replace(/\/+$/, "") + "/";
|
|
133
|
+
reqURL = new URL(path, baseURL);
|
|
134
|
+
} else {
|
|
135
|
+
reqURL = baseURL;
|
|
136
136
|
}
|
|
137
|
+
reqURL.hash = "";
|
|
137
138
|
|
|
138
139
|
let finalQuery = query || "";
|
|
139
140
|
|
|
@@ -231,7 +232,7 @@ export class ClientSDK {
|
|
|
231
232
|
request: Request,
|
|
232
233
|
options: {
|
|
233
234
|
context: HookContext;
|
|
234
|
-
|
|
235
|
+
isErrorStatusCode: (statusCode: number) => boolean;
|
|
235
236
|
retryConfig: RetryConfig;
|
|
236
237
|
retryCodes: string[];
|
|
237
238
|
},
|
|
@@ -244,7 +245,7 @@ export class ClientSDK {
|
|
|
244
245
|
| UnexpectedClientError
|
|
245
246
|
>
|
|
246
247
|
> {
|
|
247
|
-
const { context,
|
|
248
|
+
const { context, isErrorStatusCode } = options;
|
|
248
249
|
|
|
249
250
|
return retry(
|
|
250
251
|
async () => {
|
|
@@ -256,7 +257,7 @@ export class ClientSDK {
|
|
|
256
257
|
let response = await this.#httpClient.request(req);
|
|
257
258
|
|
|
258
259
|
try {
|
|
259
|
-
if (
|
|
260
|
+
if (isErrorStatusCode(response.status)) {
|
|
260
261
|
const result = await this.#hooks.afterError(
|
|
261
262
|
context,
|
|
262
263
|
response,
|
package/src/lib/security.ts
CHANGED
|
@@ -195,8 +195,7 @@ export function resolveSecurity(
|
|
|
195
195
|
applyBearer(state, spec);
|
|
196
196
|
break;
|
|
197
197
|
default:
|
|
198
|
-
spec satisfies never;
|
|
199
|
-
throw SecurityError.unrecognizedType(type);
|
|
198
|
+
throw SecurityError.unrecognizedType((spec satisfies never, type));
|
|
200
199
|
}
|
|
201
200
|
});
|
|
202
201
|
|
package/src/lib/url.ts
CHANGED
|
@@ -13,21 +13,23 @@ export function pathToFunc(
|
|
|
13
13
|
const paramRE = /\{([a-zA-Z0-9_][a-zA-Z0-9_-]*?)\}/g;
|
|
14
14
|
|
|
15
15
|
return function buildURLPath(params: Record<string, unknown> = {}): string {
|
|
16
|
-
return pathPattern
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
return pathPattern
|
|
17
|
+
.replace(paramRE, function (_, placeholder) {
|
|
18
|
+
if (!hasOwn.call(params, placeholder)) {
|
|
19
|
+
throw new Error(`Parameter '${placeholder}' is required`);
|
|
20
|
+
}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
const value = params[placeholder];
|
|
23
|
+
if (typeof value !== "string" && typeof value !== "number") {
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Parameter '${placeholder}' must be a string or number`,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
return options?.charEncoding === "percent"
|
|
30
|
+
? encodeURIComponent(`${value}`)
|
|
31
|
+
: `${value}`;
|
|
32
|
+
})
|
|
33
|
+
.replace(/^\/+/, "");
|
|
32
34
|
};
|
|
33
35
|
}
|
package/src/mcp-server/server.ts
CHANGED
package/src/mcp-server/shared.ts
CHANGED
|
@@ -16,12 +16,12 @@ export async function consumeStream(
|
|
|
16
16
|
stream: ReadableStream<Uint8Array>,
|
|
17
17
|
): Promise<Uint8Array> {
|
|
18
18
|
const reader = stream.getReader();
|
|
19
|
-
const chunks:
|
|
19
|
+
const chunks: ArrayBuffer[] = [];
|
|
20
20
|
|
|
21
21
|
try {
|
|
22
22
|
while (true) {
|
|
23
23
|
const { done, value } = await reader.read();
|
|
24
|
-
if (value != null) chunks.push(value);
|
|
24
|
+
if (value != null) chunks.push(new Uint8Array(value).buffer);
|
|
25
25
|
if (done) break;
|
|
26
26
|
}
|
|
27
27
|
} finally {
|
|
@@ -45,6 +45,7 @@ export type CustomerProfile = {
|
|
|
45
45
|
shareOfExpenses?: number | undefined;
|
|
46
46
|
rentAmount?: string | undefined;
|
|
47
47
|
landlordName?: string | undefined;
|
|
48
|
+
serviceabilitySurplus?: number | undefined;
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
/** @internal */
|
|
@@ -62,6 +63,7 @@ export const CustomerProfile$inboundSchema: z.ZodType<
|
|
|
62
63
|
shareOfExpenses: z.number().optional(),
|
|
63
64
|
rentAmount: z.string().optional(),
|
|
64
65
|
landlordName: z.string().optional(),
|
|
66
|
+
serviceabilitySurplus: z.number().optional(),
|
|
65
67
|
}).transform((v) => {
|
|
66
68
|
return remap$(v, {
|
|
67
69
|
"_id": "id",
|
|
@@ -78,6 +80,7 @@ export type CustomerProfile$Outbound = {
|
|
|
78
80
|
shareOfExpenses?: number | undefined;
|
|
79
81
|
rentAmount?: string | undefined;
|
|
80
82
|
landlordName?: string | undefined;
|
|
83
|
+
serviceabilitySurplus?: number | undefined;
|
|
81
84
|
};
|
|
82
85
|
|
|
83
86
|
/** @internal */
|
|
@@ -95,6 +98,7 @@ export const CustomerProfile$outboundSchema: z.ZodType<
|
|
|
95
98
|
shareOfExpenses: z.number().optional(),
|
|
96
99
|
rentAmount: z.string().optional(),
|
|
97
100
|
landlordName: z.string().optional(),
|
|
101
|
+
serviceabilitySurplus: z.number().optional(),
|
|
98
102
|
}).transform((v) => {
|
|
99
103
|
return remap$(v, {
|
|
100
104
|
id: "_id",
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
|
2
|
-
// README at: https://github.com/devcontainers/images/tree/main/src/typescript-node
|
|
3
|
-
{
|
|
4
|
-
"name": "TypeScript",
|
|
5
|
-
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye",
|
|
6
|
-
// Features to add to the dev container. More info: https://containers.dev/features.
|
|
7
|
-
// "features": {},
|
|
8
|
-
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
|
9
|
-
// "forwardPorts": [],
|
|
10
|
-
// Use 'postCreateCommand' to run commands after the container is created.
|
|
11
|
-
"postCreateCommand": "sudo chmod +x ./.devcontainer/setup.sh && ./.devcontainer/setup.sh",
|
|
12
|
-
"customizations": {
|
|
13
|
-
"vscode": {
|
|
14
|
-
"extensions": [
|
|
15
|
-
"ms-vscode.vscode-typescript-tslint-plugin",
|
|
16
|
-
"esbenp.prettier-vscode",
|
|
17
|
-
"github.vscode-pull-request-github"
|
|
18
|
-
],
|
|
19
|
-
"settings": {
|
|
20
|
-
"files.eol": "\n",
|
|
21
|
-
"editor.formatOnSave": true,
|
|
22
|
-
"typescript.tsc.autoDetect": "on",
|
|
23
|
-
"typescript.updateImportsOnFileMove.enabled": "always",
|
|
24
|
-
"typescript.preferences.importModuleSpecifier": "relative",
|
|
25
|
-
"[typescript]": {
|
|
26
|
-
"editor.codeActionsOnSave": {
|
|
27
|
-
"source.organizeImports": true
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"[typescriptreact]": {
|
|
31
|
-
"editor.codeActionsOnSave": {
|
|
32
|
-
"source.organizeImports": true
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"codespaces": {
|
|
38
|
-
"openFiles": [
|
|
39
|
-
".devcontainer/README.md"
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
|
44
|
-
// "remoteUser": "root"
|
|
45
|
-
}
|