@fluidframework/odsp-urlresolver 2.0.0-rc.2.0.1 → 2.0.0-rc.3.0.0

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 (40) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/odsp-urlresolver.api.md +3 -6
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/public.d.ts +12 -0
  8. package/dist/urlResolver.d.ts +1 -7
  9. package/dist/urlResolver.d.ts.map +1 -1
  10. package/dist/urlResolver.js +12 -13
  11. package/dist/urlResolver.js.map +1 -1
  12. package/internal.d.ts +11 -0
  13. package/lib/index.d.ts +1 -1
  14. package/lib/index.d.ts.map +1 -1
  15. package/lib/index.js +1 -1
  16. package/lib/index.js.map +1 -1
  17. package/lib/public.d.ts +12 -0
  18. package/lib/urlResolver.d.ts +1 -7
  19. package/lib/urlResolver.d.ts.map +1 -1
  20. package/lib/urlResolver.js +5 -5
  21. package/lib/urlResolver.js.map +1 -1
  22. package/package.json +32 -48
  23. package/src/index.ts +1 -1
  24. package/src/urlResolver.ts +11 -11
  25. package/api-extractor-cjs.json +0 -8
  26. package/dist/odsp-urlresolver-alpha.d.ts +0 -12
  27. package/dist/odsp-urlresolver-beta.d.ts +0 -18
  28. package/dist/odsp-urlresolver-public.d.ts +0 -18
  29. package/dist/odsp-urlresolver-untrimmed.d.ts +0 -30
  30. package/lib/odsp-urlresolver-alpha.d.ts +0 -12
  31. package/lib/odsp-urlresolver-beta.d.ts +0 -18
  32. package/lib/odsp-urlresolver-public.d.ts +0 -18
  33. package/lib/odsp-urlresolver-untrimmed.d.ts +0 -30
  34. package/lib/test/fluidAppUrlResolver.spec.js +0 -19
  35. package/lib/test/fluidAppUrlResolver.spec.js.map +0 -1
  36. package/lib/test/spoUrlResolver.spec.js +0 -29
  37. package/lib/test/spoUrlResolver.spec.js.map +0 -1
  38. package/lib/test/types/validateOdspUrlresolverPrevious.generated.js +0 -6
  39. package/lib/test/types/validateOdspUrlresolverPrevious.generated.js.map +0 -1
  40. /package/{dist → lib}/tsdoc-metadata.json +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @fluidframework/odsp-urlresolver
2
2
 
3
+ ## 2.0.0-rc.3.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - Packages now use package.json "exports" and require modern module resolution [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
8
+
9
+ Fluid Framework packages have been updated to use the [package.json "exports"
10
+ field](https://nodejs.org/docs/latest-v18.x/api/packages.html#exports) to define explicit entry points for both
11
+ TypeScript types and implementation code.
12
+
13
+ This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
14
+
15
+ - `"moduleResolution": "Node16"` with `"module": "Node16"`
16
+ - `"moduleResolution": "Bundler"` with `"module": "ESNext"`
17
+
18
+ We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable
19
+ for use with modern versions of Node.js _and_ Bundlers.
20
+ [See the TypeScript documentation](https://www.typescriptlang.org/tsconfig#moduleResolution) for more information
21
+ regarding the module and moduleResolution options.
22
+
23
+ **Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used
24
+ to distinguish stable APIs from those that are in development.**
25
+
3
26
  ## 2.0.0-rc.2.0.0
4
27
 
5
28
  ### Minor Changes
@@ -4,10 +4,10 @@
4
4
 
5
5
  ```ts
6
6
 
7
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
7
+ import { IContainerPackageInfo } from '@fluidframework/driver-definitions/internal';
8
8
  import { IRequest } from '@fluidframework/core-interfaces';
9
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
10
- import { IUrlResolver } from '@fluidframework/driver-definitions';
9
+ import { IResolvedUrl } from '@fluidframework/driver-definitions/internal';
10
+ import { IUrlResolver } from '@fluidframework/driver-definitions/internal';
11
11
 
12
12
  // @internal
13
13
  export class FluidAppOdspUrlResolver implements IUrlResolver {
@@ -17,9 +17,6 @@ export class FluidAppOdspUrlResolver implements IUrlResolver {
17
17
  resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
18
18
  }
19
19
 
20
- // @internal
21
- export const isOdspUrl: (url: string) => boolean;
22
-
23
20
  // @internal (undocumented)
24
21
  export class OdspUrlResolver implements IUrlResolver {
25
22
  // (undocumented)
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
5
+ export { FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -4,9 +4,8 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.OdspUrlResolver = exports.FluidAppOdspUrlResolver = exports.isOdspUrl = void 0;
7
+ exports.OdspUrlResolver = exports.FluidAppOdspUrlResolver = void 0;
8
8
  var urlResolver_js_1 = require("./urlResolver.js");
9
- Object.defineProperty(exports, "isOdspUrl", { enumerable: true, get: function () { return urlResolver_js_1.isOdspUrl; } });
10
9
  Object.defineProperty(exports, "FluidAppOdspUrlResolver", { enumerable: true, get: function () { return urlResolver_js_1.FluidAppOdspUrlResolver; } });
11
10
  Object.defineProperty(exports, "OdspUrlResolver", { enumerable: true, get: function () { return urlResolver_js_1.OdspUrlResolver; } });
12
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAAuF;AAA9E,2GAAA,SAAS,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,iHAAA,eAAe,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from \"./urlResolver.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAA4E;AAAnE,yHAAA,uBAAuB,OAAA;AAAE,iHAAA,eAAe,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { FluidAppOdspUrlResolver, OdspUrlResolver } from \"./urlResolver.js\";\n"]}
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export {}
12
+
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { IRequest } from "@fluidframework/core-interfaces";
6
- import { IContainerPackageInfo, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
6
+ import { IContainerPackageInfo, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions/internal";
7
7
  /**
8
8
  * @internal
9
9
  */
@@ -11,12 +11,6 @@ export declare class OdspUrlResolver implements IUrlResolver {
11
11
  resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
12
12
  getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string>;
13
13
  }
14
- /**
15
- * Returns true if the given string is a valid SPO/ODB or ODC URL.
16
- *
17
- * @internal
18
- */
19
- export declare const isOdspUrl: (url: string) => boolean;
20
14
  /**
21
15
  * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.
22
16
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EACN,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAkB5C;;GAEG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAiB7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5F;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,OAEvC,CAAC;AAEF;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA6B7D,cAAc,CAC1B,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,qBAAqB,GACvC,OAAO,CAAC,MAAM,CAAC;CAGlB"}
1
+ {"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EACN,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,MAAM,6CAA6C,CAAC;AAgBrD;;GAEG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAiB7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5F;AAWD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA6B7D,cAAc,CAC1B,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,qBAAqB,GACvC,OAAO,CAAC,MAAM,CAAC;CAGlB"}
@@ -4,10 +4,10 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.FluidAppOdspUrlResolver = exports.isOdspUrl = exports.OdspUrlResolver = void 0;
8
- const odsp_driver_1 = require("@fluidframework/odsp-driver");
7
+ exports.FluidAppOdspUrlResolver = exports.OdspUrlResolver = void 0;
9
8
  const client_utils_1 = require("@fluid-internal/client-utils");
10
- const core_utils_1 = require("@fluidframework/core-utils");
9
+ const internal_1 = require("@fluidframework/core-utils/internal");
10
+ const internal_2 = require("@fluidframework/odsp-driver/internal");
11
11
  const fluidOfficeAndOneNoteServers = new Set([
12
12
  "dev.fluidpreview.office.net",
13
13
  "fluidpreview.office.net",
@@ -18,14 +18,14 @@ const fluidOfficeAndOneNoteServers = new Set([
18
18
  */
19
19
  class OdspUrlResolver {
20
20
  async resolve(request) {
21
- if ((0, exports.isOdspUrl)(request.url)) {
22
- const reqUrl = new URL(request.url);
23
- const contents = await (0, odsp_driver_1.getOdspUrlParts)(reqUrl);
21
+ const reqUrl = new URL(request.url);
22
+ if (isOdspUrl(reqUrl)) {
23
+ const contents = await (0, internal_2.getOdspUrlParts)(reqUrl);
24
24
  if (!contents) {
25
25
  return undefined;
26
26
  }
27
- const urlToBeResolved = (0, odsp_driver_1.createOdspUrl)({ ...contents, dataStorePath: "" });
28
- const odspDriverUrlResolver = new odsp_driver_1.OdspDriverUrlResolver();
27
+ const urlToBeResolved = (0, internal_2.createOdspUrl)({ ...contents, dataStorePath: "" });
28
+ const odspDriverUrlResolver = new internal_2.OdspDriverUrlResolver();
29
29
  return odspDriverUrlResolver.resolve({
30
30
  url: urlToBeResolved,
31
31
  headers: request.headers,
@@ -44,9 +44,8 @@ exports.OdspUrlResolver = OdspUrlResolver;
44
44
  * @internal
45
45
  */
46
46
  const isOdspUrl = (url) => {
47
- return (0, odsp_driver_1.isSpoUrl)(url) || (0, odsp_driver_1.isOdcUrl)(url);
47
+ return (0, internal_2.isSpoUrl)(url) || (0, internal_2.isOdcUrl)(url);
48
48
  };
49
- exports.isOdspUrl = isOdspUrl;
50
49
  /**
51
50
  * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.
52
51
  * @internal
@@ -62,7 +61,7 @@ class FluidAppOdspUrlResolver {
62
61
  else if (server === "www.office.com") {
63
62
  const getRequiredParam = (name) => {
64
63
  const value = reqUrl.searchParams.get(name);
65
- (0, core_utils_1.assert)(!!value, 0x097 /* Missing param from office.com URL parameter */);
64
+ (0, internal_1.assert)(!!value, 0x097 /* Missing param from office.com URL parameter */);
66
65
  return value;
67
66
  };
68
67
  contents = {
@@ -77,8 +76,8 @@ class FluidAppOdspUrlResolver {
77
76
  if (!contents) {
78
77
  return undefined;
79
78
  }
80
- const urlToBeResolved = (0, odsp_driver_1.createOdspUrl)({ ...contents, dataStorePath: "" });
81
- const odspDriverUrlResolver = new odsp_driver_1.OdspDriverUrlResolver();
79
+ const urlToBeResolved = (0, internal_2.createOdspUrl)({ ...contents, dataStorePath: "" });
80
+ const odspDriverUrlResolver = new internal_2.OdspDriverUrlResolver();
82
81
  return odspDriverUrlResolver.resolve({ url: urlToBeResolved });
83
82
  }
84
83
  // TODO: Issue-2109 Implement detach container api or put appropriate comment.
@@ -1 +1 @@
1
- {"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tIContainerPackageInfo,\n\tIResolvedUrl,\n\tIUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tcreateOdspUrl,\n\tOdspDriverUrlResolver,\n\tisSpoUrl,\n\tisOdcUrl,\n\tgetOdspUrlParts,\n} from \"@fluidframework/odsp-driver\";\nimport { fromBase64ToUtf8 } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions\";\n\nconst fluidOfficeAndOneNoteServers = new Set([\n\t\"dev.fluidpreview.office.net\",\n\t\"fluidpreview.office.net\",\n\t\"www.onenote.com\",\n]);\n\n/**\n * @internal\n */\nexport class OdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tif (isOdspUrl(request.url)) {\n\t\t\tconst reqUrl = new URL(request.url);\n\t\t\tconst contents = await getOdspUrlParts(reqUrl);\n\t\t\tif (!contents) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\t\treturn odspDriverUrlResolver.resolve({\n\t\t\t\turl: urlToBeResolved,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\n/**\n * Returns true if the given string is a valid SPO/ODB or ODC URL.\n *\n * @internal\n */\nexport const isOdspUrl = (url: string): boolean => {\n\treturn isSpoUrl(url) || isOdcUrl(url);\n};\n\n/**\n * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.\n * @internal\n */\nexport class FluidAppOdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\t\tlet contents: IOdspUrlParts | undefined;\n\t\tif (fluidOfficeAndOneNoteServers.has(server)) {\n\t\t\tcontents = await initializeFluidOfficeOrOneNote(reqUrl);\n\t\t} else if (server === \"www.office.com\") {\n\t\t\tconst getRequiredParam = (name: string): string => {\n\t\t\t\tconst value = reqUrl.searchParams.get(name);\n\t\t\t\tassert(!!value, 0x097 /* Missing param from office.com URL parameter */);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tcontents = {\n\t\t\t\tdriveId: getRequiredParam(\"drive\"),\n\t\t\t\titemId: getRequiredParam(\"item\"),\n\t\t\t\tsiteUrl: getRequiredParam(\"siteUrl\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!contents) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\treturn odspDriverUrlResolver.resolve({ url: urlToBeResolved });\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async getAbsoluteUrl(\n\t\tresolvedUrl: IResolvedUrl,\n\t\trelativeUrl: string,\n\t\tpackageInfoSource?: IContainerPackageInfo,\n\t): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\nasync function initializeFluidOfficeOrOneNote(urlSource: URL): Promise<IOdspUrlParts | undefined> {\n\tconst pathname = urlSource.pathname;\n\tconst siteDriveItemMatch = pathname.match(\n\t\t/\\/(p|preview|meetingnotes|notes)\\/([^/]*)\\/([^/]*)\\/([^/]*)/,\n\t);\n\tif (siteDriveItemMatch === null) {\n\t\treturn undefined;\n\t}\n\n\tconst site = decodeURIComponent(siteDriveItemMatch[2]);\n\n\t// Path value is base64 encoded so need to decode first\n\tconst decodedSite = fromBase64ToUtf8(site);\n\n\t// Site value includes storage type\n\tconst storageType = decodedSite.split(\":\")[0];\n\tconst expectedStorageType = \"spo\"; // Only support spo for now\n\tif (storageType !== expectedStorageType) {\n\t\tthrow new Error(`Unexpected storage type ${storageType}, expected: ${expectedStorageType}`);\n\t}\n\n\t// Since we have the drive and item, only take the host ignore the rest\n\tconst siteUrl = decodedSite.slice(Math.max(0, storageType.length + 1));\n\tconst driveId = decodeURIComponent(siteDriveItemMatch[3]);\n\tconst itemId = decodeURIComponent(siteDriveItemMatch[4]);\n\treturn { siteUrl, driveId, itemId };\n}\n"]}
1
+ {"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAgE;AAEhE,kEAA6D;AAM7D,mEAM8C;AAG9C,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,6BAA6B;IAC7B,yBAAyB;IACzB,iBAAiB;CACjB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAa,eAAe;IACpB,KAAK,CAAC,OAAO,CAAC,OAAiB;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;YACtB,MAAM,QAAQ,GAAG,MAAM,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;gBACd,OAAO,SAAS,CAAC;aACjB;YACD,MAAM,eAAe,GAAG,IAAA,wBAAa,EAAC,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1E,MAAM,qBAAqB,GAAiB,IAAI,gCAAqB,EAAE,CAAC;YACxE,OAAO,qBAAqB,CAAC,OAAO,CAAC;gBACpC,GAAG,EAAE,eAAe;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;aACxB,CAAC,CAAC;SACH;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,WAAyB,EAAE,WAAmB;QACzE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD;AArBD,0CAqBC;AAED;;;;GAIG;AACH,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAW,EAAE;IACvC,OAAO,IAAA,mBAAQ,EAAC,GAAG,CAAC,IAAI,IAAA,mBAAQ,EAAC,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAa,uBAAuB;IAC5B,KAAK,CAAC,OAAO,CAAC,OAAiB;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,QAAmC,CAAC;QACxC,IAAI,4BAA4B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC7C,QAAQ,GAAG,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM,IAAI,MAAM,KAAK,gBAAgB,EAAE;YACvC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE;gBACjD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAA,iBAAM,EAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACzE,OAAO,KAAK,CAAC;YACd,CAAC,CAAC;YACF,QAAQ,GAAG;gBACV,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;gBAClC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;gBAChC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;aACpC,CAAC;SACF;aAAM;YACN,OAAO,SAAS,CAAC;SACjB;QACD,IAAI,CAAC,QAAQ,EAAE;YACd,OAAO,SAAS,CAAC;SACjB;QACD,MAAM,eAAe,GAAG,IAAA,wBAAa,EAAC,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,qBAAqB,GAAiB,IAAI,gCAAqB,EAAE,CAAC;QACxE,OAAO,qBAAqB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,8EAA8E;IACvE,KAAK,CAAC,cAAc,CAC1B,WAAyB,EACzB,WAAmB,EACnB,iBAAyC;QAEzC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD;AArCD,0DAqCC;AAED,KAAK,UAAU,8BAA8B,CAAC,SAAc;IAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACpC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CACxC,6DAA6D,CAC7D,CAAC;IACF,IAAI,kBAAkB,KAAK,IAAI,EAAE;QAChC,OAAO,SAAS,CAAC;KACjB;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,uDAAuD;IACvD,MAAM,WAAW,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;IAE3C,mCAAmC;IACnC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,2BAA2B;IAC9D,IAAI,WAAW,KAAK,mBAAmB,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,eAAe,mBAAmB,EAAE,CAAC,CAAC;KAC5F;IAED,uEAAuE;IACvE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { fromBase64ToUtf8 } from \"@fluid-internal/client-utils\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIContainerPackageInfo,\n\tIResolvedUrl,\n\tIUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tOdspDriverUrlResolver,\n\tcreateOdspUrl,\n\tgetOdspUrlParts,\n\tisOdcUrl,\n\tisSpoUrl,\n} from \"@fluidframework/odsp-driver/internal\";\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions/internal\";\n\nconst fluidOfficeAndOneNoteServers = new Set([\n\t\"dev.fluidpreview.office.net\",\n\t\"fluidpreview.office.net\",\n\t\"www.onenote.com\",\n]);\n\n/**\n * @internal\n */\nexport class OdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tif (isOdspUrl(reqUrl)) {\n\t\t\tconst contents = await getOdspUrlParts(reqUrl);\n\t\t\tif (!contents) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\t\treturn odspDriverUrlResolver.resolve({\n\t\t\t\turl: urlToBeResolved,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\n/**\n * Returns true if the given string is a valid SPO/ODB or ODC URL.\n *\n * @internal\n */\nconst isOdspUrl = (url: URL): boolean => {\n\treturn isSpoUrl(url) || isOdcUrl(url);\n};\n\n/**\n * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.\n * @internal\n */\nexport class FluidAppOdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\t\tlet contents: IOdspUrlParts | undefined;\n\t\tif (fluidOfficeAndOneNoteServers.has(server)) {\n\t\t\tcontents = await initializeFluidOfficeOrOneNote(reqUrl);\n\t\t} else if (server === \"www.office.com\") {\n\t\t\tconst getRequiredParam = (name: string): string => {\n\t\t\t\tconst value = reqUrl.searchParams.get(name);\n\t\t\t\tassert(!!value, 0x097 /* Missing param from office.com URL parameter */);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tcontents = {\n\t\t\t\tdriveId: getRequiredParam(\"drive\"),\n\t\t\t\titemId: getRequiredParam(\"item\"),\n\t\t\t\tsiteUrl: getRequiredParam(\"siteUrl\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!contents) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\treturn odspDriverUrlResolver.resolve({ url: urlToBeResolved });\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async getAbsoluteUrl(\n\t\tresolvedUrl: IResolvedUrl,\n\t\trelativeUrl: string,\n\t\tpackageInfoSource?: IContainerPackageInfo,\n\t): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\nasync function initializeFluidOfficeOrOneNote(urlSource: URL): Promise<IOdspUrlParts | undefined> {\n\tconst pathname = urlSource.pathname;\n\tconst siteDriveItemMatch = pathname.match(\n\t\t/\\/(p|preview|meetingnotes|notes)\\/([^/]*)\\/([^/]*)\\/([^/]*)/,\n\t);\n\tif (siteDriveItemMatch === null) {\n\t\treturn undefined;\n\t}\n\n\tconst site = decodeURIComponent(siteDriveItemMatch[2]);\n\n\t// Path value is base64 encoded so need to decode first\n\tconst decodedSite = fromBase64ToUtf8(site);\n\n\t// Site value includes storage type\n\tconst storageType = decodedSite.split(\":\")[0];\n\tconst expectedStorageType = \"spo\"; // Only support spo for now\n\tif (storageType !== expectedStorageType) {\n\t\tthrow new Error(`Unexpected storage type ${storageType}, expected: ${expectedStorageType}`);\n\t}\n\n\t// Since we have the drive and item, only take the host ignore the rest\n\tconst siteUrl = decodedSite.slice(Math.max(0, storageType.length + 1));\n\tconst driveId = decodeURIComponent(siteDriveItemMatch[3]);\n\tconst itemId = decodeURIComponent(siteDriveItemMatch[4]);\n\treturn { siteUrl, driveId, itemId };\n}\n"]}
package/internal.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export * from "./lib/index.js";
package/lib/index.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
5
+ export { FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/lib/index.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
5
+ export { FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
6
6
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from \"./urlResolver.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { FluidAppOdspUrlResolver, OdspUrlResolver } from \"./urlResolver.js\";\n"]}
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export {}
12
+
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { IRequest } from "@fluidframework/core-interfaces";
6
- import { IContainerPackageInfo, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
6
+ import { IContainerPackageInfo, IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions/internal";
7
7
  /**
8
8
  * @internal
9
9
  */
@@ -11,12 +11,6 @@ export declare class OdspUrlResolver implements IUrlResolver {
11
11
  resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
12
12
  getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string>;
13
13
  }
14
- /**
15
- * Returns true if the given string is a valid SPO/ODB or ODC URL.
16
- *
17
- * @internal
18
- */
19
- export declare const isOdspUrl: (url: string) => boolean;
20
14
  /**
21
15
  * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.
22
16
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EACN,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAkB5C;;GAEG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAiB7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5F;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,OAEvC,CAAC;AAEF;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA6B7D,cAAc,CAC1B,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,qBAAqB,GACvC,OAAO,CAAC,MAAM,CAAC;CAGlB"}
1
+ {"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EACN,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,MAAM,6CAA6C,CAAC;AAgBrD;;GAEG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAiB7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5F;AAWD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA6B7D,cAAc,CAC1B,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,qBAAqB,GACvC,OAAO,CAAC,MAAM,CAAC;CAGlB"}
@@ -2,9 +2,9 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { createOdspUrl, OdspDriverUrlResolver, isSpoUrl, isOdcUrl, getOdspUrlParts, } from "@fluidframework/odsp-driver";
6
5
  import { fromBase64ToUtf8 } from "@fluid-internal/client-utils";
7
- import { assert } from "@fluidframework/core-utils";
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+ import { OdspDriverUrlResolver, createOdspUrl, getOdspUrlParts, isOdcUrl, isSpoUrl, } from "@fluidframework/odsp-driver/internal";
8
8
  const fluidOfficeAndOneNoteServers = new Set([
9
9
  "dev.fluidpreview.office.net",
10
10
  "fluidpreview.office.net",
@@ -15,8 +15,8 @@ const fluidOfficeAndOneNoteServers = new Set([
15
15
  */
16
16
  export class OdspUrlResolver {
17
17
  async resolve(request) {
18
- if (isOdspUrl(request.url)) {
19
- const reqUrl = new URL(request.url);
18
+ const reqUrl = new URL(request.url);
19
+ if (isOdspUrl(reqUrl)) {
20
20
  const contents = await getOdspUrlParts(reqUrl);
21
21
  if (!contents) {
22
22
  return undefined;
@@ -39,7 +39,7 @@ export class OdspUrlResolver {
39
39
  *
40
40
  * @internal
41
41
  */
42
- export const isOdspUrl = (url) => {
42
+ const isOdspUrl = (url) => {
43
43
  return isSpoUrl(url) || isOdcUrl(url);
44
44
  };
45
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tIContainerPackageInfo,\n\tIResolvedUrl,\n\tIUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tcreateOdspUrl,\n\tOdspDriverUrlResolver,\n\tisSpoUrl,\n\tisOdcUrl,\n\tgetOdspUrlParts,\n} from \"@fluidframework/odsp-driver\";\nimport { fromBase64ToUtf8 } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions\";\n\nconst fluidOfficeAndOneNoteServers = new Set([\n\t\"dev.fluidpreview.office.net\",\n\t\"fluidpreview.office.net\",\n\t\"www.onenote.com\",\n]);\n\n/**\n * @internal\n */\nexport class OdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tif (isOdspUrl(request.url)) {\n\t\t\tconst reqUrl = new URL(request.url);\n\t\t\tconst contents = await getOdspUrlParts(reqUrl);\n\t\t\tif (!contents) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\t\treturn odspDriverUrlResolver.resolve({\n\t\t\t\turl: urlToBeResolved,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\n/**\n * Returns true if the given string is a valid SPO/ODB or ODC URL.\n *\n * @internal\n */\nexport const isOdspUrl = (url: string): boolean => {\n\treturn isSpoUrl(url) || isOdcUrl(url);\n};\n\n/**\n * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.\n * @internal\n */\nexport class FluidAppOdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\t\tlet contents: IOdspUrlParts | undefined;\n\t\tif (fluidOfficeAndOneNoteServers.has(server)) {\n\t\t\tcontents = await initializeFluidOfficeOrOneNote(reqUrl);\n\t\t} else if (server === \"www.office.com\") {\n\t\t\tconst getRequiredParam = (name: string): string => {\n\t\t\t\tconst value = reqUrl.searchParams.get(name);\n\t\t\t\tassert(!!value, 0x097 /* Missing param from office.com URL parameter */);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tcontents = {\n\t\t\t\tdriveId: getRequiredParam(\"drive\"),\n\t\t\t\titemId: getRequiredParam(\"item\"),\n\t\t\t\tsiteUrl: getRequiredParam(\"siteUrl\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!contents) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\treturn odspDriverUrlResolver.resolve({ url: urlToBeResolved });\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async getAbsoluteUrl(\n\t\tresolvedUrl: IResolvedUrl,\n\t\trelativeUrl: string,\n\t\tpackageInfoSource?: IContainerPackageInfo,\n\t): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\nasync function initializeFluidOfficeOrOneNote(urlSource: URL): Promise<IOdspUrlParts | undefined> {\n\tconst pathname = urlSource.pathname;\n\tconst siteDriveItemMatch = pathname.match(\n\t\t/\\/(p|preview|meetingnotes|notes)\\/([^/]*)\\/([^/]*)\\/([^/]*)/,\n\t);\n\tif (siteDriveItemMatch === null) {\n\t\treturn undefined;\n\t}\n\n\tconst site = decodeURIComponent(siteDriveItemMatch[2]);\n\n\t// Path value is base64 encoded so need to decode first\n\tconst decodedSite = fromBase64ToUtf8(site);\n\n\t// Site value includes storage type\n\tconst storageType = decodedSite.split(\":\")[0];\n\tconst expectedStorageType = \"spo\"; // Only support spo for now\n\tif (storageType !== expectedStorageType) {\n\t\tthrow new Error(`Unexpected storage type ${storageType}, expected: ${expectedStorageType}`);\n\t}\n\n\t// Since we have the drive and item, only take the host ignore the rest\n\tconst siteUrl = decodedSite.slice(Math.max(0, storageType.length + 1));\n\tconst driveId = decodeURIComponent(siteDriveItemMatch[3]);\n\tconst itemId = decodeURIComponent(siteDriveItemMatch[4]);\n\treturn { siteUrl, driveId, itemId };\n}\n"]}
1
+ {"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { fromBase64ToUtf8 } from \"@fluid-internal/client-utils\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIContainerPackageInfo,\n\tIResolvedUrl,\n\tIUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tOdspDriverUrlResolver,\n\tcreateOdspUrl,\n\tgetOdspUrlParts,\n\tisOdcUrl,\n\tisSpoUrl,\n} from \"@fluidframework/odsp-driver/internal\";\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions/internal\";\n\nconst fluidOfficeAndOneNoteServers = new Set([\n\t\"dev.fluidpreview.office.net\",\n\t\"fluidpreview.office.net\",\n\t\"www.onenote.com\",\n]);\n\n/**\n * @internal\n */\nexport class OdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tif (isOdspUrl(reqUrl)) {\n\t\t\tconst contents = await getOdspUrlParts(reqUrl);\n\t\t\tif (!contents) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\t\treturn odspDriverUrlResolver.resolve({\n\t\t\t\turl: urlToBeResolved,\n\t\t\t\theaders: request.headers,\n\t\t\t});\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\n/**\n * Returns true if the given string is a valid SPO/ODB or ODC URL.\n *\n * @internal\n */\nconst isOdspUrl = (url: URL): boolean => {\n\treturn isSpoUrl(url) || isOdcUrl(url);\n};\n\n/**\n * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.\n * @internal\n */\nexport class FluidAppOdspUrlResolver implements IUrlResolver {\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tconst reqUrl = new URL(request.url);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\t\tlet contents: IOdspUrlParts | undefined;\n\t\tif (fluidOfficeAndOneNoteServers.has(server)) {\n\t\t\tcontents = await initializeFluidOfficeOrOneNote(reqUrl);\n\t\t} else if (server === \"www.office.com\") {\n\t\t\tconst getRequiredParam = (name: string): string => {\n\t\t\t\tconst value = reqUrl.searchParams.get(name);\n\t\t\t\tassert(!!value, 0x097 /* Missing param from office.com URL parameter */);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tcontents = {\n\t\t\t\tdriveId: getRequiredParam(\"drive\"),\n\t\t\t\titemId: getRequiredParam(\"item\"),\n\t\t\t\tsiteUrl: getRequiredParam(\"siteUrl\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!contents) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst urlToBeResolved = createOdspUrl({ ...contents, dataStorePath: \"\" });\n\t\tconst odspDriverUrlResolver: IUrlResolver = new OdspDriverUrlResolver();\n\t\treturn odspDriverUrlResolver.resolve({ url: urlToBeResolved });\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async getAbsoluteUrl(\n\t\tresolvedUrl: IResolvedUrl,\n\t\trelativeUrl: string,\n\t\tpackageInfoSource?: IContainerPackageInfo,\n\t): Promise<string> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n\nasync function initializeFluidOfficeOrOneNote(urlSource: URL): Promise<IOdspUrlParts | undefined> {\n\tconst pathname = urlSource.pathname;\n\tconst siteDriveItemMatch = pathname.match(\n\t\t/\\/(p|preview|meetingnotes|notes)\\/([^/]*)\\/([^/]*)\\/([^/]*)/,\n\t);\n\tif (siteDriveItemMatch === null) {\n\t\treturn undefined;\n\t}\n\n\tconst site = decodeURIComponent(siteDriveItemMatch[2]);\n\n\t// Path value is base64 encoded so need to decode first\n\tconst decodedSite = fromBase64ToUtf8(site);\n\n\t// Site value includes storage type\n\tconst storageType = decodedSite.split(\":\")[0];\n\tconst expectedStorageType = \"spo\"; // Only support spo for now\n\tif (storageType !== expectedStorageType) {\n\t\tthrow new Error(`Unexpected storage type ${storageType}, expected: ${expectedStorageType}`);\n\t}\n\n\t// Since we have the drive and item, only take the host ignore the rest\n\tconst siteUrl = decodedSite.slice(Math.max(0, storageType.length + 1));\n\tconst driveId = decodeURIComponent(siteDriveItemMatch[3]);\n\tconst itemId = decodeURIComponent(siteDriveItemMatch[4]);\n\treturn { siteUrl, driveId, itemId };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/odsp-urlresolver",
3
- "version": "2.0.0-rc.2.0.1",
3
+ "version": "2.0.0-rc.3.0.0",
4
4
  "description": "Url Resolver for odsp urls.",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -15,21 +15,11 @@
15
15
  "exports": {
16
16
  ".": {
17
17
  "import": {
18
- "types": "./lib/index.d.ts",
19
- "default": "./lib/index.js"
20
- },
21
- "require": {
22
- "types": "./dist/index.d.ts",
23
- "default": "./dist/index.js"
24
- }
25
- },
26
- "./public": {
27
- "import": {
28
- "types": "./lib/odsp-urlresolver-public.d.ts",
18
+ "types": "./lib/public.d.ts",
29
19
  "default": "./lib/index.js"
30
20
  },
31
21
  "require": {
32
- "types": "./dist/odsp-urlresolver-public.d.ts",
22
+ "types": "./dist/public.d.ts",
33
23
  "default": "./dist/index.js"
34
24
  }
35
25
  },
@@ -44,23 +34,24 @@
44
34
  }
45
35
  }
46
36
  },
47
- "main": "dist/index.js",
48
- "types": "dist/index.d.ts",
37
+ "main": "lib/index.js",
38
+ "types": "lib/public.d.ts",
49
39
  "dependencies": {
50
- "@fluid-internal/client-utils": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
51
- "@fluidframework/core-interfaces": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
52
- "@fluidframework/core-utils": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
53
- "@fluidframework/driver-definitions": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
54
- "@fluidframework/odsp-driver": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
55
- "@fluidframework/odsp-driver-definitions": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0"
40
+ "@fluid-internal/client-utils": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
41
+ "@fluidframework/core-interfaces": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
42
+ "@fluidframework/core-utils": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
43
+ "@fluidframework/driver-definitions": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
44
+ "@fluidframework/odsp-driver": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
45
+ "@fluidframework/odsp-driver-definitions": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0"
56
46
  },
57
47
  "devDependencies": {
58
- "@arethetypeswrong/cli": "^0.13.3",
59
- "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.2.0.1 <2.0.0-rc.2.1.0",
60
- "@fluid-tools/build-cli": "^0.34.0",
48
+ "@arethetypeswrong/cli": "^0.15.2",
49
+ "@biomejs/biome": "^1.6.2",
50
+ "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.3.0.0 <2.0.0-rc.3.1.0",
51
+ "@fluid-tools/build-cli": "^0.37.0",
61
52
  "@fluidframework/build-common": "^2.0.3",
62
- "@fluidframework/build-tools": "^0.34.0",
63
- "@fluidframework/eslint-config-fluid": "^4.0.0",
53
+ "@fluidframework/build-tools": "^0.37.0",
54
+ "@fluidframework/eslint-config-fluid": "^5.1.0",
64
55
  "@fluidframework/odsp-urlresolver-previous": "npm:@fluidframework/odsp-urlresolver@2.0.0-internal.8.0.0",
65
56
  "@microsoft/api-extractor": "^7.42.3",
66
57
  "@types/mocha": "^9.1.1",
@@ -76,44 +67,37 @@
76
67
  "rimraf": "^4.4.0",
77
68
  "typescript": "~5.1.6"
78
69
  },
79
- "fluidBuild": {
80
- "tasks": {
81
- "build:docs": {
82
- "dependsOn": [
83
- "...",
84
- "api-extractor:commonjs",
85
- "api-extractor:esnext"
86
- ],
87
- "script": false
70
+ "typeValidation": {
71
+ "broken": {
72
+ "RemovedVariableDeclaration_isOdspUrl": {
73
+ "backCompat": false,
74
+ "forwardCompat": false
88
75
  }
89
76
  }
90
77
  },
91
- "typeValidation": {
92
- "broken": {}
93
- },
94
78
  "scripts": {
95
79
  "api": "fluid-build . --task api",
96
- "api-extractor:commonjs": "api-extractor run --config ./api-extractor-cjs.json",
97
- "api-extractor:esnext": "api-extractor run --local",
80
+ "api-extractor:commonjs": "flub generate entrypoints --outFileAlpha legacy --outDir ./dist",
81
+ "api-extractor:esnext": "flub generate entrypoints --outFileAlpha legacy --outDir ./lib --node10TypeCompat",
98
82
  "build": "fluid-build . --task build",
99
83
  "build:commonjs": "fluid-build . --task commonjs",
100
84
  "build:compile": "fluid-build . --task compile",
101
- "build:docs": "fluid-build . --task api",
85
+ "build:docs": "api-extractor run --local",
102
86
  "build:esnext": "tsc --project ./tsconfig.json",
103
87
  "build:test": "npm run build:test:esm && npm run build:test:cjs",
104
88
  "build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
105
89
  "build:test:esm": "tsc --project ./src/test/tsconfig.json",
106
- "check:are-the-types-wrong": "attw --pack . --entrypoints .",
90
+ "check:are-the-types-wrong": "attw --pack .",
91
+ "check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
107
92
  "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
108
93
  "ci:build:docs": "api-extractor run",
109
- "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
94
+ "clean": "rimraf --glob dist lib \"*.d.ts\" \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
110
95
  "eslint": "eslint --format stylish src",
111
96
  "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
112
- "format": "npm run prettier:fix",
113
- "lint": "npm run prettier && npm run check:release-tags && npm run eslint",
114
- "lint:fix": "npm run prettier:fix && npm run eslint:fix",
115
- "prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
116
- "prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
97
+ "format": "fluid-build --task format .",
98
+ "format:prettier": "prettier --write . --cache --ignore-path ../../../.prettierignore",
99
+ "lint": "fluid-build . --task lint",
100
+ "lint:fix": "fluid-build . --task eslint:fix --task format",
117
101
  "test": "npm run test:mocha",
118
102
  "test:mocha": "npm run test:mocha:esm && echo skipping cjs to avoid overhead - npm run test:mocha:cjs",
119
103
  "test:mocha:cjs": "mocha --recursive \"dist/test/**/*.spec.*js\" --exit -r node_modules/@fluid-internal/mocha-test-setup",
package/src/index.ts CHANGED
@@ -3,4 +3,4 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- export { isOdspUrl, FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
6
+ export { FluidAppOdspUrlResolver, OdspUrlResolver } from "./urlResolver.js";
@@ -3,22 +3,22 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { fromBase64ToUtf8 } from "@fluid-internal/client-utils";
6
7
  import { IRequest } from "@fluidframework/core-interfaces";
8
+ import { assert } from "@fluidframework/core-utils/internal";
7
9
  import {
8
10
  IContainerPackageInfo,
9
11
  IResolvedUrl,
10
12
  IUrlResolver,
11
- } from "@fluidframework/driver-definitions";
13
+ } from "@fluidframework/driver-definitions/internal";
12
14
  import {
13
- createOdspUrl,
14
15
  OdspDriverUrlResolver,
15
- isSpoUrl,
16
- isOdcUrl,
16
+ createOdspUrl,
17
17
  getOdspUrlParts,
18
- } from "@fluidframework/odsp-driver";
19
- import { fromBase64ToUtf8 } from "@fluid-internal/client-utils";
20
- import { assert } from "@fluidframework/core-utils";
21
- import { IOdspUrlParts } from "@fluidframework/odsp-driver-definitions";
18
+ isOdcUrl,
19
+ isSpoUrl,
20
+ } from "@fluidframework/odsp-driver/internal";
21
+ import { IOdspUrlParts } from "@fluidframework/odsp-driver-definitions/internal";
22
22
 
23
23
  const fluidOfficeAndOneNoteServers = new Set([
24
24
  "dev.fluidpreview.office.net",
@@ -31,8 +31,8 @@ const fluidOfficeAndOneNoteServers = new Set([
31
31
  */
32
32
  export class OdspUrlResolver implements IUrlResolver {
33
33
  public async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {
34
- if (isOdspUrl(request.url)) {
35
- const reqUrl = new URL(request.url);
34
+ const reqUrl = new URL(request.url);
35
+ if (isOdspUrl(reqUrl)) {
36
36
  const contents = await getOdspUrlParts(reqUrl);
37
37
  if (!contents) {
38
38
  return undefined;
@@ -57,7 +57,7 @@ export class OdspUrlResolver implements IUrlResolver {
57
57
  *
58
58
  * @internal
59
59
  */
60
- export const isOdspUrl = (url: string): boolean => {
60
+ const isOdspUrl = (url: URL): boolean => {
61
61
  return isSpoUrl(url) || isOdcUrl(url);
62
62
  };
63
63
 
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../../common/build/build-common/api-extractor-base.cjs.primary.json",
4
- // CJS is actually secondary; so, no report.
5
- "apiReport": {
6
- "enabled": false
7
- }
8
- }
@@ -1,12 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: isOdspUrl */
9
-
10
- /* Excluded from this release type: OdspUrlResolver */
11
-
12
- export { }
@@ -1,18 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: IContainerPackageInfo */
9
-
10
- /* Excluded from this release type: IResolvedUrl */
11
-
12
- /* Excluded from this release type: isOdspUrl */
13
-
14
- /* Excluded from this release type: IUrlResolver */
15
-
16
- /* Excluded from this release type: OdspUrlResolver */
17
-
18
- export { }
@@ -1,18 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: IContainerPackageInfo */
9
-
10
- /* Excluded from this release type: IResolvedUrl */
11
-
12
- /* Excluded from this release type: isOdspUrl */
13
-
14
- /* Excluded from this release type: IUrlResolver */
15
-
16
- /* Excluded from this release type: OdspUrlResolver */
17
-
18
- export { }
@@ -1,30 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /**
7
- * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.
8
- * @internal
9
- */
10
- export declare class FluidAppOdspUrlResolver implements IUrlResolver {
11
- resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
12
- getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string, packageInfoSource?: IContainerPackageInfo): Promise<string>;
13
- }
14
-
15
- /**
16
- * Returns true if the given string is a valid SPO/ODB or ODC URL.
17
- *
18
- * @internal
19
- */
20
- export declare const isOdspUrl: (url: string) => boolean;
21
-
22
- /**
23
- * @internal
24
- */
25
- export declare class OdspUrlResolver implements IUrlResolver {
26
- resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
27
- getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string>;
28
- }
29
-
30
- export { }
@@ -1,12 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: isOdspUrl */
9
-
10
- /* Excluded from this release type: OdspUrlResolver */
11
-
12
- export { }
@@ -1,18 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: IContainerPackageInfo */
9
-
10
- /* Excluded from this release type: IResolvedUrl */
11
-
12
- /* Excluded from this release type: isOdspUrl */
13
-
14
- /* Excluded from this release type: IUrlResolver */
15
-
16
- /* Excluded from this release type: OdspUrlResolver */
17
-
18
- export { }
@@ -1,18 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /* Excluded from this release type: FluidAppOdspUrlResolver */
7
-
8
- /* Excluded from this release type: IContainerPackageInfo */
9
-
10
- /* Excluded from this release type: IResolvedUrl */
11
-
12
- /* Excluded from this release type: isOdspUrl */
13
-
14
- /* Excluded from this release type: IUrlResolver */
15
-
16
- /* Excluded from this release type: OdspUrlResolver */
17
-
18
- export { }
@@ -1,30 +0,0 @@
1
- import { IContainerPackageInfo } from '@fluidframework/driver-definitions';
2
- import { IRequest } from '@fluidframework/core-interfaces';
3
- import { IResolvedUrl } from '@fluidframework/driver-definitions';
4
- import { IUrlResolver } from '@fluidframework/driver-definitions';
5
-
6
- /**
7
- * This class helps to resolve Fluid URLs from Office and OneNote. Construct the resolver class and invoke its resolve function to retrieve the content parameters.
8
- * @internal
9
- */
10
- export declare class FluidAppOdspUrlResolver implements IUrlResolver {
11
- resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
12
- getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string, packageInfoSource?: IContainerPackageInfo): Promise<string>;
13
- }
14
-
15
- /**
16
- * Returns true if the given string is a valid SPO/ODB or ODC URL.
17
- *
18
- * @internal
19
- */
20
- export declare const isOdspUrl: (url: string) => boolean;
21
-
22
- /**
23
- * @internal
24
- */
25
- export declare class OdspUrlResolver implements IUrlResolver {
26
- resolve(request: IRequest): Promise<IResolvedUrl | undefined>;
27
- getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string>;
28
- }
29
-
30
- export { }
@@ -1,19 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "node:assert";
6
- import { FluidAppOdspUrlResolver } from "../urlResolver.js";
7
- describe("Fluid App Url Resolver", () => {
8
- it("Should resolve the Fluid app urls correctly", async () => {
9
- const urlResolver = new FluidAppOdspUrlResolver();
10
- const resolved = (await urlResolver.resolve({
11
- url: "https://dev.fluidpreview.office.net/p/c3BvOmh0dHBzOi8vbWljcm9zb2Z0LnNoYXJlcG9pbnQtZGYuY29tL3RlYW1zL09mZmljZU9ubGluZVByYWd1ZQ%3D%3D/randomDrive/randomItem/OXO-Dogfood-remaining-items?nav=&e=_Ha3TtNhQEaX-jy2yOQM3A&at=15&scriptVersion=3016031",
12
- }));
13
- assert.equal(resolved.driveId, "randomDrive", "Drive id does not match");
14
- assert.equal(resolved.itemId, "randomItem", "Item id does not match");
15
- assert.equal(resolved.siteUrl, "https://microsoft.sharepoint-df.com/teams/OfficeOnlinePrague", "Site id does not match");
16
- assert.equal(resolved.endpoints.snapshotStorageUrl, "https://microsoft.sharepoint-df.com/_api/v2.1/drives/randomDrive/items/randomItem/opStream/snapshots", "SnashotStorageUrl does not match");
17
- });
18
- });
19
- //# sourceMappingURL=fluidAppUrlResolver.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fluidAppUrlResolver.spec.js","sourceRoot":"","sources":["../../src/test/fluidAppUrlResolver.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,WAAW,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC;YAC3C,GAAG,EAAE,iPAAiP;SACtP,CAAC,CAAqB,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,OAAO,EAChB,8DAA8D,EAC9D,wBAAwB,CACxB,CAAC;QACF,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EACrC,sGAAsG,EACtG,kCAAkC,CAClC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\nimport { IOdspResolvedUrl } from \"@fluidframework/odsp-driver-definitions\";\nimport { FluidAppOdspUrlResolver } from \"../urlResolver.js\";\n\ndescribe(\"Fluid App Url Resolver\", () => {\n\tit(\"Should resolve the Fluid app urls correctly\", async () => {\n\t\tconst urlResolver = new FluidAppOdspUrlResolver();\n\t\tconst resolved = (await urlResolver.resolve({\n\t\t\turl: \"https://dev.fluidpreview.office.net/p/c3BvOmh0dHBzOi8vbWljcm9zb2Z0LnNoYXJlcG9pbnQtZGYuY29tL3RlYW1zL09mZmljZU9ubGluZVByYWd1ZQ%3D%3D/randomDrive/randomItem/OXO-Dogfood-remaining-items?nav=&e=_Ha3TtNhQEaX-jy2yOQM3A&at=15&scriptVersion=3016031\",\n\t\t})) as IOdspResolvedUrl;\n\t\tassert.equal(resolved.driveId, \"randomDrive\", \"Drive id does not match\");\n\t\tassert.equal(resolved.itemId, \"randomItem\", \"Item id does not match\");\n\t\tassert.equal(\n\t\t\tresolved.siteUrl,\n\t\t\t\"https://microsoft.sharepoint-df.com/teams/OfficeOnlinePrague\",\n\t\t\t\"Site id does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.endpoints.snapshotStorageUrl,\n\t\t\t\"https://microsoft.sharepoint-df.com/_api/v2.1/drives/randomDrive/items/randomItem/opStream/snapshots\",\n\t\t\t\"SnashotStorageUrl does not match\",\n\t\t);\n\t});\n});\n"]}
@@ -1,29 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "node:assert";
6
- import { OdspUrlResolver } from "../urlResolver.js";
7
- describe("Spo Url Resolver", () => {
8
- it("Should resolve the spo urls correctly", async () => {
9
- const urlResolver = new OdspUrlResolver();
10
- const url = "https://microsoft-my.sharepoint-df.com/_api/v2.1/drives/randomDrive/items/randomItem";
11
- const resolved = (await urlResolver.resolve({ url }));
12
- assert.equal(resolved.driveId, "randomDrive", "Drive id does not match");
13
- assert.equal(resolved.itemId, "randomItem", "Item id does not match");
14
- assert.equal(resolved.siteUrl, url, "Site id does not match");
15
- assert.equal(resolved.endpoints.snapshotStorageUrl, `${url}/opStream/snapshots`, "SnashotStorageUrl does not match");
16
- assert.equal(resolved.url, `https://placeholder/placeholder/${resolved.hashedDocumentId}/`, "fluid url does not match");
17
- });
18
- it("Should resolve the other tenant spo url correctly", async () => {
19
- const urlResolver = new OdspUrlResolver();
20
- const url = "https://random.sharepoint.com/_api/v2.1/drives/randomDrive/items/randomItem";
21
- const resolved = (await urlResolver.resolve({ url }));
22
- assert.equal(resolved.driveId, "randomDrive", "Drive id does not match");
23
- assert.equal(resolved.itemId, "randomItem", "Item id does not match");
24
- assert.equal(resolved.siteUrl, url, "Site id does not match");
25
- assert.equal(resolved.endpoints.snapshotStorageUrl, `${url}/opStream/snapshots`, "SnashotStorageUrl does not match");
26
- assert.equal(resolved.url, `https://placeholder/placeholder/${resolved.hashedDocumentId}/`, "fluid url does not match");
27
- });
28
- });
29
- //# sourceMappingURL=spoUrlResolver.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spoUrlResolver.spec.js","sourceRoot":"","sources":["../../src/test/spoUrlResolver.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,MAAM,GAAG,GACR,sFAAsF,CAAC;QACxF,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAqB,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EACrC,GAAG,GAAG,qBAAqB,EAC3B,kCAAkC,CAClC,CAAC;QACF,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,GAAG,EACZ,mCAAmC,QAAQ,CAAC,gBAAgB,GAAG,EAC/D,0BAA0B,CAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,MAAM,GAAG,GACR,6EAA6E,CAAC;QAC/E,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAqB,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EACrC,GAAG,GAAG,qBAAqB,EAC3B,kCAAkC,CAClC,CAAC;QACF,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,GAAG,EACZ,mCAAmC,QAAQ,CAAC,gBAAgB,GAAG,EAC/D,0BAA0B,CAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\nimport { IOdspResolvedUrl } from \"@fluidframework/odsp-driver-definitions\";\nimport { OdspUrlResolver } from \"../urlResolver.js\";\n\ndescribe(\"Spo Url Resolver\", () => {\n\tit(\"Should resolve the spo urls correctly\", async () => {\n\t\tconst urlResolver = new OdspUrlResolver();\n\t\tconst url: string =\n\t\t\t\"https://microsoft-my.sharepoint-df.com/_api/v2.1/drives/randomDrive/items/randomItem\";\n\t\tconst resolved = (await urlResolver.resolve({ url })) as IOdspResolvedUrl;\n\t\tassert.equal(resolved.driveId, \"randomDrive\", \"Drive id does not match\");\n\t\tassert.equal(resolved.itemId, \"randomItem\", \"Item id does not match\");\n\t\tassert.equal(resolved.siteUrl, url, \"Site id does not match\");\n\t\tassert.equal(\n\t\t\tresolved.endpoints.snapshotStorageUrl,\n\t\t\t`${url}/opStream/snapshots`,\n\t\t\t\"SnashotStorageUrl does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.url,\n\t\t\t`https://placeholder/placeholder/${resolved.hashedDocumentId}/`,\n\t\t\t\"fluid url does not match\",\n\t\t);\n\t});\n\n\tit(\"Should resolve the other tenant spo url correctly\", async () => {\n\t\tconst urlResolver = new OdspUrlResolver();\n\t\tconst url: string =\n\t\t\t\"https://random.sharepoint.com/_api/v2.1/drives/randomDrive/items/randomItem\";\n\t\tconst resolved = (await urlResolver.resolve({ url })) as IOdspResolvedUrl;\n\t\tassert.equal(resolved.driveId, \"randomDrive\", \"Drive id does not match\");\n\t\tassert.equal(resolved.itemId, \"randomItem\", \"Item id does not match\");\n\t\tassert.equal(resolved.siteUrl, url, \"Site id does not match\");\n\t\tassert.equal(\n\t\t\tresolved.endpoints.snapshotStorageUrl,\n\t\t\t`${url}/opStream/snapshots`,\n\t\t\t\"SnashotStorageUrl does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.url,\n\t\t\t`https://placeholder/placeholder/${resolved.hashedDocumentId}/`,\n\t\t\t\"fluid url does not match\",\n\t\t);\n\t});\n});\n"]}
@@ -1,6 +0,0 @@
1
- use_current_ClassDeclaration_OdspUrlResolver(get_old_ClassDeclaration_OdspUrlResolver());
2
- use_old_ClassDeclaration_OdspUrlResolver(get_current_ClassDeclaration_OdspUrlResolver());
3
- use_current_VariableDeclaration_isOdspUrl(get_old_VariableDeclaration_isOdspUrl());
4
- use_old_VariableDeclaration_isOdspUrl(get_current_VariableDeclaration_isOdspUrl());
5
- export {};
6
- //# sourceMappingURL=validateOdspUrlresolverPrevious.generated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateOdspUrlresolverPrevious.generated.js","sourceRoot":"","sources":["../../../src/test/types/validateOdspUrlresolverPrevious.generated.ts"],"names":[],"mappings":"AAgCA,4CAA4C,CACxC,wCAAwC,EAAE,CAAC,CAAC;AAWhD,wCAAwC,CACpC,4CAA4C,EAAE,CAAC,CAAC;AAWpD,yCAAyC,CACrC,qCAAqC,EAAE,CAAC,CAAC;AAW7C,qCAAqC,CACjC,yCAAyC,EAAE,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/*\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n * Generated by fluid-type-test-generator in @fluidframework/build-tools.\n */\nimport type * as old from \"@fluidframework/odsp-urlresolver-previous\";\nimport type * as current from \"../../index.js\";\n\n\n// See 'build-tools/src/type-test-generator/compatibility.ts' for more information.\ntype TypeOnly<T> = T extends number\n\t? number\n\t: T extends string\n\t? string\n\t: T extends boolean | bigint | symbol\n\t? T\n\t: {\n\t\t\t[P in keyof T]: TypeOnly<T[P]>;\n\t };\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_OdspUrlResolver\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_OdspUrlResolver():\n TypeOnly<old.OdspUrlResolver>;\ndeclare function use_current_ClassDeclaration_OdspUrlResolver(\n use: TypeOnly<current.OdspUrlResolver>): void;\nuse_current_ClassDeclaration_OdspUrlResolver(\n get_old_ClassDeclaration_OdspUrlResolver());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_OdspUrlResolver\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_OdspUrlResolver():\n TypeOnly<current.OdspUrlResolver>;\ndeclare function use_old_ClassDeclaration_OdspUrlResolver(\n use: TypeOnly<old.OdspUrlResolver>): void;\nuse_old_ClassDeclaration_OdspUrlResolver(\n get_current_ClassDeclaration_OdspUrlResolver());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"VariableDeclaration_isOdspUrl\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_VariableDeclaration_isOdspUrl():\n TypeOnly<typeof old.isOdspUrl>;\ndeclare function use_current_VariableDeclaration_isOdspUrl(\n use: TypeOnly<typeof current.isOdspUrl>): void;\nuse_current_VariableDeclaration_isOdspUrl(\n get_old_VariableDeclaration_isOdspUrl());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"VariableDeclaration_isOdspUrl\": {\"backCompat\": false}\n*/\ndeclare function get_current_VariableDeclaration_isOdspUrl():\n TypeOnly<typeof current.isOdspUrl>;\ndeclare function use_old_VariableDeclaration_isOdspUrl(\n use: TypeOnly<typeof old.isOdspUrl>): void;\nuse_old_VariableDeclaration_isOdspUrl(\n get_current_VariableDeclaration_isOdspUrl());\n"]}
File without changes