@litert-lm/core 0.16.0 → 0.17.1

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.
Files changed (118) hide show
  1. package/README.md +164 -0
  2. package/dist/cleanup.d.ts +25 -0
  3. package/dist/cleanup.d.ts.map +1 -0
  4. package/dist/cleanup.js +36 -0
  5. package/dist/cleanup.js.map +1 -0
  6. package/dist/conversation.d.ts +51 -0
  7. package/dist/conversation.d.ts.map +1 -0
  8. package/dist/conversation.js +171 -0
  9. package/dist/conversation.js.map +1 -0
  10. package/dist/conversation_config.d.ts +157 -0
  11. package/dist/conversation_config.d.ts.map +1 -0
  12. package/dist/conversation_config.js +42 -0
  13. package/dist/conversation_config.js.map +1 -0
  14. package/dist/embedding_engine.d.ts +51 -0
  15. package/dist/embedding_engine.d.ts.map +1 -0
  16. package/dist/embedding_engine.js +198 -0
  17. package/dist/embedding_engine.js.map +1 -0
  18. package/dist/embedding_engine_settings.d.ts +39 -0
  19. package/dist/embedding_engine_settings.d.ts.map +1 -0
  20. package/dist/embedding_engine_settings.js +35 -0
  21. package/dist/embedding_engine_settings.js.map +1 -0
  22. package/dist/engine.d.ts +37 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +203 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/engine_settings.d.ts +57 -0
  27. package/dist/engine_settings.d.ts.map +1 -0
  28. package/dist/engine_settings.js +114 -0
  29. package/dist/engine_settings.js.map +1 -0
  30. package/dist/global_litertlm.d.ts +66 -0
  31. package/dist/global_litertlm.d.ts.map +1 -0
  32. package/dist/global_litertlm.js +85 -0
  33. package/dist/global_litertlm.js.map +1 -0
  34. package/dist/index.d.ts +33 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +33 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/litertlm_web.d.ts +32 -0
  39. package/dist/litertlm_web.d.ts.map +1 -0
  40. package/dist/litertlm_web.js +75 -0
  41. package/dist/litertlm_web.js.map +1 -0
  42. package/dist/load.d.ts +28 -0
  43. package/dist/load.d.ts.map +1 -0
  44. package/dist/load.js +50 -0
  45. package/dist/load.js.map +1 -0
  46. package/dist/load_litertlm.d.ts +58 -0
  47. package/dist/load_litertlm.d.ts.map +1 -0
  48. package/dist/load_litertlm.js +87 -0
  49. package/dist/load_litertlm.js.map +1 -0
  50. package/dist/mutex.d.ts +45 -0
  51. package/dist/mutex.d.ts.map +1 -0
  52. package/dist/mutex.js +62 -0
  53. package/dist/mutex.js.map +1 -0
  54. package/dist/orchestration/auto_tool_chat.d.ts +82 -0
  55. package/dist/orchestration/auto_tool_chat.d.ts.map +1 -0
  56. package/dist/orchestration/auto_tool_chat.js +304 -0
  57. package/dist/orchestration/auto_tool_chat.js.map +1 -0
  58. package/dist/orchestration/chat_interface.d.ts +30 -0
  59. package/dist/orchestration/chat_interface.d.ts.map +1 -0
  60. package/dist/orchestration/chat_interface.js +17 -0
  61. package/dist/orchestration/chat_interface.js.map +1 -0
  62. package/dist/orchestration/webmcp_tool.d.ts +41 -0
  63. package/dist/orchestration/webmcp_tool.d.ts.map +1 -0
  64. package/dist/orchestration/webmcp_tool.js +32 -0
  65. package/dist/orchestration/webmcp_tool.js.map +1 -0
  66. package/dist/readable_stream_data_stream_wrapper.d.ts +44 -0
  67. package/dist/readable_stream_data_stream_wrapper.d.ts.map +1 -0
  68. package/dist/readable_stream_data_stream_wrapper.js +315 -0
  69. package/dist/readable_stream_data_stream_wrapper.js.map +1 -0
  70. package/dist/session.d.ts +51 -0
  71. package/dist/session.d.ts.map +1 -0
  72. package/dist/session.js +107 -0
  73. package/dist/session.js.map +1 -0
  74. package/dist/session_config.d.ts +60 -0
  75. package/dist/session_config.d.ts.map +1 -0
  76. package/dist/session_config.js +109 -0
  77. package/dist/session_config.js.map +1 -0
  78. package/dist/stream_utils.d.ts +25 -0
  79. package/dist/stream_utils.d.ts.map +1 -0
  80. package/dist/stream_utils.js +95 -0
  81. package/dist/stream_utils.js.map +1 -0
  82. package/dist/testing/fakes.d.ts +67 -0
  83. package/dist/testing/fakes.d.ts.map +1 -0
  84. package/dist/testing/fakes.js +125 -0
  85. package/dist/testing/fakes.js.map +1 -0
  86. package/dist/testing/index.d.ts +17 -0
  87. package/dist/testing/index.d.ts.map +1 -0
  88. package/dist/testing/index.js +17 -0
  89. package/dist/testing/index.js.map +1 -0
  90. package/dist/types.d.ts +42 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +17 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/url_path_utils.d.ts +28 -0
  95. package/dist/url_path_utils.d.ts.map +1 -0
  96. package/dist/url_path_utils.js +34 -0
  97. package/dist/url_path_utils.js.map +1 -0
  98. package/dist/wasm_binding_types.d.ts +473 -0
  99. package/dist/wasm_binding_types.d.ts.map +1 -0
  100. package/dist/wasm_binding_types.js +47 -0
  101. package/dist/wasm_binding_types.js.map +1 -0
  102. package/dist/wasm_feature_detect.d.ts +45 -0
  103. package/dist/wasm_feature_detect.d.ts.map +1 -0
  104. package/dist/wasm_feature_detect.js +139 -0
  105. package/dist/wasm_feature_detect.js.map +1 -0
  106. package/dist/wasm_utils.d.ts +30 -0
  107. package/dist/wasm_utils.d.ts.map +1 -0
  108. package/dist/wasm_utils.js +41 -0
  109. package/dist/wasm_utils.js.map +1 -0
  110. package/package.json +3 -2
  111. package/wasm/litertlm_wasm_asyncify_internal.js +8749 -0
  112. package/wasm/litertlm_wasm_asyncify_internal.wasm +0 -0
  113. package/wasm/litertlm_wasm_compat_asyncify_internal.js +8758 -0
  114. package/wasm/litertlm_wasm_compat_asyncify_internal.wasm +0 -0
  115. package/wasm/litertlm_wasm_compat_internal.js +8543 -0
  116. package/wasm/litertlm_wasm_compat_internal.wasm +0 -0
  117. package/wasm/litertlm_wasm_internal.js +8532 -0
  118. package/wasm/litertlm_wasm_internal.wasm +0 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { wasmSessionConfigToSessionConfig } from './session_config.js';
17
+ import { consumeEmscriptenVectorToArray } from './wasm_utils.js';
18
+ const BUSY_MESSAGE = 'Session is busy. An operation is already in progress.';
19
+ /**
20
+ * LiteRT-LM Session
21
+ */
22
+ export class Session {
23
+ session;
24
+ mutexes;
25
+ config;
26
+ isBusy = false;
27
+ constructor(session, mutexes) {
28
+ this.session = session;
29
+ this.mutexes = mutexes;
30
+ const wasmSessionConfig = session.getSessionConfig();
31
+ this.config = wasmSessionConfigToSessionConfig(wasmSessionConfig);
32
+ wasmSessionConfig.delete();
33
+ }
34
+ async runPrefill(inputs) {
35
+ if (this.isBusy) {
36
+ throw new Error(BUSY_MESSAGE);
37
+ }
38
+ this.isBusy = true;
39
+ try {
40
+ await this.mutexes.executor.acquireAndRun(async () => {
41
+ await this.session.runPrefill(inputs);
42
+ });
43
+ }
44
+ finally {
45
+ this.isBusy = false;
46
+ }
47
+ }
48
+ async runDecode() {
49
+ if (this.isBusy) {
50
+ throw new Error(BUSY_MESSAGE);
51
+ }
52
+ this.isBusy = true;
53
+ try {
54
+ return await this.mutexes.executor.acquireAndRun(async () => {
55
+ const wasmResponses = await this.session.runDecode();
56
+ return new Responses(wasmResponses);
57
+ });
58
+ }
59
+ finally {
60
+ this.isBusy = false;
61
+ }
62
+ }
63
+ /**
64
+ * Sends a signal to cancel any current generation.
65
+ */
66
+ cancel() {
67
+ this.session.cancelProcess();
68
+ }
69
+ /**
70
+ * Clones the session. The cloned session will have all the settings and
71
+ * context of the original session up to the point that clone is called.
72
+ */
73
+ async clone() {
74
+ if (this.isBusy) {
75
+ throw new Error(BUSY_MESSAGE);
76
+ }
77
+ this.isBusy = true;
78
+ try {
79
+ return await this.mutexes.executor.acquireAndRun(() => {
80
+ const wasmClonedSession = this.session.clone();
81
+ return new Session(wasmClonedSession, this.mutexes);
82
+ });
83
+ }
84
+ finally {
85
+ this.isBusy = false;
86
+ }
87
+ }
88
+ async delete() {
89
+ await this.mutexes.executor.acquireAndRun(() => {
90
+ this.session.delete();
91
+ });
92
+ }
93
+ }
94
+ class Responses {
95
+ responses;
96
+ constructor(responses) {
97
+ this.responses = responses;
98
+ }
99
+ getTexts() {
100
+ const texts = this.responses.getTexts();
101
+ return consumeEmscriptenVectorToArray(texts);
102
+ }
103
+ delete() {
104
+ this.responses.delete();
105
+ }
106
+ }
107
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { RecursiveRequired } from './types.js';
17
+ import { Backend, SamplerType, SessionConfig as WasmSessionConfig } from './wasm_binding_types.js';
18
+ export { SamplerType };
19
+ /**
20
+ * Configures how to sample the next token.
21
+ */
22
+ export interface SamplerParameters {
23
+ type?: SamplerType;
24
+ k?: number;
25
+ p?: number;
26
+ temperature?: number;
27
+ seed?: number;
28
+ }
29
+ /**
30
+ * Configures a LiteRT-LM Session.
31
+ */
32
+ export interface SessionConfig {
33
+ audioModalityEnabled?: boolean;
34
+ visionModalityEnabled?: boolean;
35
+ samplerParams?: SamplerParameters;
36
+ stopTokenIds?: number[][];
37
+ startTokenId?: number;
38
+ numOutputCandidates?: number;
39
+ samplerBackend?: Backend;
40
+ applyPromptTemplateInSession?: boolean;
41
+ useExternalSampler?: boolean;
42
+ /**
43
+ * The maximum number of tokens to generate per response. For thinking
44
+ * models, both thinking (reasoning) tokens and the final response tokens
45
+ * count towards this limit.
46
+ */
47
+ maxOutputTokens?: number;
48
+ }
49
+ /**
50
+ * Converts a SessionConfig to a WasmSessionConfig.
51
+ */
52
+ export declare function sessionConfigToWasmSessionConfig(sessionConfig: SessionConfig, wasm?: import("./wasm_binding_types.js").LiteRtLmWasm): WasmSessionConfig;
53
+ /**
54
+ * Converts a WasmSessionConfig to a SessionConfig.
55
+ *
56
+ * All fields will be populated with the WASM object's values, which may be
57
+ * default values if they were not set.
58
+ */
59
+ export declare function wasmSessionConfigToSessionConfig(wasmSessionConfig: WasmSessionConfig): RecursiveRequired<SessionConfig>;
60
+ //# sourceMappingURL=session_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_config.d.ts","sourceRoot":"","sources":["../src/session_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,aAAa,IAAI,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAIjG,OAAO,EAAC,WAAW,EAAC,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC5C,aAAa,EAAE,aAAa,EAC5B,IAAI,iDAAmC,GAAG,iBAAiB,CA6D9D;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC5C,iBAAiB,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAwB1E"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Copyright 2026 The ODML Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { getGlobalLiteRtLm } from './global_litertlm.js';
17
+ import { SamplerType } from './wasm_binding_types.js';
18
+ import { consumeEmscriptenVectorToArray, fillEmscriptenVector } from './wasm_utils.js';
19
+ // Re-export SamplerType as it's compatible with the TS API.
20
+ export { SamplerType };
21
+ /**
22
+ * Converts a SessionConfig to a WasmSessionConfig.
23
+ */
24
+ export function sessionConfigToWasmSessionConfig(sessionConfig, wasm = getGlobalLiteRtLm().liteRtLmWasm) {
25
+ const wasmSessionConfig = wasm.SessionConfig.createDefault();
26
+ if (sessionConfig.audioModalityEnabled !== undefined) {
27
+ wasmSessionConfig.setAudioModalityEnabled(sessionConfig.audioModalityEnabled);
28
+ }
29
+ if (sessionConfig.visionModalityEnabled !== undefined) {
30
+ wasmSessionConfig.setVisionModalityEnabled(sessionConfig.visionModalityEnabled);
31
+ }
32
+ if (sessionConfig.samplerParams !== undefined) {
33
+ const samplerParams = wasmSessionConfig.getMutableSamplerParams();
34
+ if (sessionConfig.samplerParams.type !== undefined) {
35
+ samplerParams.setType({ value: sessionConfig.samplerParams.type });
36
+ }
37
+ if (sessionConfig.samplerParams.k !== undefined) {
38
+ samplerParams.setK(sessionConfig.samplerParams.k);
39
+ }
40
+ if (sessionConfig.samplerParams.p !== undefined) {
41
+ samplerParams.setP(sessionConfig.samplerParams.p);
42
+ }
43
+ if (sessionConfig.samplerParams.temperature !== undefined) {
44
+ samplerParams.setTemperature(sessionConfig.samplerParams.temperature);
45
+ }
46
+ if (sessionConfig.samplerParams.seed !== undefined) {
47
+ samplerParams.setSeed(sessionConfig.samplerParams.seed);
48
+ }
49
+ }
50
+ if (sessionConfig.startTokenId !== undefined) {
51
+ wasmSessionConfig.setStartTokenId(sessionConfig.startTokenId);
52
+ }
53
+ if (sessionConfig.numOutputCandidates !== undefined) {
54
+ wasmSessionConfig.setNumOutputCandidates(sessionConfig.numOutputCandidates);
55
+ }
56
+ if (sessionConfig.samplerBackend !== undefined) {
57
+ wasmSessionConfig.setSamplerBackend({ value: sessionConfig.samplerBackend });
58
+ }
59
+ if (sessionConfig.applyPromptTemplateInSession !== undefined) {
60
+ wasmSessionConfig.setApplyPromptTemplateInSession(sessionConfig.applyPromptTemplateInSession);
61
+ }
62
+ if (sessionConfig.useExternalSampler !== undefined) {
63
+ wasmSessionConfig.setUseExternalSampler(sessionConfig.useExternalSampler);
64
+ }
65
+ if (sessionConfig.maxOutputTokens !== undefined) {
66
+ wasmSessionConfig.setMaxOutputTokens(sessionConfig.maxOutputTokens);
67
+ }
68
+ if (sessionConfig.stopTokenIds !== undefined) {
69
+ const outerVec = new wasm.VectorVectorInt();
70
+ for (const innerArr of sessionConfig.stopTokenIds) {
71
+ const innerVec = new wasm.VectorInt();
72
+ fillEmscriptenVector(innerArr, innerVec);
73
+ outerVec.push_back(innerVec);
74
+ innerVec.delete();
75
+ }
76
+ wasmSessionConfig.setStopTokenIds(outerVec);
77
+ outerVec.delete();
78
+ }
79
+ return wasmSessionConfig;
80
+ }
81
+ /**
82
+ * Converts a WasmSessionConfig to a SessionConfig.
83
+ *
84
+ * All fields will be populated with the WASM object's values, which may be
85
+ * default values if they were not set.
86
+ */
87
+ export function wasmSessionConfigToSessionConfig(wasmSessionConfig) {
88
+ const samplerParams = wasmSessionConfig.getMutableSamplerParams();
89
+ return {
90
+ audioModalityEnabled: wasmSessionConfig.getAudioModalityEnabled(),
91
+ visionModalityEnabled: wasmSessionConfig.getVisionModalityEnabled(),
92
+ samplerParams: {
93
+ type: samplerParams.type().value,
94
+ k: samplerParams.k(),
95
+ p: samplerParams.p(),
96
+ temperature: samplerParams.temperature(),
97
+ seed: samplerParams.seed(),
98
+ },
99
+ stopTokenIds: consumeEmscriptenVectorToArray(wasmSessionConfig.getStopTokenIds())
100
+ .map(consumeEmscriptenVectorToArray),
101
+ startTokenId: wasmSessionConfig.getStartTokenId(),
102
+ numOutputCandidates: wasmSessionConfig.getNumOutputCandidates(),
103
+ samplerBackend: wasmSessionConfig.getSamplerBackend().value,
104
+ applyPromptTemplateInSession: wasmSessionConfig.getApplyPromptTemplateInSession(),
105
+ useExternalSampler: wasmSessionConfig.getUseExternalSampler(),
106
+ maxOutputTokens: wasmSessionConfig.getMaxOutputTokens(),
107
+ };
108
+ }
109
+ //# sourceMappingURL=session_config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_config.js","sourceRoot":"","sources":["../src/session_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAU,WAAW,EAAqC,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAC,8BAA8B,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAErF,4DAA4D;AAC5D,OAAO,EAAC,WAAW,EAAC,CAAC;AAkCrB;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC5C,aAA4B,EAC5B,IAAI,GAAG,iBAAiB,EAAE,CAAC,YAAY;IACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IAE7D,IAAI,aAAa,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACrD,iBAAiB,CAAC,uBAAuB,CACrC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,aAAa,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACtD,iBAAiB,CAAC,wBAAwB,CACtC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,aAAa,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,CAAC;QAClE,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnD,aAAa,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,EAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,aAAa,CAAC,aAAa,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC1D,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnD,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,iBAAiB,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,aAAa,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACpD,iBAAiB,CAAC,sBAAsB,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC/C,iBAAiB,CAAC,iBAAiB,CAAC,EAAC,KAAK,EAAE,aAAa,CAAC,cAAc,EAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,aAAa,CAAC,4BAA4B,KAAK,SAAS,EAAE,CAAC;QAC7D,iBAAiB,CAAC,+BAA+B,CAC7C,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,aAAa,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACnD,iBAAiB,CAAC,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,aAAa,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAChD,iBAAiB,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACzC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,CAAC;QACD,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5C,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAC5C,iBAAoC;IACtC,MAAM,aAAa,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,CAAC;IAElE,OAAO;QACL,oBAAoB,EAAE,iBAAiB,CAAC,uBAAuB,EAAE;QACjE,qBAAqB,EAAE,iBAAiB,CAAC,wBAAwB,EAAE;QACnE,aAAa,EAAE;YACb,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK;YAChC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE;YACpB,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE;YACpB,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE;YACxC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE;SAC3B;QACD,YAAY,EACR,8BAA8B,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;aAC9D,GAAG,CAAC,8BAA8B,CAAC;QAC5C,YAAY,EAAE,iBAAiB,CAAC,eAAe,EAAE;QACjD,mBAAmB,EAAE,iBAAiB,CAAC,sBAAsB,EAAE;QAC/D,cAAc,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,KAAK;QAC3D,4BAA4B,EACxB,iBAAiB,CAAC,+BAA+B,EAAE;QACvD,kBAAkB,EAAE,iBAAiB,CAAC,qBAAqB,EAAE;QAC7D,eAAe,EAAE,iBAAiB,CAAC,kBAAkB,EAAE;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { LiteRtLmWasm } from './wasm_binding_types.js';
17
+ /**
18
+ * Converts a model source (URL string, Blob, or ReadableStream) into a ReadableStream.
19
+ */
20
+ export declare function modelToStream(model: string | Blob | ReadableStream<Uint8Array>): Promise<ReadableStream<Uint8Array>>;
21
+ /**
22
+ * Sets up the callback that streams model weights directly into WebGPU buffers.
23
+ */
24
+ export declare function setupStreamWeightsCallback(wasm: LiteRtLmWasm): void;
25
+ //# sourceMappingURL=stream_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream_utils.d.ts","sourceRoot":"","sources":["../src/stream_utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH,wBAAsB,aAAa,CAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,GACjD,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAgBtC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAoEnE"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Converts a model source (URL string, Blob, or ReadableStream) into a ReadableStream.
18
+ */
19
+ export async function modelToStream(model) {
20
+ if (model instanceof ReadableStream) {
21
+ return model;
22
+ }
23
+ if (model instanceof Blob) {
24
+ return model.stream();
25
+ }
26
+ const modelUrl = model;
27
+ const response = await fetch(modelUrl, {
28
+ credentials: 'same-origin',
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Failed to fetch model file from ${modelUrl}`);
32
+ }
33
+ return response.body;
34
+ }
35
+ /**
36
+ * Sets up the callback that streams model weights directly into WebGPU buffers.
37
+ */
38
+ export function setupStreamWeightsCallback(wasm) {
39
+ const gpuDevice = wasm.preinitializedWebGPUDevice;
40
+ if (!gpuDevice) {
41
+ throw new Error('WebGPU device not initialized');
42
+ }
43
+ wasm.registerStreamWeightsCallback(async (tflIds, wgpuBufferIds, offsets, lengths) => {
44
+ const requests = [];
45
+ if (tflIds.length !== wgpuBufferIds.length) {
46
+ throw new Error(`Stream weights callback received arrays of different lengths: ` +
47
+ `tflIds=${tflIds.length}, wgpuBufferIds=${wgpuBufferIds.length}`);
48
+ }
49
+ for (let i = 0; i < tflIds.length; i++) {
50
+ requests.push({
51
+ id: tflIds[i],
52
+ wgpuBufferId: wgpuBufferIds[i],
53
+ offset: offsets[i],
54
+ length: lengths[i],
55
+ });
56
+ }
57
+ requests.sort((a, b) => a.offset - b.offset);
58
+ const CHUNK_SIZE = 4 * 1024 * 1024;
59
+ // `_malloc` returns a signed i32, which reads back negative once the heap
60
+ // grows past 2GB. Reinterpret it as unsigned before using it to index the
61
+ // heap, or the `Uint8Array` view below throws a `RangeError`.
62
+ const tempPtr = wasm._malloc(CHUNK_SIZE) >>> 0;
63
+ if (tempPtr === 0) {
64
+ throw new Error('Failed to allocate Wasm memory for streaming weights');
65
+ }
66
+ try {
67
+ for (const req of requests) {
68
+ const gpuBuffer = wasm.WebGPU.getJsObject(req.wgpuBufferId);
69
+ if (!gpuBuffer) {
70
+ throw new Error(`Failed to find GPUBuffer for ID: ${req.wgpuBufferId}`);
71
+ }
72
+ const modelType = wasm.getCurrentlyCompilingModel();
73
+ let bytesUploaded = 0;
74
+ while (bytesUploaded < req.length) {
75
+ const chunkSize = Math.min(CHUNK_SIZE, req.length - bytesUploaded);
76
+ await wasm.readStoredWeights(modelType, req.offset + bytesUploaded, chunkSize, tempPtr);
77
+ let chunkData = new Uint8Array(wasm.HEAPU8.buffer, tempPtr, chunkSize);
78
+ if (chunkData.byteLength % 4 !== 0 &&
79
+ bytesUploaded + chunkSize === req.length) {
80
+ const paddedSize = (chunkData.byteLength + 3) & ~3;
81
+ const paddedData = new Uint8Array(paddedSize);
82
+ paddedData.set(chunkData);
83
+ chunkData = paddedData;
84
+ }
85
+ gpuDevice.queue.writeBuffer(gpuBuffer, bytesUploaded, chunkData);
86
+ bytesUploaded += chunkSize;
87
+ }
88
+ }
89
+ }
90
+ finally {
91
+ wasm._free(tempPtr);
92
+ }
93
+ });
94
+ }
95
+ //# sourceMappingURL=stream_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream_utils.js","sourceRoot":"","sources":["../src/stream_utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { ChatInterface } from '../orchestration/chat_interface.js';
17
+ import type { Conversation } from '../conversation.js';
18
+ import type { ConversationConfig, Message, MessageLike } from '../conversation_config.js';
19
+ import type { Engine } from '../engine.js';
20
+ import type { EngineSettings } from '../engine_settings.js';
21
+ import type { Session } from '../session.js';
22
+ import type { SessionConfig } from '../session_config.js';
23
+ import type { RecursiveRequired } from '../types.js';
24
+ import type { BenchmarkInfo } from '../wasm_binding_types.js';
25
+ /** Fake implementation of Conversation for testing. */
26
+ export declare class ConversationFake implements ChatInterface {
27
+ initialHistory: Message[];
28
+ history: Message[];
29
+ nextResponses: Message[];
30
+ constructor(initialHistory?: Message[]);
31
+ /**
32
+ * Enqueues a message that the fake will return on the next call to
33
+ * sendMessage or sendMessageStreaming. Can be called multiple times.
34
+ */
35
+ queueResponse(message: Message): void;
36
+ private popNextResponse;
37
+ private appendInput;
38
+ sendMessage(message: MessageLike | MessageLike[]): Promise<Message>;
39
+ sendMessageStreaming(message: MessageLike | MessageLike[]): ReadableStream<Message>;
40
+ getHistory(): Message[];
41
+ cancel(): void;
42
+ delete(): Promise<void>;
43
+ getTokenCount(): Promise<number>;
44
+ getBenchmarkInfo(): Promise<BenchmarkInfo>;
45
+ clone(): Conversation;
46
+ }
47
+ /** Fake implementation of Session for testing. */
48
+ export declare class SessionFake {
49
+ inputsPrefilled: string[];
50
+ runPrefill(inputs: string[]): Promise<void>;
51
+ runDecode(): ReturnType<Session['runDecode']>;
52
+ cancel(): void;
53
+ clone(): Session;
54
+ delete(): Promise<void>;
55
+ }
56
+ /** Fake implementation of Engine for testing. */
57
+ export declare class EngineFake {
58
+ readonly settings: RecursiveRequired<EngineSettings>;
59
+ cachedSession: SessionFake;
60
+ cachedConversation: ConversationFake;
61
+ constructor(settings: EngineSettings);
62
+ static create(engineSettings: EngineSettings, inputPromptAsHint?: string): Promise<Engine>;
63
+ createSession(sessionConfig?: SessionConfig): Promise<Session>;
64
+ createConversation(config?: ConversationConfig): Promise<Conversation>;
65
+ delete(): Promise<void>;
66
+ }
67
+ //# sourceMappingURL=fakes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakes.d.ts","sourceRoot":"","sources":["../../src/testing/fakes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,uDAAuD;AACvD,qBAAa,gBAAiB,YAAW,aAAa;IAIjC,cAAc,EAAE,OAAO,EAAE;IAH5C,OAAO,EAAE,OAAO,EAAE,CAAM;IACxB,aAAa,EAAE,OAAO,EAAE,CAAM;gBAEX,cAAc,GAAE,OAAO,EAAO;IAIjD;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO;IAI9B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,WAAW;IAab,WAAW,CAAC,OAAO,EAAE,WAAW,GAAC,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAOvE,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAC,WAAW,EAAE,GACnD,cAAc,CAAC,OAAO,CAAC;IAY3B,UAAU,IAAI,OAAO,EAAE;IAIvB,MAAM;IAEA,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAUhD,KAAK,IAAI,YAAY;CAKtB;AAED,kDAAkD;AAClD,qBAAa,WAAW;IACtB,eAAe,EAAE,MAAM,EAAE,CAAM;IAEzB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAKnD,MAAM;IAEN,KAAK,IAAI,OAAO;IAMV,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAC9B;AAED,iDAAiD;AACjD,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACrD,aAAa,cAAqB;IAClC,kBAAkB,mBAA0B;gBAEhC,QAAQ,EAAE,cAAc;WAIvB,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,SAAK,GACtE,OAAO,CAAC,MAAM,CAAC;IAIb,aAAa,CAAC,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAItE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /** Fake implementation of Conversation for testing. */
17
+ export class ConversationFake {
18
+ initialHistory;
19
+ history = [];
20
+ nextResponses = [];
21
+ constructor(initialHistory = []) {
22
+ this.initialHistory = initialHistory;
23
+ this.history = [...initialHistory];
24
+ }
25
+ /**
26
+ * Enqueues a message that the fake will return on the next call to
27
+ * sendMessage or sendMessageStreaming. Can be called multiple times.
28
+ */
29
+ queueResponse(message) {
30
+ this.nextResponses.push(message);
31
+ }
32
+ popNextResponse() {
33
+ if (this.nextResponses.length > 0) {
34
+ return this.nextResponses.shift();
35
+ }
36
+ return { role: 'assistant', content: 'hello from fake' };
37
+ }
38
+ appendInput(message) {
39
+ if (Array.isArray(message)) {
40
+ this.history.push(...message.map(m => typeof m === 'string' ? { role: 'user', content: m } :
41
+ m));
42
+ }
43
+ else {
44
+ this.history.push(typeof message === 'string' ?
45
+ { role: 'user', content: message } :
46
+ message);
47
+ }
48
+ }
49
+ async sendMessage(message) {
50
+ this.appendInput(message);
51
+ const newMessage = this.popNextResponse();
52
+ this.history.push(newMessage);
53
+ return newMessage;
54
+ }
55
+ sendMessageStreaming(message) {
56
+ this.appendInput(message);
57
+ return new ReadableStream({
58
+ start: (controller) => {
59
+ const newMessage = this.popNextResponse();
60
+ this.history.push(newMessage);
61
+ controller.enqueue(newMessage);
62
+ controller.close();
63
+ }
64
+ });
65
+ }
66
+ getHistory() {
67
+ return [...this.history];
68
+ }
69
+ cancel() { }
70
+ async delete() { }
71
+ async getTokenCount() {
72
+ return this.history.length * 10;
73
+ }
74
+ async getBenchmarkInfo() {
75
+ return {
76
+ lastPrefillTokensPerSecond: 0,
77
+ lastPrefillTokenCount: 0,
78
+ lastDecodeTokensPerSecond: 0,
79
+ lastDecodeTokenCount: 0,
80
+ timeToFirstTokenInSecond: 0,
81
+ };
82
+ }
83
+ clone() {
84
+ const cloned = new ConversationFake([...this.history]);
85
+ cloned.nextResponses = [...this.nextResponses];
86
+ return cloned;
87
+ }
88
+ }
89
+ /** Fake implementation of Session for testing. */
90
+ export class SessionFake {
91
+ inputsPrefilled = [];
92
+ async runPrefill(inputs) {
93
+ this.inputsPrefilled.push(...inputs);
94
+ }
95
+ async runDecode() {
96
+ return { getTexts: () => ['decoded response'], delete: () => { } };
97
+ }
98
+ cancel() { }
99
+ clone() {
100
+ const cloned = new SessionFake();
101
+ cloned.inputsPrefilled = [...this.inputsPrefilled];
102
+ return cloned;
103
+ }
104
+ async delete() { }
105
+ }
106
+ /** Fake implementation of Engine for testing. */
107
+ export class EngineFake {
108
+ settings;
109
+ cachedSession = new SessionFake();
110
+ cachedConversation = new ConversationFake();
111
+ constructor(settings) {
112
+ this.settings = settings;
113
+ }
114
+ static async create(engineSettings, inputPromptAsHint = '') {
115
+ return new EngineFake(engineSettings);
116
+ }
117
+ async createSession(sessionConfig = {}) {
118
+ return this.cachedSession;
119
+ }
120
+ async createConversation(config) {
121
+ return this.cachedConversation;
122
+ }
123
+ async delete() { }
124
+ }
125
+ //# sourceMappingURL=fakes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakes.js","sourceRoot":"","sources":["../../src/testing/fakes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export * from './fakes.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,YAAY,CAAC"}