Skip to content

Commit c11f92d

Browse files
authored
Merge pull request #1298 from microsoft/andrueastman/kiota-bundle
Setup bundle for TS
2 parents fcc6011 + cddd14d commit c11f92d

21 files changed

+214
-8
lines changed

eslint.config.mjs

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export default [{
5555
parserOptions: {
5656
project: [
5757
"packages/abstractions/tsconfig.json",
58+
"packages/bundle/tsconfig.json",
5859
"packages/authentication/azure/tsconfig.json",
5960
"packages/authentication/azure/tsconfig.json",
6061
"packages/http/fetch/tsconfig.json",

lerna.json

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"packages": [
33
"packages/test",
44
"packages/abstractions",
5+
"packages/bundle",
56
"packages/http/*",
67
"packages/serialization/*",
78
"packages/authentication/*"

package-lock.json

+18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"workspaces": [
3131
"packages/test/",
3232
"packages/abstractions",
33+
"packages/bundle",
3334
"packages/http/*",
3435
"packages/serialization/*",
3536
"packages/authentication/*"

packages/abstractions/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-abstractions",
3-
"version": "1.0.0-preview.57",
3+
"version": "1.0.0-preview.58",
44
"description": "Core abstractions for kiota generated libraries in TypeScript and JavaScript",
55
"main": "dist/es/src/index.js",
66
"module": "dist/es/src/index.js",

packages/authentication/azure/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-authentication-azure",
3-
"version": "1.0.0-preview.52",
3+
"version": "1.0.0-preview.53",
44
"description": "Authentication provider for Kiota using Azure Identity",
55
"main": "dist/es/src/index.js",
66
"module": "dist/es/src/index.js",

packages/authentication/spfx/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-authentication-spfx",
3-
"version": "1.0.0-preview.46",
3+
"version": "1.0.0-preview.47",
44
"description": "Authentication provider for using Kiota in SPFx solutions",
55
"main": "dist/es/src/index.js",
66
"module": "dist/es/src/index.js",

packages/bundle/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist
2+
*.tsbuildinfo

packages/bundle/.npmignore

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.eslint**
2+
.prettier**
3+
*.log
4+
*.tgz
5+
**/test/**/*
6+
docs/
7+
node_modules/
8+
rollup.config.js
9+
src/
10+
tsconfig.**.json
11+
vite.config.mts

packages/bundle/README.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[![npm version badge](https://img.shields.io/npm/v/@microsoft/kiota-bundle?color=blue)](https://www.npmjs.com/package/@microsoft/kiota-bundle)
2+
3+
The Kiota Bundle Library provides default implementations for client setup.
4+
The package provides a request adapter implementation with defaults serialization libraries setup fo use with a generated Kiota client.
5+
6+
Read more about Kiota [here](https://github.com/microsoft/kiota/blob/main/README.md).
7+
8+
## Using the bundle
9+
10+
`npm i @microsoft/kiota-bundle`

packages/bundle/package.json

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"name": "@microsoft/kiota-bundle",
3+
"version": "1.0.0-preview.1",
4+
"description": "Kiota Bundle package providing default implementations for client setup for kiota generated libraries in TypeScript and JavaScript",
5+
"main": "dist/es/src/index.js",
6+
"module": "dist/es/src/index.js",
7+
"types": "dist/es/src/index.d.ts",
8+
"type": "module",
9+
"scripts": {
10+
"build": "npm run build:esm",
11+
"build:esm": "tsc && tsc-alias",
12+
"lint": "eslint . --ext .ts",
13+
"lint:fix": "eslint . --ext .ts --fix",
14+
"clean": "rimraf ./dist",
15+
"test:browser": "vitest run --browser.name=chrome --browser.headless --browser.provider=webdriverio",
16+
"test:node": "vitest --run",
17+
"test": "npm run test:node && npm run test:browser"
18+
},
19+
"repository": "git://github.com/microsoft/kiota-typescript.git",
20+
"keywords": [
21+
"kiota",
22+
"openAPI",
23+
"Microsoft",
24+
"Graph"
25+
],
26+
"author": "Microsoft",
27+
"license": "MIT",
28+
"bugs": {
29+
"url": "https://github.com/microsoft/kiota-typescript/issues"
30+
},
31+
"homepage": "https://github.com/microsoft/kiota#readme",
32+
"devDependencies": {
33+
},
34+
"dependencies": {
35+
"@microsoft/kiota-abstractions": "*",
36+
"@microsoft/kiota-http-fetchlibrary": "*",
37+
"@microsoft/kiota-serialization-form": "*",
38+
"@microsoft/kiota-serialization-json": "*",
39+
"@microsoft/kiota-serialization-text": "*",
40+
"@microsoft/kiota-serialization-multipart": "*"
41+
},
42+
"publishConfig": {
43+
"access": "public"
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* -------------------------------------------------------------------------------------------
3+
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
4+
* See License in the project root for license information.
5+
* -------------------------------------------------------------------------------------------
6+
*/
7+
8+
import { AuthenticationProvider, ParseNodeFactory, ParseNodeFactoryRegistry, registerDefaultDeserializer, registerDefaultSerializer, SerializationWriterFactory, SerializationWriterFactoryRegistry } from "@microsoft/kiota-abstractions";
9+
import { FormParseNodeFactory, FormSerializationWriterFactory } from "@microsoft/kiota-serialization-form";
10+
import { JsonParseNodeFactory, JsonSerializationWriterFactory } from "@microsoft/kiota-serialization-json";
11+
import { MultipartSerializationWriterFactory } from "@microsoft/kiota-serialization-multipart";
12+
import { TextParseNodeFactory, TextSerializationWriterFactory } from "@microsoft/kiota-serialization-text";
13+
import { FetchRequestAdapter, HttpClient, type ObservabilityOptions, ObservabilityOptionsImpl } from "@microsoft/kiota-http-fetchlibrary";
14+
15+
/**
16+
* Default request adapter for graph clients. Bootstraps serialization and other aspects.
17+
*/
18+
export class DefaultRequestAdapter extends FetchRequestAdapter {
19+
/**
20+
* Instantiates a new request adapter.
21+
* @param authenticationProvider the authentication provider to use.
22+
* @param parseNodeFactory the parse node factory to deserialize responses.
23+
* @param serializationWriterFactory the serialization writer factory to use to serialize request bodies.
24+
* @param httpClient the http client to use to execute requests.
25+
* @param observabilityOptions the observability options to use.
26+
*/
27+
public constructor(authenticationProvider: AuthenticationProvider, parseNodeFactory: ParseNodeFactory = ParseNodeFactoryRegistry.defaultInstance, serializationWriterFactory: SerializationWriterFactory = SerializationWriterFactoryRegistry.defaultInstance, httpClient: HttpClient = new HttpClient(), observabilityOptions: ObservabilityOptions = new ObservabilityOptionsImpl()) {
28+
super(authenticationProvider, parseNodeFactory, serializationWriterFactory, httpClient, observabilityOptions);
29+
DefaultRequestAdapter.setupDefaults();
30+
}
31+
32+
private static setupDefaults() {
33+
registerDefaultSerializer(JsonSerializationWriterFactory);
34+
registerDefaultSerializer(TextSerializationWriterFactory);
35+
registerDefaultSerializer(FormSerializationWriterFactory);
36+
registerDefaultSerializer(MultipartSerializationWriterFactory);
37+
registerDefaultDeserializer(JsonParseNodeFactory);
38+
registerDefaultDeserializer(TextParseNodeFactory);
39+
registerDefaultDeserializer(FormParseNodeFactory);
40+
}
41+
}

packages/bundle/src/index.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* -------------------------------------------------------------------------------------------
3+
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
4+
* See License in the project root for license information.
5+
* -------------------------------------------------------------------------------------------
6+
*/
7+
8+
/* eslint-disable @typescript-eslint/triple-slash-reference*/
9+
10+
export * from "./defaultRequestAdapter";

packages/bundle/test/bundleTests.ts

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* -------------------------------------------------------------------------------------------
3+
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
4+
* See License in the project root for license information.
5+
* -------------------------------------------------------------------------------------------
6+
*/
7+
import { AnonymousAuthenticationProvider, AuthenticationProvider, ParseNodeFactoryRegistry, SerializationWriterFactoryRegistry } from "@microsoft/kiota-abstractions";
8+
import { assert, describe, it } from "vitest";
9+
10+
import { DefaultRequestAdapter } from "../src/defaultRequestAdapter";
11+
12+
describe("defaultRequestAdapter.ts", () => {
13+
describe("Initialization", () => {
14+
it("should throw error on null authProvider", async () => {
15+
assert.throws(() => new DefaultRequestAdapter(null as unknown as AuthenticationProvider), Error, "authentication provider cannot be null");
16+
});
17+
18+
it("should setup serializers correctly", async () => {
19+
const requestAdapter = new DefaultRequestAdapter(new AnonymousAuthenticationProvider());
20+
21+
assert.isNotNull(requestAdapter);
22+
23+
const serializerMap = SerializationWriterFactoryRegistry.defaultInstance.contentTypeAssociatedFactories;
24+
const deserializerMap = ParseNodeFactoryRegistry.defaultInstance.contentTypeAssociatedFactories;
25+
26+
assert.isNotNull(serializerMap);
27+
assert.isNotNull(deserializerMap);
28+
29+
// verify that the default serializers are registered
30+
assert.equal(serializerMap.size, 4);
31+
assert.equal(deserializerMap.size, 3);
32+
33+
// verify that the default serializers are registered by name
34+
assert.isTrue(serializerMap.has("application/json"));
35+
assert.isTrue(serializerMap.has("text/plain"));
36+
assert.isTrue(serializerMap.has("application/x-www-form-urlencoded"));
37+
assert.isTrue(serializerMap.has("multipart/form-data"));
38+
39+
// verify that the default deserializers are registered by name
40+
assert.isTrue(deserializerMap.has("application/json"));
41+
assert.isTrue(deserializerMap.has("text/plain"));
42+
assert.isTrue(deserializerMap.has("application/x-www-form-urlencoded"));
43+
});
44+
});
45+
});

packages/bundle/tsconfig.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"$schema": "https://json.schemastore.org/tsconfig",
3+
"extends": "../../tsconfig.base.json",
4+
"compilerOptions": {
5+
"outDir": "dist/es/"
6+
},
7+
"include": [
8+
"./src/**/*.ts",
9+
]
10+
}

packages/bundle/vite.config.mts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { defineConfig, configDefaults } from "vitest/config";
2+
3+
export default defineConfig({
4+
test: {
5+
exclude: [...configDefaults.exclude, "**/test{Entity,Enum}.ts"],
6+
include: [...configDefaults.include, "test/**/*.ts"],
7+
coverage: {
8+
reporter: ["html"],
9+
},
10+
},
11+
});

packages/http/fetch/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-http-fetchlibrary",
3-
"version": "1.0.0-preview.56",
3+
"version": "1.0.0-preview.57",
44
"description": "Kiota request adapter implementation with fetch",
55
"keywords": [
66
"Kiota",

packages/serialization/form/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-serialization-form",
3-
"version": "1.0.0-preview.46",
3+
"version": "1.0.0-preview.47",
44
"description": "Implementation of Kiota Serialization interfaces for URI from encoded",
55
"main": "dist/es/src/index.js",
66
"browser": {

packages/serialization/json/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-serialization-json",
3-
"version": "1.0.0-preview.57",
3+
"version": "1.0.0-preview.58",
44
"description": "Implementation of Kiota Serialization interfaces for JSON",
55
"main": "dist/es/src/index.js",
66
"type": "module",

packages/serialization/multipart/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-serialization-multipart",
3-
"version": "1.0.0-preview.35",
3+
"version": "1.0.0-preview.36",
44
"description": "Implementation of Kiota Serialization interfaces for multipart form data",
55
"main": "dist/es/src/index.js",
66
"module": "dist/es/src/index.js",

packages/serialization/text/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/kiota-serialization-text",
3-
"version": "1.0.0-preview.54",
3+
"version": "1.0.0-preview.55",
44
"description": "Implementation of Kiota Serialization interfaces for text",
55
"main": "dist/es/src/index.js",
66
"browser": {

0 commit comments

Comments
 (0)