chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
venv/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
.env
|
||||
.vercel
|
||||
|
||||
# LangGraph API
|
||||
.langgraph_api
|
||||
node_modules/
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"node_version": "20",
|
||||
"dockerfile_lines": [],
|
||||
"dependencies": ["."],
|
||||
"graphs": {
|
||||
"sample_agent": "./src/agent.ts:graph"
|
||||
},
|
||||
"env": "../.env"
|
||||
}
|
||||
+4584
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "agent",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"keywords": [],
|
||||
"license": "ISC",
|
||||
"author": "",
|
||||
"type": "module",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "langgraphjs dev --port 8123 --no-browser"
|
||||
},
|
||||
"dependencies": {
|
||||
"@copilotkit/sdk-js": "1.62.3",
|
||||
"@langchain/core": "1.1.49",
|
||||
"@langchain/langgraph": "1.3.0",
|
||||
"@langchain/openai": "1.4.4",
|
||||
"langchain": "1.3.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@langchain/langgraph-cli": "1.2.4",
|
||||
"@types/html-to-text": "^9.0.4",
|
||||
"@types/node": "^22.9.0",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import { promises as fs } from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
export const A2UI_OPERATIONS_KEY = "a2ui_operations";
|
||||
export const BASIC_CATALOG_ID = "copilotkit://basic-catalog";
|
||||
|
||||
export type A2UIOperation = Record<string, unknown>;
|
||||
|
||||
export function createSurface(
|
||||
surfaceId: string,
|
||||
catalogId: string = BASIC_CATALOG_ID,
|
||||
): A2UIOperation {
|
||||
return {
|
||||
version: "v0.9",
|
||||
createSurface: { surfaceId, catalogId },
|
||||
};
|
||||
}
|
||||
|
||||
export function updateComponents(
|
||||
surfaceId: string,
|
||||
components: unknown[],
|
||||
): A2UIOperation {
|
||||
return {
|
||||
version: "v0.9",
|
||||
updateComponents: { surfaceId, components },
|
||||
};
|
||||
}
|
||||
|
||||
export function updateDataModel(
|
||||
surfaceId: string,
|
||||
value: unknown,
|
||||
p: string = "/",
|
||||
): A2UIOperation {
|
||||
return {
|
||||
version: "v0.9",
|
||||
updateDataModel: { surfaceId, path: p, value },
|
||||
};
|
||||
}
|
||||
|
||||
export function render(operations: A2UIOperation[]): string {
|
||||
return JSON.stringify({ [A2UI_OPERATIONS_KEY]: operations });
|
||||
}
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
export async function loadSchema(relativePath: string): Promise<unknown[]> {
|
||||
const full = path.isAbsolute(relativePath)
|
||||
? relativePath
|
||||
: path.join(__dirname, relativePath);
|
||||
const raw = await fs.readFile(full, "utf8");
|
||||
return JSON.parse(raw) as unknown[];
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"id": "root",
|
||||
"component": "Row",
|
||||
"children": {
|
||||
"componentId": "flight-card",
|
||||
"path": "/flights"
|
||||
},
|
||||
"gap": 16
|
||||
},
|
||||
{
|
||||
"id": "flight-card",
|
||||
"component": "FlightCard",
|
||||
"airline": { "path": "airline" },
|
||||
"airlineLogo": { "path": "airlineLogo" },
|
||||
"flightNumber": { "path": "flightNumber" },
|
||||
"origin": { "path": "origin" },
|
||||
"destination": { "path": "destination" },
|
||||
"date": { "path": "date" },
|
||||
"departureTime": { "path": "departureTime" },
|
||||
"arrivalTime": { "path": "arrivalTime" },
|
||||
"duration": { "path": "duration" },
|
||||
"status": { "path": "status" },
|
||||
"price": { "path": "price" },
|
||||
"action": {
|
||||
"event": {
|
||||
"name": "book_flight",
|
||||
"context": {
|
||||
"flightNumber": { "path": "flightNumber" },
|
||||
"origin": { "path": "origin" },
|
||||
"destination": { "path": "destination" },
|
||||
"price": { "path": "price" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,97 @@
|
||||
import { z } from "zod";
|
||||
import { tool, type ToolRuntime } from "@langchain/core/tools";
|
||||
import { SystemMessage } from "@langchain/core/messages";
|
||||
import { ChatOpenAI } from "@langchain/openai";
|
||||
import {
|
||||
createSurface,
|
||||
render,
|
||||
updateComponents,
|
||||
updateDataModel,
|
||||
} from "./a2ui.js";
|
||||
|
||||
const CUSTOM_CATALOG_ID = "copilotkit://app-dashboard-catalog";
|
||||
|
||||
const renderA2uiSchema = z.object({
|
||||
surfaceId: z.string(),
|
||||
catalogId: z.string(),
|
||||
components: z.array(z.record(z.any())),
|
||||
data: z.record(z.any()).optional(),
|
||||
});
|
||||
|
||||
const renderA2ui = tool(async () => "rendered", {
|
||||
name: "render_a2ui",
|
||||
description:
|
||||
"Render a dynamic A2UI v0.9 surface. components must be a flat array whose root id is 'root'.",
|
||||
schema: renderA2uiSchema,
|
||||
});
|
||||
|
||||
const DynamicStateSchema = z.object({
|
||||
messages: z.array(z.any()).default(() => []),
|
||||
copilotkit: z
|
||||
.object({
|
||||
context: z
|
||||
.array(z.object({ value: z.string().optional() }).passthrough())
|
||||
.optional(),
|
||||
})
|
||||
.passthrough()
|
||||
.optional(),
|
||||
});
|
||||
|
||||
export const generate_a2ui = tool(
|
||||
async (
|
||||
_input: Record<string, never>,
|
||||
runtime: ToolRuntime<typeof DynamicStateSchema>,
|
||||
) => {
|
||||
const messages = (runtime.state.messages ?? []).slice(0, -1);
|
||||
const contextEntries = runtime.state.copilotkit?.context ?? [];
|
||||
const contextText = contextEntries
|
||||
.map((e) => (e && typeof e === "object" ? (e.value ?? "") : ""))
|
||||
.filter(Boolean)
|
||||
.join("\n\n");
|
||||
|
||||
const model = new ChatOpenAI({ model: "gpt-4.1" });
|
||||
const modelWithTool = model.bindTools!([renderA2ui], {
|
||||
tool_choice: "render_a2ui",
|
||||
});
|
||||
|
||||
const response = await modelWithTool.invoke([
|
||||
new SystemMessage({ content: contextText }),
|
||||
...(messages as never[]),
|
||||
]);
|
||||
|
||||
const toolCalls = (
|
||||
response as { tool_calls?: Array<{ args: Record<string, unknown> }> }
|
||||
).tool_calls;
|
||||
if (!toolCalls || toolCalls.length === 0) {
|
||||
return JSON.stringify({ error: "LLM did not call render_a2ui" });
|
||||
}
|
||||
|
||||
const args = toolCalls[0].args as {
|
||||
surfaceId?: string;
|
||||
catalogId?: string;
|
||||
components?: unknown[];
|
||||
data?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
const surfaceId = args.surfaceId ?? "dynamic-surface";
|
||||
const catalogId = args.catalogId ?? CUSTOM_CATALOG_ID;
|
||||
const components = args.components ?? [];
|
||||
const data = args.data ?? {};
|
||||
|
||||
const ops = [
|
||||
createSurface(surfaceId, catalogId),
|
||||
updateComponents(surfaceId, components),
|
||||
];
|
||||
if (Object.keys(data).length > 0) {
|
||||
ops.push(updateDataModel(surfaceId, data));
|
||||
}
|
||||
return render(ops);
|
||||
},
|
||||
{
|
||||
name: "generate_a2ui",
|
||||
description:
|
||||
"Generate dynamic A2UI components based on the conversation. " +
|
||||
"A secondary LLM designs the UI schema and data.",
|
||||
schema: z.object({}),
|
||||
},
|
||||
);
|
||||
@@ -0,0 +1,56 @@
|
||||
import { z } from "zod";
|
||||
import { tool } from "@langchain/core/tools";
|
||||
import {
|
||||
createSurface,
|
||||
loadSchema,
|
||||
render,
|
||||
updateComponents,
|
||||
updateDataModel,
|
||||
} from "./a2ui.js";
|
||||
|
||||
const CATALOG_ID = "copilotkit://app-dashboard-catalog";
|
||||
const SURFACE_ID = "flight-search-results";
|
||||
|
||||
const FlightSchema = z.object({
|
||||
id: z.string(),
|
||||
airline: z.string(),
|
||||
airlineLogo: z.string(),
|
||||
flightNumber: z.string(),
|
||||
origin: z.string(),
|
||||
destination: z.string(),
|
||||
date: z.string(),
|
||||
departureTime: z.string(),
|
||||
arrivalTime: z.string(),
|
||||
duration: z.string(),
|
||||
status: z.string(),
|
||||
statusIcon: z.string(),
|
||||
price: z.string(),
|
||||
});
|
||||
|
||||
let _cachedSchema: unknown[] | null = null;
|
||||
async function flightSchema(): Promise<unknown[]> {
|
||||
if (_cachedSchema === null) {
|
||||
_cachedSchema = await loadSchema("a2ui/schemas/flight_schema.json");
|
||||
}
|
||||
return _cachedSchema;
|
||||
}
|
||||
|
||||
export const search_flights = tool(
|
||||
async (input: { flights: z.infer<typeof FlightSchema>[] }) => {
|
||||
const schema = await flightSchema();
|
||||
return render([
|
||||
createSurface(SURFACE_ID, CATALOG_ID),
|
||||
updateComponents(SURFACE_ID, schema),
|
||||
updateDataModel(SURFACE_ID, { flights: input.flights }),
|
||||
]);
|
||||
},
|
||||
{
|
||||
name: "search_flights",
|
||||
description:
|
||||
"Search for flights and display the results as rich cards. Return exactly 2 flights. " +
|
||||
"Each flight must have id, airline, airlineLogo (Google favicon API URL), flightNumber, " +
|
||||
"origin, destination, date (short readable), departureTime, arrivalTime, duration, " +
|
||||
"status, statusIcon (colored dot URL), and price.",
|
||||
schema: z.object({ flights: z.array(FlightSchema) }),
|
||||
},
|
||||
);
|
||||
@@ -0,0 +1,57 @@
|
||||
import { z } from "zod";
|
||||
import { createAgent } from "langchain";
|
||||
import { ChatOpenAI } from "@langchain/openai";
|
||||
import {
|
||||
copilotkitMiddleware,
|
||||
CopilotKitStateSchema,
|
||||
zodState,
|
||||
} from "@copilotkit/sdk-js/langgraph";
|
||||
import { StateSchema } from "@langchain/langgraph";
|
||||
|
||||
import {
|
||||
stateItem,
|
||||
stateStreamingMiddleware,
|
||||
} from "@copilotkit/sdk-js/langgraph-middlewares";
|
||||
|
||||
import { todo_tools, TodoSchema } from "./todos.js";
|
||||
import { query_data } from "./query.js";
|
||||
import { search_flights } from "./a2ui_fixed_schema.js";
|
||||
import { generate_a2ui } from "./a2ui_dynamic_schema.js";
|
||||
|
||||
const AgentStateSchema = new StateSchema({
|
||||
todos: zodState(z.array(TodoSchema).default(() => [])),
|
||||
...(CopilotKitStateSchema.fields as Record<string, any>),
|
||||
});
|
||||
|
||||
const model = new ChatOpenAI({
|
||||
model: "gpt-5.4",
|
||||
modelKwargs: { parallel_tool_calls: false },
|
||||
});
|
||||
|
||||
export const graph = createAgent({
|
||||
model,
|
||||
tools: [query_data, ...todo_tools, generate_a2ui, search_flights],
|
||||
middleware: [
|
||||
copilotkitMiddleware,
|
||||
stateStreamingMiddleware(
|
||||
stateItem({
|
||||
stateKey: "todos",
|
||||
tool: "manage_todos",
|
||||
toolArgument: "todos",
|
||||
}),
|
||||
),
|
||||
],
|
||||
stateSchema: AgentStateSchema,
|
||||
systemPrompt: `
|
||||
You are a polished, professional demo assistant. Keep responses to 1-2 sentences.
|
||||
|
||||
Tool guidance:
|
||||
- Flights: call search_flights to show flight cards with a pre-built schema.
|
||||
- Dashboards & rich UI: call generate_a2ui to create dashboard UIs with metrics,
|
||||
charts, tables, and cards. It handles rendering automatically.
|
||||
- Charts: call query_data first, then render with the chart component.
|
||||
- Todos: enable app mode first, then manage todos.
|
||||
- A2UI actions: when you see a log_a2ui_event result (e.g. "view_details"),
|
||||
respond with a brief confirmation. The UI already updated on the frontend.
|
||||
`,
|
||||
});
|
||||
@@ -0,0 +1,41 @@
|
||||
date,category,subcategory,amount,type,notes
|
||||
2026-01-05,Revenue,Enterprise Subscriptions,28000,income,3 new enterprise customers (Acme Corp, TechFlow, DataViz Inc)
|
||||
2026-01-05,Revenue,Pro Tier Upgrades,18000,income,24 users upgraded from free to pro
|
||||
2026-01-08,Revenue,API Usage Overages,9500,income,High API usage from top 5 customers
|
||||
2026-01-10,Expenses,Engineering Salaries,42000,expense,7 engineers + 2 contractors
|
||||
2026-01-10,Expenses,Product Team,18000,expense,PM and 2 designers
|
||||
2026-01-12,Expenses,AWS Infrastructure,8200,expense,Increased compute for new AI features
|
||||
2026-01-15,Expenses,Marketing - Paid Ads,12000,expense,Google Ads and LinkedIn campaigns
|
||||
2026-01-18,Revenue,Consulting Services,14500,income,Custom integration for Acme Corp
|
||||
2026-01-20,Expenses,Customer Success,15000,expense,3 CSMs + support tools (Intercom)
|
||||
2026-01-22,Expenses,AI Model Costs,4200,expense,OpenAI API usage for product features
|
||||
2026-01-25,Revenue,Marketplace Sales,12800,income,Template and plugin sales
|
||||
2026-01-28,Expenses,Office & Equipment,3500,expense,New laptops and coworking spaces
|
||||
2026-02-03,Revenue,Enterprise Subscriptions,31000,income,2 new customers + expansion from TechFlow
|
||||
2026-02-03,Revenue,Pro Tier Upgrades,22500,income,31 upgrades + reduced churn
|
||||
2026-02-05,Revenue,API Usage Overages,11800,income,DataViz Inc heavy API usage spike
|
||||
2026-02-07,Expenses,Engineering Salaries,42000,expense,Same headcount as January
|
||||
2026-02-07,Expenses,Product Team,18000,expense,No changes to product team
|
||||
2026-02-10,Expenses,AWS Infrastructure,9500,expense,Traffic spike from viral social post
|
||||
2026-02-12,Expenses,Marketing - Paid Ads,15000,expense,Increased ad spend for Q1 push
|
||||
2026-02-14,Revenue,Consulting Services,18000,income,2 custom projects (TechFlow + new client)
|
||||
2026-02-18,Expenses,Customer Success,16500,expense,Hired 1 additional CSM
|
||||
2026-02-20,Expenses,AI Model Costs,5800,expense,Increased usage from new AI features launch
|
||||
2026-02-22,Revenue,Marketplace Sales,14200,income,Top template hit featured list
|
||||
2026-02-25,Expenses,Conference & Travel,4500,expense,Team attended SaaS Conference 2026
|
||||
2026-02-27,Revenue,Partnership Revenue,11500,income,Referral fees from integration partners
|
||||
2026-03-02,Revenue,Enterprise Subscriptions,35000,income,Major win: Fortune 500 customer signed
|
||||
2026-03-02,Revenue,Pro Tier Upgrades,26000,income,42 upgrades - best month yet
|
||||
2026-03-05,Revenue,API Usage Overages,13200,income,Consistent high usage across top tier
|
||||
2026-03-08,Expenses,Engineering Salaries,48000,expense,Hired 1 senior engineer for AI team
|
||||
2026-03-08,Expenses,Product Team,21000,expense,Promoted designer to senior level
|
||||
2026-03-10,Expenses,AWS Infrastructure,11000,expense,Scaled infrastructure for enterprise client
|
||||
2026-03-12,Expenses,Marketing - Paid Ads,18000,expense,Doubled down on successful campaigns
|
||||
2026-03-14,Revenue,Consulting Services,21500,income,Fortune 500 onboarding + 2 other projects
|
||||
2026-03-16,Expenses,Customer Success,19500,expense,Hired dedicated enterprise CSM
|
||||
2026-03-18,Expenses,AI Model Costs,7200,expense,Fortune 500 client heavy AI usage
|
||||
2026-03-20,Revenue,Marketplace Sales,15800,income,3 new templates in top 10
|
||||
2026-03-22,Expenses,Sales & BD,12000,expense,Hired first sales rep for enterprise
|
||||
2026-03-24,Revenue,Partnership Revenue,14200,income,New integration partnerships launched
|
||||
2026-03-26,Expenses,Security & Compliance,6500,expense,SOC 2 audit and security tools
|
||||
2026-03-28,Revenue,Training & Workshops,10200,income,Conducted 2 customer training sessions
|
||||
|
@@ -0,0 +1,68 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { z } from "zod";
|
||||
import { tool } from "@langchain/core/tools";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
function parseCsv(raw: string): Record<string, string>[] {
|
||||
const lines = raw.trim().split(/\r?\n/);
|
||||
if (lines.length === 0) return [];
|
||||
const headers = lines[0].split(",");
|
||||
const rows: Record<string, string>[] = [];
|
||||
for (let i = 1; i < lines.length; i++) {
|
||||
const cells = splitCsvLine(lines[i]);
|
||||
const row: Record<string, string> = {};
|
||||
headers.forEach((h, idx) => {
|
||||
row[h] = cells[idx] ?? "";
|
||||
});
|
||||
rows.push(row);
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
function splitCsvLine(line: string): string[] {
|
||||
const out: string[] = [];
|
||||
let cur = "";
|
||||
let inQuotes = false;
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
const ch = line[i];
|
||||
if (inQuotes) {
|
||||
if (ch === '"' && line[i + 1] === '"') {
|
||||
cur += '"';
|
||||
i++;
|
||||
} else if (ch === '"') {
|
||||
inQuotes = false;
|
||||
} else {
|
||||
cur += ch;
|
||||
}
|
||||
} else if (ch === '"') {
|
||||
inQuotes = true;
|
||||
} else if (ch === ",") {
|
||||
out.push(cur);
|
||||
cur = "";
|
||||
} else {
|
||||
cur += ch;
|
||||
}
|
||||
}
|
||||
out.push(cur);
|
||||
return out;
|
||||
}
|
||||
|
||||
const _cached_data = parseCsv(
|
||||
readFileSync(path.join(__dirname, "db.csv"), "utf8"),
|
||||
);
|
||||
|
||||
export const query_data = tool(
|
||||
(_input: { query: string }) => {
|
||||
return JSON.stringify(_cached_data);
|
||||
},
|
||||
{
|
||||
name: "query_data",
|
||||
description:
|
||||
"Query the database, takes natural language. Always call before showing a chart or graph.",
|
||||
schema: z.object({ query: z.string() }),
|
||||
},
|
||||
);
|
||||
@@ -0,0 +1,60 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { z } from "zod";
|
||||
import { tool, type ToolRuntime } from "@langchain/core/tools";
|
||||
import { ToolMessage } from "@langchain/core/messages";
|
||||
import { Command } from "@langchain/langgraph";
|
||||
|
||||
export const TodoSchema = z.object({
|
||||
id: z.string().optional(),
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
emoji: z.string(),
|
||||
status: z.enum(["pending", "completed"]),
|
||||
});
|
||||
|
||||
export type Todo = z.infer<typeof TodoSchema>;
|
||||
|
||||
const TodosStateSchema = z.object({
|
||||
todos: z.array(TodoSchema),
|
||||
});
|
||||
|
||||
export const manage_todos = tool(
|
||||
(input: { todos: Todo[] }, runtime: ToolRuntime<typeof TodosStateSchema>) => {
|
||||
const todos = input.todos.map((t) => ({
|
||||
...t,
|
||||
id: t.id ?? randomUUID(),
|
||||
}));
|
||||
return new Command({
|
||||
update: {
|
||||
todos,
|
||||
messages: [
|
||||
new ToolMessage({
|
||||
content: "Successfully updated todos",
|
||||
tool_call_id: runtime.toolCallId,
|
||||
}),
|
||||
],
|
||||
},
|
||||
});
|
||||
},
|
||||
{
|
||||
name: "manage_todos",
|
||||
description: "Manage the current todos.",
|
||||
schema: z.object({ todos: z.array(TodoSchema) }),
|
||||
},
|
||||
);
|
||||
|
||||
export const get_todos = tool(
|
||||
(
|
||||
_input: Record<string, never>,
|
||||
runtime: ToolRuntime<typeof TodosStateSchema>,
|
||||
) => {
|
||||
return JSON.stringify(runtime.state.todos ?? []);
|
||||
},
|
||||
{
|
||||
name: "get_todos",
|
||||
description: "Get the current todos.",
|
||||
schema: z.object({}),
|
||||
},
|
||||
);
|
||||
|
||||
export const todo_tools = [manage_todos, get_todos];
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "Node16" /* Specify what module code is generated. */,
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
"moduleResolution": "node16" /* Specify how TypeScript looks up a file from a given module specifier. */,
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
"resolvePackageJsonExports": true /* Use the package.json 'exports' field when resolving package imports. */,
|
||||
"resolvePackageJsonImports": true /* Use the package.json 'imports' field when resolving imports. */,
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
// "noUncheckedSideEffectImports": true, /* Check side effect imports. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true /* Enable all strict type-checking options. */,
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user