diff options
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/schema.d.ts | 344 | ||||
-rw-r--r-- | src/api/schema.js | 295 | ||||
-rw-r--r-- | src/api/schema.peechy | 46 | ||||
-rw-r--r-- | src/api/schema.ts | 184 | ||||
-rw-r--r-- | src/api/schema.zig | 525 |
5 files changed, 1050 insertions, 344 deletions
diff --git a/src/api/schema.d.ts b/src/api/schema.d.ts index f89eb0e40..ff4b54a30 100644 --- a/src/api/schema.d.ts +++ b/src/api/schema.d.ts @@ -1,4 +1,4 @@ -import type { ByteBuffer } from "peechy"; +import type {ByteBuffer} from "peechy"; type byte = number; type float = number; @@ -12,177 +12,191 @@ type int32 = number; type float32 = number; type uint16 = number; type uint32 = number; -export enum Loader { - jsx = 1, - js = 2, - ts = 3, - tsx = 4, - css = 5, - file = 6, - json = 7, -} -export const LoaderKeys = { - 1: "jsx", - jsx: "jsx", - 2: "js", - js: "js", - 3: "ts", - ts: "ts", - 4: "tsx", - tsx: "tsx", - 5: "css", - css: "css", - 6: "file", - file: "file", - 7: "json", - json: "json", -}; -export enum JSXRuntime { - automatic = 1, - classic = 2, -} -export const JSXRuntimeKeys = { - 1: "automatic", - automatic: "automatic", - 2: "classic", - classic: "classic", -}; -export enum TransformResponseStatus { - success = 1, - fail = 2, -} -export const TransformResponseStatusKeys = { - 1: "success", - success: "success", - 2: "fail", - fail: "fail", -}; -export enum MessageKind { - err = 1, - warn = 2, - note = 3, - debug = 4, -} -export const MessageKindKeys = { - 1: "err", - err: "err", - 2: "warn", - warn: "warn", - 3: "note", - note: "note", - 4: "debug", - debug: "debug", -}; -export interface JSX { - factory: string; - runtime: JSXRuntime; - fragment: string; - production: boolean; - import_source: string; - react_fast_refresh: boolean; - loader_keys: string[]; - loader_values: Loader[]; -} + export enum Loader { + jsx = 1, + js = 2, + ts = 3, + tsx = 4, + css = 5, + file = 6, + json = 7 + } + export const LoaderKeys = { + 1: "jsx", + jsx: "jsx", + 2: "js", + js: "js", + 3: "ts", + ts: "ts", + 4: "tsx", + tsx: "tsx", + 5: "css", + css: "css", + 6: "file", + file: "file", + 7: "json", + json: "json" + } + export enum ResolveMode { + disable = 1, + lazy = 2, + dev = 3, + bundle = 4 + } + export const ResolveModeKeys = { + 1: "disable", + disable: "disable", + 2: "lazy", + lazy: "lazy", + 3: "dev", + dev: "dev", + 4: "bundle", + bundle: "bundle" + } + export enum Platform { + browser = 1, + node = 2 + } + export const PlatformKeys = { + 1: "browser", + browser: "browser", + 2: "node", + node: "node" + } + export enum JSXRuntime { + automatic = 1, + classic = 2 + } + export const JSXRuntimeKeys = { + 1: "automatic", + automatic: "automatic", + 2: "classic", + classic: "classic" + } + export enum TransformResponseStatus { + success = 1, + fail = 2 + } + export const TransformResponseStatusKeys = { + 1: "success", + success: "success", + 2: "fail", + fail: "fail" + } + export enum MessageKind { + err = 1, + warn = 2, + note = 3, + debug = 4 + } + export const MessageKindKeys = { + 1: "err", + err: "err", + 2: "warn", + warn: "warn", + 3: "note", + note: "note", + 4: "debug", + debug: "debug" + } + export interface JSX { + factory: string; + runtime: JSXRuntime; + fragment: string; + development: boolean; + import_source: string; + react_fast_refresh: boolean; + } -export interface TransformOptions { - jsx: JSX; - ts: boolean; - base_path: string; - define_keys: string[]; - define_values: string[]; -} + export interface TransformOptions { + jsx?: JSX; + tsconfig_override?: string; + resolve?: ResolveMode; + public_url?: string; + absolute_working_dir?: string; + define_keys?: string[]; + define_values?: string[]; + preserve_symlinks?: boolean; + entry_points?: string[]; + write?: boolean; + inject?: string[]; + output_dir?: string; + external?: string[]; + loader_keys?: string[]; + loader_values?: Loader[]; + main_fields?: string[]; + platform?: Platform; + } -export interface FileHandle { - path: string; - size: uint; - fd: uint; -} + export interface FileHandle { + path: string; + size: uint; + fd: uint; + } -export interface Transform { - handle?: FileHandle; - path?: string; - contents?: string; - loader?: Loader; - options?: TransformOptions; -} + export interface Transform { + handle?: FileHandle; + path?: string; + contents?: Uint8Array; + loader?: Loader; + options?: TransformOptions; + } -export interface OutputFile { - data: Uint8Array; - path: string; -} + export interface OutputFile { + data: Uint8Array; + path: string; + } -export interface TransformResponse { - status: TransformResponseStatus; - files: OutputFile[]; - errors: Message[]; -} + export interface TransformResponse { + status: TransformResponseStatus; + files: OutputFile[]; + errors: Message[]; + } -export interface Location { - file: string; - namespace: string; - line: int32; - column: int32; - line_text: string; - suggestion: string; - offset: uint; -} + export interface Location { + file: string; + namespace: string; + line: int32; + column: int32; + line_text: string; + suggestion: string; + offset: uint; + } -export interface MessageData { - text?: string; - location?: Location; -} + export interface MessageData { + text?: string; + location?: Location; + } -export interface Message { - kind: MessageKind; - data: MessageData; - notes: MessageData[]; -} + export interface Message { + kind: MessageKind; + data: MessageData; + notes: MessageData[]; + } -export interface Log { - warnings: uint32; - errors: uint32; - msgs: Message[]; -} + export interface Log { + warnings: uint32; + errors: uint32; + msgs: Message[]; + } -export declare function encodeJSX(message: JSX, bb: ByteBuffer): void; -export declare function decodeJSX(buffer: ByteBuffer): JSX; -export declare function encodeTransformOptions( - message: TransformOptions, - bb: ByteBuffer -): void; -export declare function decodeTransformOptions( - buffer: ByteBuffer -): TransformOptions; -export declare function encodeFileHandle( - message: FileHandle, - bb: ByteBuffer -): void; -export declare function decodeFileHandle(buffer: ByteBuffer): FileHandle; -export declare function encodeTransform( - message: Transform, - bb: ByteBuffer -): void; -export declare function decodeTransform(buffer: ByteBuffer): Transform; -export declare function encodeOutputFile( - message: OutputFile, - bb: ByteBuffer -): void; -export declare function decodeOutputFile(buffer: ByteBuffer): OutputFile; -export declare function encodeTransformResponse( - message: TransformResponse, - bb: ByteBuffer -): void; -export declare function decodeTransformResponse( - buffer: ByteBuffer -): TransformResponse; -export declare function encodeLocation(message: Location, bb: ByteBuffer): void; -export declare function decodeLocation(buffer: ByteBuffer): Location; -export declare function encodeMessageData( - message: MessageData, - bb: ByteBuffer -): void; -export declare function decodeMessageData(buffer: ByteBuffer): MessageData; -export declare function encodeMessage(message: Message, bb: ByteBuffer): void; -export declare function decodeMessage(buffer: ByteBuffer): Message; -export declare function encodeLog(message: Log, bb: ByteBuffer): void; -export declare function decodeLog(buffer: ByteBuffer): Log; + export declare function encodeJSX(message: JSX, bb: ByteBuffer): void; + export declare function decodeJSX(buffer: ByteBuffer): JSX; + export declare function encodeTransformOptions(message: TransformOptions, bb: ByteBuffer): void; + export declare function decodeTransformOptions(buffer: ByteBuffer): TransformOptions; + export declare function encodeFileHandle(message: FileHandle, bb: ByteBuffer): void; + export declare function decodeFileHandle(buffer: ByteBuffer): FileHandle; + export declare function encodeTransform(message: Transform, bb: ByteBuffer): void; + export declare function decodeTransform(buffer: ByteBuffer): Transform; + export declare function encodeOutputFile(message: OutputFile, bb: ByteBuffer): void; + export declare function decodeOutputFile(buffer: ByteBuffer): OutputFile; + export declare function encodeTransformResponse(message: TransformResponse, bb: ByteBuffer): void; + export declare function decodeTransformResponse(buffer: ByteBuffer): TransformResponse; + export declare function encodeLocation(message: Location, bb: ByteBuffer): void; + export declare function decodeLocation(buffer: ByteBuffer): Location; + export declare function encodeMessageData(message: MessageData, bb: ByteBuffer): void; + export declare function decodeMessageData(buffer: ByteBuffer): MessageData; + export declare function encodeMessage(message: Message, bb: ByteBuffer): void; + export declare function decodeMessage(buffer: ByteBuffer): Message; + export declare function encodeLog(message: Log, bb: ByteBuffer): void; + export declare function decodeLog(buffer: ByteBuffer): Log; diff --git a/src/api/schema.js b/src/api/schema.js index 484ced1df..0986f0d0b 100644 --- a/src/api/schema.js +++ b/src/api/schema.js @@ -30,6 +30,38 @@ const LoaderKeys = { "file": "file", "json": "json" }; +const ResolveMode = { + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "disable": 1, + "lazy": 2, + "dev": 3, + "bundle": 4 +}; +const ResolveModeKeys = { + "1": "disable", + "2": "lazy", + "3": "dev", + "4": "bundle", + "disable": "disable", + "lazy": "lazy", + "dev": "dev", + "bundle": "bundle" +}; +const Platform = { + "1": 1, + "2": 2, + "browser": 1, + "node": 2 +}; +const PlatformKeys = { + "1": "browser", + "2": "node", + "browser": "browser", + "node": "node" +}; const JSXRuntime = { "1": 1, "2": 2, @@ -49,15 +81,9 @@ function decodeJSX(bb) { result["factory"] = bb.readString(); result["runtime"] = JSXRuntime[bb.readByte()]; result["fragment"] = bb.readString(); - result["production"] = !!bb.readByte(); + result["development"] = !!bb.readByte(); result["import_source"] = bb.readString(); result["react_fast_refresh"] = !!bb.readByte(); - var length = bb.readVarUint(); - var values = result["loader_keys"] = Array(length); - for (var i = 0; i < length; i++) values[i] = bb.readString(); - var length = bb.readVarUint(); - var values = result["loader_values"] = Array(length); - for (var i = 0; i < length; i++) values[i] = Loader[bb.readByte()]; return result; } @@ -86,11 +112,11 @@ bb.writeByte(encoded); throw new Error("Missing required field \"fragment\""); } - var value = message["production"]; + var value = message["development"]; if (value != null) { bb.writeByte(value); } else { - throw new Error("Missing required field \"production\""); + throw new Error("Missing required field \"development\""); } var value = message["import_source"]; @@ -107,96 +133,257 @@ bb.writeByte(encoded); throw new Error("Missing required field \"react_fast_refresh\""); } - var value = message["loader_keys"]; +} + +function decodeTransformOptions(bb) { + var result = {}; + + while (true) { + switch (bb.readByte()) { + case 0: + return result; + + case 1: + result["jsx"] = decodeJSX(bb); + break; + + case 2: + result["tsconfig_override"] = bb.readString(); + break; + + case 3: + result["resolve"] = ResolveMode[bb.readByte()]; + break; + + case 4: + result["public_url"] = bb.readString(); + break; + + case 5: + result["absolute_working_dir"] = bb.readString(); + break; + + case 6: + var length = bb.readVarUint(); + var values = result["define_keys"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 7: + var length = bb.readVarUint(); + var values = result["define_values"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 8: + result["preserve_symlinks"] = !!bb.readByte(); + break; + + case 9: + var length = bb.readVarUint(); + var values = result["entry_points"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 10: + result["write"] = !!bb.readByte(); + break; + + case 11: + var length = bb.readVarUint(); + var values = result["inject"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 12: + result["output_dir"] = bb.readString(); + break; + + case 13: + var length = bb.readVarUint(); + var values = result["external"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 14: + var length = bb.readVarUint(); + var values = result["loader_keys"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 15: + var length = bb.readVarUint(); + var values = result["loader_values"] = Array(length); + for (var i = 0; i < length; i++) values[i] = Loader[bb.readByte()]; + break; + + case 16: + var length = bb.readVarUint(); + var values = result["main_fields"] = Array(length); + for (var i = 0; i < length; i++) values[i] = bb.readString(); + break; + + case 17: + result["platform"] = Platform[bb.readByte()]; + break; + + default: + throw new Error("Attempted to parse invalid message"); + } + } +} + +function encodeTransformOptions(message, bb) { + + var value = message["jsx"]; + if (value != null) { + bb.writeByte(1); + encodeJSX(value, bb); + } + + var value = message["tsconfig_override"]; + if (value != null) { + bb.writeByte(2); + bb.writeString(value); + } + + var value = message["resolve"]; + if (value != null) { + bb.writeByte(3); + var encoded = ResolveMode[value]; +if (encoded === void 0) throw new Error("Invalid value " + JSON.stringify(value) + " for enum \"ResolveMode\""); +bb.writeByte(encoded); + } + + var value = message["public_url"]; + if (value != null) { + bb.writeByte(4); + bb.writeString(value); + } + + var value = message["absolute_working_dir"]; + if (value != null) { + bb.writeByte(5); + bb.writeString(value); + } + + var value = message["define_keys"]; if (value != null) { + bb.writeByte(6); var values = value, n = values.length; bb.writeVarUint(n); for (var i = 0; i < n; i++) { value = values[i]; bb.writeString(value); } - } else { - throw new Error("Missing required field \"loader_keys\""); } - var value = message["loader_values"]; + var value = message["define_values"]; if (value != null) { + bb.writeByte(7); var values = value, n = values.length; bb.writeVarUint(n); for (var i = 0; i < n; i++) { value = values[i]; - var encoded = Loader[value]; -if (encoded === void 0) throw new Error("Invalid value " + JSON.stringify(value) + " for enum \"Loader\""); -bb.writeByte(encoded); + bb.writeString(value); } - } else { - throw new Error("Missing required field \"loader_values\""); } -} - -function decodeTransformOptions(bb) { - var result = {}; - - result["jsx"] = decodeJSX(bb); - result["ts"] = !!bb.readByte(); - result["base_path"] = bb.readString(); - var length = bb.readVarUint(); - var values = result["define_keys"] = Array(length); - for (var i = 0; i < length; i++) values[i] = bb.readString(); - var length = bb.readVarUint(); - var values = result["define_values"] = Array(length); - for (var i = 0; i < length; i++) values[i] = bb.readString(); - return result; -} - -function encodeTransformOptions(message, bb) { + var value = message["preserve_symlinks"]; + if (value != null) { + bb.writeByte(8); + bb.writeByte(value); + } - var value = message["jsx"]; + var value = message["entry_points"]; if (value != null) { - encodeJSX(value, bb); - } else { - throw new Error("Missing required field \"jsx\""); + bb.writeByte(9); + var values = value, n = values.length; + bb.writeVarUint(n); + for (var i = 0; i < n; i++) { + value = values[i]; + bb.writeString(value); + } } - var value = message["ts"]; + var value = message["write"]; if (value != null) { + bb.writeByte(10); bb.writeByte(value); - } else { - throw new Error("Missing required field \"ts\""); } - var value = message["base_path"]; + var value = message["inject"]; if (value != null) { + bb.writeByte(11); + var values = value, n = values.length; + bb.writeVarUint(n); + for (var i = 0; i < n; i++) { + value = values[i]; + bb.writeString(value); + } + } + + var value = message["output_dir"]; + if (value != null) { + bb.writeByte(12); bb.writeString(value); - } else { - throw new Error("Missing required field \"base_path\""); } - var value = message["define_keys"]; + var value = message["external"]; if (value != null) { + bb.writeByte(13); var values = value, n = values.length; bb.writeVarUint(n); for (var i = 0; i < n; i++) { value = values[i]; bb.writeString(value); } - } else { - throw new Error("Missing required field \"define_keys\""); } - var value = message["define_values"]; + var value = message["loader_keys"]; if (value != null) { + bb.writeByte(14); var values = value, n = values.length; bb.writeVarUint(n); for (var i = 0; i < n; i++) { value = values[i]; bb.writeString(value); } - } else { - throw new Error("Missing required field \"define_values\""); } + var value = message["loader_values"]; + if (value != null) { + bb.writeByte(15); + var values = value, n = values.length; + bb.writeVarUint(n); + for (var i = 0; i < n; i++) { + value = values[i]; + var encoded = Loader[value]; +if (encoded === void 0) throw new Error("Invalid value " + JSON.stringify(value) + " for enum \"Loader\""); +bb.writeByte(encoded); + } + } + + var value = message["main_fields"]; + if (value != null) { + bb.writeByte(16); + var values = value, n = values.length; + bb.writeVarUint(n); + for (var i = 0; i < n; i++) { + value = values[i]; + bb.writeString(value); + } + } + + var value = message["platform"]; + if (value != null) { + bb.writeByte(17); + var encoded = Platform[value]; +if (encoded === void 0) throw new Error("Invalid value " + JSON.stringify(value) + " for enum \"Platform\""); +bb.writeByte(encoded); + } + bb.writeByte(0); + } function decodeFileHandle(bb) { @@ -603,6 +790,10 @@ function encodeLog(message, bb) { export { Loader } export { LoaderKeys } +export { ResolveMode } +export { ResolveModeKeys } +export { Platform } +export { PlatformKeys } export { JSXRuntime } export { JSXRuntimeKeys } export { decodeJSX } diff --git a/src/api/schema.peechy b/src/api/schema.peechy index 1a5a8cc00..442dd3f84 100644 --- a/src/api/schema.peechy +++ b/src/api/schema.peechy @@ -10,6 +10,17 @@ smol Loader { json = 7; } +smol ResolveMode { + disable = 1; + lazy = 2; + dev = 3; + bundle = 4; +} + +smol Platform { + browser = 1; + node = 2; +} smol JSXRuntime { automatic = 1; @@ -20,25 +31,42 @@ struct JSX { string factory; JSXRuntime runtime; string fragment; - bool production; + bool development; // Probably react string import_source; bool react_fast_refresh; - string[] loader_keys; - Loader[] loader_values; } -struct TransformOptions { - JSX jsx; - bool ts; +message TransformOptions { + JSX jsx = 1; + string tsconfig_override = 2; + ResolveMode resolve = 3; + + string public_url = 4; + string absolute_working_dir = 5; + + string[] define_keys = 6; + string[] define_values = 7; + + bool preserve_symlinks = 8; + + string[] entry_points = 9; + bool write = 10; + + string[] inject = 11; + string output_dir = 12; + + string[] external = 13; + + string[] loader_keys = 14; + Loader[] loader_values = 15; - string base_path; - string[] define_keys; - string[] define_values; + string[] main_fields = 16; + Platform platform = 17; } struct FileHandle { diff --git a/src/api/schema.ts b/src/api/schema.ts new file mode 100644 index 000000000..9d1c44c51 --- /dev/null +++ b/src/api/schema.ts @@ -0,0 +1,184 @@ +import type {ByteBuffer} from "peechy"; + +type byte = number; +type float = number; +type int = number; +type alphanumeric = string; +type uint = number; +type int8 = number; +type lowp = number; +type int16 = number; +type int32 = number; +type float32 = number; +type uint16 = number; +type uint32 = number; + export enum Loader { + jsx = 1, + js = 2, + ts = 3, + tsx = 4, + css = 5, + file = 6, + json = 7 + } + export const LoaderKeys = { + 1: "jsx", + jsx: "jsx", + 2: "js", + js: "js", + 3: "ts", + ts: "ts", + 4: "tsx", + tsx: "tsx", + 5: "css", + css: "css", + 6: "file", + file: "file", + 7: "json", + json: "json" + } + export enum ResolveMode { + disable = 1, + lazy = 2 + } + export const ResolveModeKeys = { + 1: "disable", + disable: "disable", + 2: "lazy", + lazy: "lazy" + } + export enum JSXRuntime { + automatic = 1, + classic = 2 + } + export const JSXRuntimeKeys = { + 1: "automatic", + automatic: "automatic", + 2: "classic", + classic: "classic" + } + export enum TransformResponseStatus { + success = 1, + fail = 2 + } + export const TransformResponseStatusKeys = { + 1: "success", + success: "success", + 2: "fail", + fail: "fail" + } + export enum MessageKind { + err = 1, + warn = 2, + note = 3, + debug = 4 + } + export const MessageKindKeys = { + 1: "err", + err: "err", + 2: "warn", + warn: "warn", + 3: "note", + note: "note", + 4: "debug", + debug: "debug" + } + export interface JSX { + factory: string; + runtime: JSXRuntime; + fragment: string; + development: boolean; + import_source: string; + react_fast_refresh: boolean; + loader_keys: string[]; + loader_values: Loader[]; + } + + export interface TransformOptions { + jsx?: JSX; + tsconfig_override?: string; + resolve?: ResolveMode; + public_url?: string; + absolute_working_dir?: string; + define_keys?: string[]; + define_values?: string[]; + preserve_symlinks?: boolean; + entry_points?: string[]; + write?: boolean; + inject?: string[]; + output_dir?: string; + externals?: string[]; + } + + export interface FileHandle { + path: string; + size: uint; + fd: uint; + } + + export interface Transform { + handle?: FileHandle; + path?: string; + contents?: Uint8Array; + loader?: Loader; + options?: TransformOptions; + } + + export interface OutputFile { + data: Uint8Array; + path: string; + } + + export interface TransformResponse { + status: TransformResponseStatus; + files: OutputFile[]; + errors: Message[]; + } + + export interface Location { + file: string; + namespace: string; + line: int32; + column: int32; + line_text: string; + suggestion: string; + offset: uint; + } + + export interface MessageData { + text?: string; + location?: Location; + } + + export interface Message { + kind: MessageKind; + data: MessageData; + notes: MessageData[]; + } + + export interface Log { + warnings: uint32; + errors: uint32; + msgs: Message[]; + } + + export declare function encodeJSX(message: JSX, bb: ByteBuffer): void; + export declare function decodeJSX(buffer: ByteBuffer): JSX; + export declare function encodeTransformOptions(message: TransformOptions, bb: ByteBuffer): void; + export declare function decodeTransformOptions(buffer: ByteBuffer): TransformOptions; + export declare function encodeFileHandle(message: FileHandle, bb: ByteBuffer): void; + export declare function decodeFileHandle(buffer: ByteBuffer): FileHandle; + export declare function encodeTransform(message: Transform, bb: ByteBuffer): void; + export declare function decodeTransform(buffer: ByteBuffer): Transform; + export declare function encodeOutputFile(message: OutputFile, bb: ByteBuffer): void; + export declare function decodeOutputFile(buffer: ByteBuffer): OutputFile; + export declare function encodeTransformResponse(message: TransformResponse, bb: ByteBuffer): void; + export declare function decodeTransformResponse(buffer: ByteBuffer): TransformResponse; + export declare function encodeLocation(message: Location, bb: ByteBuffer): void; + export declare function decodeLocation(buffer: ByteBuffer): Location; + export declare function encodeMessageData(message: MessageData, bb: ByteBuffer): void; + export declare function decodeMessageData(buffer: ByteBuffer): MessageData; + export declare function encodeMessage(message: Message, bb: ByteBuffer): void; + export declare function decodeMessage(buffer: ByteBuffer): Message; + export declare function encodeLog(message: Log, bb: ByteBuffer): void; + export declare function decodeLog(buffer: ByteBuffer): Log; diff --git a/src/api/schema.zig b/src/api/schema.zig index 5931158df..b6f1a47f0 100644 --- a/src/api/schema.zig +++ b/src/api/schema.zig @@ -31,6 +31,42 @@ pub const Api = struct { } }; + pub const ResolveMode = enum(u8) { + _none, + /// disable + disable, + + /// lazy + lazy, + + /// dev + dev, + + /// bundle + bundle, + + _, + + pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void { + return try std.json.stringify(@tagName(self), opts, o); + } + }; + + pub const Platform = enum(u8) { + _none, + /// browser + browser, + + /// node + node, + + _, + + pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void { + return try std.json.stringify(@tagName(self), opts, o); + } + }; + pub const JsxRuntime = enum(u8) { _none, /// automatic @@ -48,29 +84,23 @@ pub const Api = struct { pub const Jsx = struct { /// factory - factory: []u8, + factory: []const u8, /// runtime runtime: JsxRuntime, /// fragment - fragment: []u8, + fragment: []const u8, - /// production - production: bool = false, + /// development + development: bool = false, /// import_source - import_source: []u8, + import_source: []const u8, /// react_fast_refresh react_fast_refresh: bool = false, - /// loader_keys - loader_keys: [][]u8, - - /// loader_values - loader_values: []Loader, - pub fn decode(allocator: *std.mem.Allocator, reader: anytype) anyerror!Jsx { var obj = std.mem.zeroes(Jsx); try update(&obj, allocator, reader); @@ -89,39 +119,17 @@ pub const Api = struct { result.fragment = try allocator.alloc(u8, length); } _ = try reader.readAll(result.fragment); - result.production = (try reader.readByte()) == @as(u8, 1); + result.development = (try reader.readByte()) == @as(u8, 1); length = try reader.readIntNative(u32); if (result.import_source.len != length) { result.import_source = try allocator.alloc(u8, length); } _ = try reader.readAll(result.import_source); result.react_fast_refresh = (try reader.readByte()) == @as(u8, 1); - { - var array_count = try reader.readIntNative(u32); - if (array_count != result.loader_keys.len) { - result.loader_keys = try allocator.alloc([]u8, array_count); - } - length = try reader.readIntNative(u32); - for (result.loader_keys) |content, j| { - if (result.loader_keys[j].len != length and length > 0) { - result.loader_keys[j] = try allocator.alloc(u8, length); - } - _ = try reader.readAll(result.loader_keys[j]); - } - } - length = try reader.readIntNative(u32); - result.loader_values = try allocator.alloc(Loader, length); - { - var j: usize = 0; - while (j < length) : (j += 1) { - result.loader_values[j] = try reader.readEnum(Loader, .Little); - } - } return; } pub fn encode(result: *const @This(), writer: anytype) anyerror!void { - var n: usize = 0; try writer.writeIntNative(u32, @intCast(u32, result.factory.len)); try writer.writeAll(std.mem.sliceAsBytes(result.factory)); @@ -130,50 +138,67 @@ pub const Api = struct { try writer.writeIntNative(u32, @intCast(u32, result.fragment.len)); try writer.writeAll(std.mem.sliceAsBytes(result.fragment)); - try writer.writeByte(@boolToInt(result.production)); + try writer.writeByte(@boolToInt(result.development)); try writer.writeIntNative(u32, @intCast(u32, result.import_source.len)); try writer.writeAll(std.mem.sliceAsBytes(result.import_source)); try writer.writeByte(@boolToInt(result.react_fast_refresh)); - - n = result.loader_keys.len; - _ = try writer.writeIntNative(u32, @intCast(u32, n)); - { - var j: usize = 0; - while (j < n) : (j += 1) { - _ = try writer.writeIntNative(u32, @intCast(u32, result.loader_keys[j].len)); - try writer.writeAll(std.mem.sliceAsBytes(result.loader_keys[j])); - } - } - - n = result.loader_values.len; - _ = try writer.writeIntNative(u32, @intCast(u32, n)); - { - var j: usize = 0; - while (j < n) : (j += 1) { - try writer.writeByte(@enumToInt(result.loader_values[j])); - } - } return; } }; pub const TransformOptions = struct { /// jsx - jsx: Jsx, + jsx: ?Jsx = null, - /// ts - ts: bool = false, + /// tsconfig_override + tsconfig_override: ?[]const u8 = null, + + /// resolve + resolve: ?ResolveMode = null, + + /// public_url + public_url: ?[]const u8 = null, - /// base_path - base_path: []u8, + /// absolute_working_dir + absolute_working_dir: ?[]const u8 = null, /// define_keys - define_keys: [][]u8, + define_keys: []const []const u8, /// define_values - define_values: [][]u8, + define_values: []const []const u8, + + /// preserve_symlinks + preserve_symlinks: ?bool = null, + + /// entry_points + entry_points: []const []const u8, + + /// write + write: ?bool = null, + + /// inject + inject: []const []const u8, + + /// output_dir + output_dir: ?[]const u8 = null, + + /// external + external: []const []const u8, + + /// loader_keys + loader_keys: []const []const u8, + + /// loader_values + loader_values: []const Loader, + + /// main_fields + main_fields: []const []const u8, + + /// platform + platform: ?Platform = null, pub fn decode(allocator: *std.mem.Allocator, reader: anytype) anyerror!TransformOptions { var obj = std.mem.zeroes(TransformOptions); @@ -182,77 +207,341 @@ pub const Api = struct { } pub fn update(result: *TransformOptions, allocator: *std.mem.Allocator, reader: anytype) anyerror!void { var length: usize = 0; - result.jsx = try Jsx.decode(allocator, reader); - result.ts = (try reader.readByte()) == @as(u8, 1); - length = try reader.readIntNative(u32); - if (result.base_path.len != length) { - result.base_path = try allocator.alloc(u8, length); + while (true) { + const field_type: u8 = try reader.readByte(); + switch (field_type) { + 0 => { + return; + }, + + 1 => { + result.jsx = try Jsx.decode(allocator, reader); + }, + 2 => { + length = try reader.readIntNative(u32); + if ((result.tsconfig_override orelse &([_]u8{})).len != length) { + result.tsconfig_override = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.tsconfig_override.?); + }, + 3 => { + result.resolve = try reader.readEnum(ResolveMode, .Little); + }, + 4 => { + length = try reader.readIntNative(u32); + if ((result.public_url orelse &([_]u8{})).len != length) { + result.public_url = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.public_url.?); + }, + 5 => { + length = try reader.readIntNative(u32); + if ((result.absolute_working_dir orelse &([_]u8{})).len != length) { + result.absolute_working_dir = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.absolute_working_dir.?); + }, + 6 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.define_keys.len) { + result.define_keys = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.define_keys) |content, j| { + if (result.define_keys[j].len != length and length > 0) { + result.define_keys[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.define_keys[j].?); + } + } + }, + 7 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.define_values.len) { + result.define_values = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.define_values) |content, j| { + if (result.define_values[j].len != length and length > 0) { + result.define_values[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.define_values[j].?); + } + } + }, + 8 => { + result.preserve_symlinks = (try reader.readByte()) == @as(u8, 1); + }, + 9 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.entry_points.len) { + result.entry_points = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.entry_points) |content, j| { + if (result.entry_points[j].len != length and length > 0) { + result.entry_points[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.entry_points[j].?); + } + } + }, + 10 => { + result.write = (try reader.readByte()) == @as(u8, 1); + }, + 11 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.inject.len) { + result.inject = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.inject) |content, j| { + if (result.inject[j].len != length and length > 0) { + result.inject[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.inject[j].?); + } + } + }, + 12 => { + length = try reader.readIntNative(u32); + if ((result.output_dir orelse &([_]u8{})).len != length) { + result.output_dir = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.output_dir.?); + }, + 13 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.external.len) { + result.external = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.external) |content, j| { + if (result.external[j].len != length and length > 0) { + result.external[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.external[j].?); + } + } + }, + 14 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.loader_keys.len) { + result.loader_keys = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.loader_keys) |content, j| { + if (result.loader_keys[j].len != length and length > 0) { + result.loader_keys[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.loader_keys[j].?); + } + } + }, + 15 => { + length = try reader.readIntNative(u32); + if (result.loader_values != length) { + result.loader_values = try allocator.alloc(Loader, length); + } + { + var j: usize = 0; + while (j < length) : (j += 1) { + result.loader_values[j] = try reader.readEnum(Loader, .Little); + } + } + }, + 16 => { + { + var array_count = try reader.readIntNative(u32); + if (array_count != result.main_fields.len) { + result.main_fields = try allocator.alloc([]const u8, array_count); + } + length = try reader.readIntNative(u32); + for (result.main_fields) |content, j| { + if (result.main_fields[j].len != length and length > 0) { + result.main_fields[j] = try allocator.alloc(u8, length); + } + _ = try reader.readAll(result.main_fields[j].?); + } + } + }, + 17 => { + result.platform = try reader.readEnum(Platform, .Little); + }, + else => { + return error.InvalidMessage; + }, + } } - _ = try reader.readAll(result.base_path); - { - var array_count = try reader.readIntNative(u32); - if (array_count != result.define_keys.len) { - result.define_keys = try allocator.alloc([]u8, array_count); + } + + pub fn encode(result: *const @This(), writer: anytype) anyerror!void { + var n: usize = 0; + if (result.jsx) |jsx| { + try writer.writeByte(1); + try jsx.encode(writer); + } + + if (result.tsconfig_override) |tsconfig_override| { + try writer.writeByte(2); + try writer.writeIntNative(u32, @intCast(u32, tsconfig_override.len)); + try writer.writeAll(std.mem.sliceAsBytes(tsconfig_override)); + } + + if (result.resolve) |resolve| { + try writer.writeByte(3); + try writer.writeIntNative(@TypeOf(@enumToInt(result.resolve orelse unreachable)), @enumToInt(result.resolve orelse unreachable)); + } + + if (result.public_url) |public_url| { + try writer.writeByte(4); + try writer.writeIntNative(u32, @intCast(u32, public_url.len)); + try writer.writeAll(std.mem.sliceAsBytes(public_url)); + } + + if (result.absolute_working_dir) |absolute_working_dir| { + try writer.writeByte(5); + try writer.writeIntNative(u32, @intCast(u32, absolute_working_dir.len)); + try writer.writeAll(std.mem.sliceAsBytes(absolute_working_dir)); + } + + if (result.define_keys) |define_keys| { + try writer.writeByte(6); + n = result.define_keys.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.define_keys[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(define_keys[j])); + } } - length = try reader.readIntNative(u32); - for (result.define_keys) |content, j| { - if (result.define_keys[j].len != length and length > 0) { - result.define_keys[j] = try allocator.alloc(u8, length); + } + + if (result.define_values) |define_values| { + try writer.writeByte(7); + n = result.define_values.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.define_values[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(define_values[j])); } - _ = try reader.readAll(result.define_keys[j]); } } - { - var array_count = try reader.readIntNative(u32); - if (array_count != result.define_values.len) { - result.define_values = try allocator.alloc([]u8, array_count); + + if (result.preserve_symlinks) |preserve_symlinks| { + try writer.writeByte(8); + try writer.writeByte(@boolToInt(preserve_symlinks)); + } + + if (result.entry_points) |entry_points| { + try writer.writeByte(9); + n = result.entry_points.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.entry_points[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(entry_points[j])); + } } - length = try reader.readIntNative(u32); - for (result.define_values) |content, j| { - if (result.define_values[j].len != length and length > 0) { - result.define_values[j] = try allocator.alloc(u8, length); + } + + if (result.write) |write| { + try writer.writeByte(10); + try writer.writeByte(@boolToInt(write)); + } + + if (result.inject) |inject| { + try writer.writeByte(11); + n = result.inject.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.inject[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(inject[j])); } - _ = try reader.readAll(result.define_values[j]); } } - return; - } - pub fn encode(result: *const @This(), writer: anytype) anyerror!void { - var n: usize = 0; - try result.jsx.encode(writer); + if (result.output_dir) |output_dir| { + try writer.writeByte(12); + try writer.writeIntNative(u32, @intCast(u32, output_dir.len)); + try writer.writeAll(std.mem.sliceAsBytes(output_dir)); + } - try writer.writeByte(@boolToInt(result.ts)); + if (result.external) |external| { + try writer.writeByte(13); + n = result.external.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.external[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(external[j])); + } + } + } - try writer.writeIntNative(u32, @intCast(u32, result.base_path.len)); - try writer.writeAll(std.mem.sliceAsBytes(result.base_path)); + if (result.loader_keys) |loader_keys| { + try writer.writeByte(14); + n = result.loader_keys.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.loader_keys[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(loader_keys[j])); + } + } + } - n = result.define_keys.len; - _ = try writer.writeIntNative(u32, @intCast(u32, n)); - { - var j: usize = 0; - while (j < n) : (j += 1) { - _ = try writer.writeIntNative(u32, @intCast(u32, result.define_keys[j].len)); - try writer.writeAll(std.mem.sliceAsBytes(result.define_keys[j])); + if (result.loader_values) |loader_values| { + try writer.writeByte(15); + n = result.loader_values.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + try writer.writeByte(@enumToInt(result.loader_values[j] orelse unreachable)); + } } } - n = result.define_values.len; - _ = try writer.writeIntNative(u32, @intCast(u32, n)); - { - var j: usize = 0; - while (j < n) : (j += 1) { - _ = try writer.writeIntNative(u32, @intCast(u32, result.define_values[j].len)); - try writer.writeAll(std.mem.sliceAsBytes(result.define_values[j])); + if (result.main_fields) |main_fields| { + try writer.writeByte(16); + n = result.main_fields.len; + _ = try writer.writeIntNative(u32, @intCast(u32, n)); + { + var j: usize = 0; + while (j < n) : (j += 1) { + _ = try writer.writeIntNative(u32, @intCast(u32, result.main_fields[j].len)); + try writer.writeAll(std.mem.sliceAsBytes(main_fields[j])); + } } } + + if (result.platform) |platform| { + try writer.writeByte(17); + try writer.writeIntNative(@TypeOf(@enumToInt(result.platform orelse unreachable)), @enumToInt(result.platform orelse unreachable)); + } + try writer.writeByte(0); return; } }; pub const FileHandle = struct { /// path - path: []u8, + path: []const u8, /// size size: u32 = 0, @@ -293,10 +582,10 @@ pub const Api = struct { handle: ?FileHandle = null, /// path - path: ?[]u8 = null, + path: ?[]const u8 = null, /// contents - contents: []u8, + contents: []const u8, /// loader loader: ?Loader = null, @@ -330,7 +619,7 @@ pub const Api = struct { }, 3 => { length = @intCast(usize, try reader.readIntNative(u32)); - if (result.contents.len != length) { + if (result.contents != length) { result.contents = try allocator.alloc(u8, length); } _ = try reader.readAll(result.contents); @@ -397,10 +686,10 @@ pub const Api = struct { pub const OutputFile = struct { /// data - data: []u8, + data: []const u8, /// path - path: []u8, + path: []const u8, pub fn decode(allocator: *std.mem.Allocator, reader: anytype) anyerror!OutputFile { var obj = std.mem.zeroes(OutputFile); @@ -517,10 +806,10 @@ pub const Api = struct { pub const Location = struct { /// file - file: []u8, + file: []const u8, /// namespace - namespace: []u8, + namespace: []const u8, /// line line: i32 = 0, @@ -529,10 +818,10 @@ pub const Api = struct { column: i32 = 0, /// line_text - line_text: []u8, + line_text: []const u8, /// suggestion - suggestion: []u8, + suggestion: []const u8, /// offset offset: u32 = 0, @@ -594,7 +883,7 @@ pub const Api = struct { pub const MessageData = struct { /// text - text: ?[]u8 = null, + text: ?[]const u8 = null, /// location location: ?Location = null, |