next-tinacms-azure 1.0.7 → 1.0.9
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.
- package/dist/auth.js +1 -1
- package/dist/delivery-handlers.js +7 -11
- package/dist/handlers.js +7 -11
- package/dist/index.js +3 -4
- package/dist/index.mjs +3 -4
- package/package.json +5 -5
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/auth.js
CHANGED
|
@@ -697,7 +697,7 @@ var require_headers = __commonJS({
|
|
|
697
697
|
}
|
|
698
698
|
const lowercased = prop.toLowerCase();
|
|
699
699
|
const original = Object.keys(headers2).find((o) => o.toLowerCase() === lowercased);
|
|
700
|
-
return _reflect.ReflectAdapter.set(target, original
|
|
700
|
+
return _reflect.ReflectAdapter.set(target, original ?? prop, value, receiver);
|
|
701
701
|
},
|
|
702
702
|
has(target, prop) {
|
|
703
703
|
if (typeof prop === "symbol") return _reflect.ReflectAdapter.has(target, prop);
|
|
@@ -412,14 +412,13 @@ var require_next_url = __commonJS({
|
|
|
412
412
|
options = opts || baseOrOpts || {};
|
|
413
413
|
}
|
|
414
414
|
this[Internal] = {
|
|
415
|
-
url: parseURL(input, base
|
|
415
|
+
url: parseURL(input, base ?? options.base),
|
|
416
416
|
options,
|
|
417
417
|
basePath: ""
|
|
418
418
|
};
|
|
419
419
|
this.analyze();
|
|
420
420
|
}
|
|
421
421
|
analyze() {
|
|
422
|
-
var _a, _b;
|
|
423
422
|
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1;
|
|
424
423
|
const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, {
|
|
425
424
|
nextConfig: this[Internal].options.nextConfig,
|
|
@@ -431,9 +430,9 @@ var require_next_url = __commonJS({
|
|
|
431
430
|
const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale);
|
|
432
431
|
this[Internal].url.pathname = info.pathname;
|
|
433
432
|
this[Internal].defaultLocale = defaultLocale;
|
|
434
|
-
this[Internal].basePath =
|
|
433
|
+
this[Internal].basePath = info.basePath ?? "";
|
|
435
434
|
this[Internal].buildId = info.buildId;
|
|
436
|
-
this[Internal].locale =
|
|
435
|
+
this[Internal].locale = info.locale ?? defaultLocale;
|
|
437
436
|
this[Internal].trailingSlash = info.trailingSlash;
|
|
438
437
|
}
|
|
439
438
|
formatPathname() {
|
|
@@ -456,8 +455,7 @@ var require_next_url = __commonJS({
|
|
|
456
455
|
this[Internal].buildId = buildId;
|
|
457
456
|
}
|
|
458
457
|
get locale() {
|
|
459
|
-
|
|
460
|
-
return (_a = this[Internal].locale) != null ? _a : "";
|
|
458
|
+
return this[Internal].locale ?? "";
|
|
461
459
|
}
|
|
462
460
|
set locale(locale) {
|
|
463
461
|
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig;
|
|
@@ -1332,8 +1330,7 @@ var require_response = __commonJS({
|
|
|
1332
1330
|
return new _NextResponse(response.body, response);
|
|
1333
1331
|
}
|
|
1334
1332
|
static redirect(url, init) {
|
|
1335
|
-
|
|
1336
|
-
const status = typeof init === "number" ? init : (_a = init == null ? void 0 : init.status) != null ? _a : 307;
|
|
1333
|
+
const status = typeof init === "number" ? init : (init == null ? void 0 : init.status) ?? 307;
|
|
1337
1334
|
if (!REDIRECTS.has(status)) {
|
|
1338
1335
|
throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');
|
|
1339
1336
|
}
|
|
@@ -1717,7 +1714,6 @@ var SUPPORTED_IMAGE_TYPES = [
|
|
|
1717
1714
|
var createMediaDeliveryHandlers = (config) => {
|
|
1718
1715
|
return {
|
|
1719
1716
|
async GET(req, context) {
|
|
1720
|
-
var _a, _b;
|
|
1721
1717
|
try {
|
|
1722
1718
|
const accountNameMatch = /AccountName=([^;]+)/.exec(
|
|
1723
1719
|
config.connectionString
|
|
@@ -1806,10 +1802,10 @@ var createMediaDeliveryHandlers = (config) => {
|
|
|
1806
1802
|
}
|
|
1807
1803
|
let outputFormat = "jpeg";
|
|
1808
1804
|
let outputContentType = "image/jpeg";
|
|
1809
|
-
if (format === "webp" || format === "auto" &&
|
|
1805
|
+
if (format === "webp" || format === "auto" && req.headers.get("accept")?.includes("image/webp")) {
|
|
1810
1806
|
outputFormat = "webp";
|
|
1811
1807
|
outputContentType = "image/webp";
|
|
1812
|
-
} else if (format === "avif" || format === "auto" &&
|
|
1808
|
+
} else if (format === "avif" || format === "auto" && req.headers.get("accept")?.includes("image/avif")) {
|
|
1813
1809
|
outputFormat = "avif";
|
|
1814
1810
|
outputContentType = "image/avif";
|
|
1815
1811
|
}
|
package/dist/handlers.js
CHANGED
|
@@ -412,14 +412,13 @@ var require_next_url = __commonJS({
|
|
|
412
412
|
options = opts || baseOrOpts || {};
|
|
413
413
|
}
|
|
414
414
|
this[Internal] = {
|
|
415
|
-
url: parseURL(input, base
|
|
415
|
+
url: parseURL(input, base ?? options.base),
|
|
416
416
|
options,
|
|
417
417
|
basePath: ""
|
|
418
418
|
};
|
|
419
419
|
this.analyze();
|
|
420
420
|
}
|
|
421
421
|
analyze() {
|
|
422
|
-
var _a, _b;
|
|
423
422
|
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1;
|
|
424
423
|
const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, {
|
|
425
424
|
nextConfig: this[Internal].options.nextConfig,
|
|
@@ -431,9 +430,9 @@ var require_next_url = __commonJS({
|
|
|
431
430
|
const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale);
|
|
432
431
|
this[Internal].url.pathname = info.pathname;
|
|
433
432
|
this[Internal].defaultLocale = defaultLocale;
|
|
434
|
-
this[Internal].basePath =
|
|
433
|
+
this[Internal].basePath = info.basePath ?? "";
|
|
435
434
|
this[Internal].buildId = info.buildId;
|
|
436
|
-
this[Internal].locale =
|
|
435
|
+
this[Internal].locale = info.locale ?? defaultLocale;
|
|
437
436
|
this[Internal].trailingSlash = info.trailingSlash;
|
|
438
437
|
}
|
|
439
438
|
formatPathname() {
|
|
@@ -456,8 +455,7 @@ var require_next_url = __commonJS({
|
|
|
456
455
|
this[Internal].buildId = buildId;
|
|
457
456
|
}
|
|
458
457
|
get locale() {
|
|
459
|
-
|
|
460
|
-
return (_a = this[Internal].locale) != null ? _a : "";
|
|
458
|
+
return this[Internal].locale ?? "";
|
|
461
459
|
}
|
|
462
460
|
set locale(locale) {
|
|
463
461
|
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig;
|
|
@@ -1332,8 +1330,7 @@ var require_response = __commonJS({
|
|
|
1332
1330
|
return new _NextResponse(response.body, response);
|
|
1333
1331
|
}
|
|
1334
1332
|
static redirect(url, init) {
|
|
1335
|
-
|
|
1336
|
-
const status = typeof init === "number" ? init : (_a = init == null ? void 0 : init.status) != null ? _a : 307;
|
|
1333
|
+
const status = typeof init === "number" ? init : (init == null ? void 0 : init.status) ?? 307;
|
|
1337
1334
|
if (!REDIRECTS.has(status)) {
|
|
1338
1335
|
throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');
|
|
1339
1336
|
}
|
|
@@ -1705,7 +1702,7 @@ __export(handlers_exports, {
|
|
|
1705
1702
|
});
|
|
1706
1703
|
module.exports = __toCommonJS(handlers_exports);
|
|
1707
1704
|
var import_storage_blob = require("@azure/storage-blob");
|
|
1708
|
-
var import_node_path = __toESM(require("path"));
|
|
1705
|
+
var import_node_path = __toESM(require("node:path"));
|
|
1709
1706
|
var import_server = __toESM(require_server());
|
|
1710
1707
|
var createMediaHandlers = (config) => {
|
|
1711
1708
|
function withAuth(handler) {
|
|
@@ -1773,7 +1770,6 @@ async function deleteAsset(_, context, config) {
|
|
|
1773
1770
|
});
|
|
1774
1771
|
}
|
|
1775
1772
|
async function listMedia(req, config) {
|
|
1776
|
-
var _a;
|
|
1777
1773
|
try {
|
|
1778
1774
|
const client = import_storage_blob.BlobServiceClient.fromConnectionString(
|
|
1779
1775
|
config.connectionString
|
|
@@ -1786,7 +1782,7 @@ async function listMedia(req, config) {
|
|
|
1786
1782
|
filesOnly: req.nextUrl.searchParams.get("filesOnly") === "true" || false
|
|
1787
1783
|
};
|
|
1788
1784
|
const useRootDirectory = !mediaListOptions.directory || mediaListOptions.directory === "/" || mediaListOptions.directory === '""';
|
|
1789
|
-
const prefix = useRootDirectory ? "" :
|
|
1785
|
+
const prefix = useRootDirectory ? "" : mediaListOptions.directory?.endsWith("/") ? mediaListOptions.directory : `${mediaListOptions.directory}/`;
|
|
1790
1786
|
const files = [];
|
|
1791
1787
|
const folders = [];
|
|
1792
1788
|
for await (const blob of containerClient.listBlobsByHierarchy("/", {
|
package/dist/index.js
CHANGED
|
@@ -118,9 +118,9 @@
|
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
120
|
buildQuery(options) {
|
|
121
|
-
const params = Object.
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
const params = Object.entries(options).filter(([_, value]) => value !== "" && value !== void 0).map(([key, value]) => {
|
|
122
|
+
return typeof value === "object" ? `${key}=${encodeURIComponent(JSON.stringify(value))}` : `${key}=${encodeURIComponent(String(value))}`;
|
|
123
|
+
}).join("&");
|
|
124
124
|
return `?${params}`;
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -147,4 +147,3 @@
|
|
|
147
147
|
exports2.createTinaCloudAzureMediaStore = createTinaCloudAzureMediaStore;
|
|
148
148
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
149
149
|
});
|
|
150
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -115,9 +115,9 @@ class AzureMediaStore {
|
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
buildQuery(options) {
|
|
118
|
-
const params = Object.
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
const params = Object.entries(options).filter(([_, value]) => value !== "" && value !== void 0).map(([key, value]) => {
|
|
119
|
+
return typeof value === "object" ? `${key}=${encodeURIComponent(JSON.stringify(value))}` : `${key}=${encodeURIComponent(String(value))}`;
|
|
120
|
+
}).join("&");
|
|
121
121
|
return `?${params}`;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -144,4 +144,3 @@ export {
|
|
|
144
144
|
TinaCloudAzureMediaStore,
|
|
145
145
|
createTinaCloudAzureMediaStore
|
|
146
146
|
};
|
|
147
|
-
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-tinacms-azure",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -38,12 +38,12 @@
|
|
|
38
38
|
"react": "^18.3.1",
|
|
39
39
|
"react-dom": "^18.3.1",
|
|
40
40
|
"typescript": "^5.7.3",
|
|
41
|
-
"@tinacms/scripts": "1.3.
|
|
42
|
-
"tinacms": "2.7.
|
|
41
|
+
"@tinacms/scripts": "1.3.5",
|
|
42
|
+
"tinacms": "2.7.9"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"tinacms": "
|
|
46
|
-
"
|
|
45
|
+
"@tinacms/auth": "1.0.12",
|
|
46
|
+
"tinacms": "2.7.9"
|
|
47
47
|
},
|
|
48
48
|
"publishConfig": {
|
|
49
49
|
"registry": "https://registry.npmjs.org"
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/errors.ts","../src/azure-media-store.ts","../src/azure-tina-cloud-media-store.ts"],"sourcesContent":["/**\n\n*/\n\ninterface MediaListErrorConfig {\n title: string;\n message: string;\n docsLink: string;\n}\n\nclass MediaListError extends Error {\n public ERR_TYPE = 'MediaListError';\n public title: string;\n public docsLink: string;\n\n constructor(config: MediaListErrorConfig) {\n super(config.message);\n this.title = config.title;\n this.docsLink = config.docsLink;\n }\n}\n\nexport const E_DEFAULT = new MediaListError({\n title: 'An Error Occurred',\n message: 'Something went wrong fetching your media from Azure Blob Storage.',\n docsLink: 'https://tina.io/docs/reference/media/external/azure',\n});\n\nexport const E_UNAUTHORIZED = new MediaListError({\n title: 'Unauthorized',\n message: \"You don't have access to this resource.\",\n docsLink:\n 'https://tina.io/docs/reference/media/external/cloudinary/#set-up-api-routes-nextjs-example',\n});\n\nexport const E_CONFIG = new MediaListError({\n title: 'Missing Credentials',\n message:\n 'Unable to connect to Cloudinary because one or more environment variables are missing.',\n docsLink: 'https://tina.io/docs/media-cloudinary/',\n});\n\nexport const E_KEY_FAIL = new MediaListError({\n title: 'Bad Credentials',\n message:\n 'Unable to connect to Cloudinary because one or more environment variables are misconfigured.',\n docsLink: 'https://tina.io/docs/media-cloudinary/',\n});\n\nexport const E_BAD_ROUTE = new MediaListError({\n title: 'Bad Route',\n message: 'The Cloudinary API route is missing or misconfigured.',\n docsLink:\n 'https://tina.io/docs/reference/media/external/cloudinary/#set-up-api-routes-nextjs-example',\n});\n\nexport const interpretErrorMessage = (message: string) => {\n switch (message) {\n case 'Must supply cloud_name':\n case 'Must supply api_key':\n case 'Must supply api_secret':\n return E_CONFIG;\n case 'unknown api_key':\n return E_KEY_FAIL;\n default:\n return E_DEFAULT;\n }\n};\n","import type {\n Media,\n MediaList,\n MediaListOptions,\n MediaStore,\n MediaUploadOptions,\n} from 'tinacms';\nimport { DEFAULT_MEDIA_UPLOAD_TYPES } from 'tinacms';\nimport { E_UNAUTHORIZED, E_BAD_ROUTE, interpretErrorMessage } from './errors';\n\nexport type AzureMediaStoreOptions = {\n baseUrl?: string;\n};\n\nexport class AzureMediaStore implements MediaStore {\n baseUrl: string;\n constructor(options?: AzureMediaStoreOptions) {\n this.baseUrl = options?.baseUrl || '/api/azure/media';\n }\n fetchFunction = (input: RequestInfo, init?: RequestInit) =>\n fetch(input, init);\n\n accept = DEFAULT_MEDIA_UPLOAD_TYPES;\n\n async persist(media: MediaUploadOptions[]): Promise<Media[]> {\n const newFiles: Media[] = [];\n\n for (const item of media) {\n const { file, directory } = item;\n const formData = new FormData();\n formData.append('file', file);\n formData.append('directory', directory);\n formData.append('filename', file.name);\n\n const res = await this.fetchFunction(this.baseUrl, {\n method: 'POST',\n body: formData,\n });\n\n if (res.status !== 200) {\n const responseData = await res.json();\n throw new Error(responseData.message);\n }\n const fileRes = await res.json();\n\n const parsedRes: Media = {\n type: 'file',\n id: fileRes.name,\n filename: fileRes.filename,\n directory: '/',\n thumbnails: {\n '75x75': fileRes.url,\n '400x400': fileRes.url,\n '1000x1000': fileRes.url,\n },\n src: fileRes.url,\n };\n\n newFiles.push(parsedRes);\n }\n return newFiles;\n }\n async delete(media: Media) {\n await this.fetchFunction(\n `${this.baseUrl}/${encodeURIComponent(media.id)}`,\n {\n method: 'DELETE',\n }\n );\n }\n async list(options: MediaListOptions): Promise<MediaList> {\n const query = this.buildQuery(options);\n const response = await this.fetchFunction(this.baseUrl + query);\n\n if (response.status === 401) {\n throw E_UNAUTHORIZED;\n }\n if (response.status === 404) {\n throw E_BAD_ROUTE;\n }\n if (response.status >= 500) {\n const { e } = await response.json();\n const error = interpretErrorMessage(e);\n throw error;\n }\n const { items, offset } = await response.json();\n return {\n items: items.map((item) => item),\n nextOffset: offset,\n };\n }\n\n parse = (img: Media) => {\n return img.src;\n };\n\n buildQuery(options: MediaListOptions) {\n const params = Object.keys(options)\n .filter(\n (key) =>\n options[key as keyof MediaListOptions] !== '' &&\n options[key as keyof MediaListOptions] !== undefined\n )\n .map((key) => `${key}=${options[key as keyof MediaListOptions]}`)\n .join('&');\n\n return `?${params}`;\n }\n}\n","import type { Client } from 'tinacms';\nimport type { AzureMediaStoreOptions } from './azure-media-store';\nimport { AzureMediaStore } from './azure-media-store';\n\nexport const createTinaCloudAzureMediaStore = (\n options: AzureMediaStoreOptions = { baseUrl: '/api/azure/media' }\n) =>\n class TinaCloudAzureMediaStore extends AzureMediaStore {\n client: Client;\n constructor(client: Client) {\n super(options);\n this.client = client;\n this.fetchFunction = async (input: RequestInfo, init?: RequestInit) => {\n try {\n const url = input.toString();\n const query = `${url.includes('?') ? '&' : '?'}clientID=${\n client.clientId\n }`;\n\n const res = client.authProvider.fetchWithToken(url + query, init);\n return res;\n } catch (error) {\n console.error(error);\n return new Response(null, { status: 500 });\n }\n };\n }\n };\n\nexport const TinaCloudAzureMediaStore = createTinaCloudAzureMediaStore();\n"],"names":["DEFAULT_MEDIA_UPLOAD_TYPES"],"mappings":";;;;EAUA,MAAM,uBAAuB,MAAM;AAAA,IAKjC,YAAY,QAA8B;AACxC,YAAM,OAAO,OAAO;AALtB,WAAO,WAAW;AAMhB,WAAK,QAAQ,OAAO;AACpB,WAAK,WAAW,OAAO;AAAA,IACzB;AAAA,EACF;AAEa,QAAA,YAAY,IAAI,eAAe;AAAA,IAC1C,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,CAAC;AAEY,QAAA,iBAAiB,IAAI,eAAe;AAAA,IAC/C,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UACE;AAAA,EACJ,CAAC;AAEY,QAAA,WAAW,IAAI,eAAe;AAAA,IACzC,OAAO;AAAA,IACP,SACE;AAAA,IACF,UAAU;AAAA,EACZ,CAAC;AAEY,QAAA,aAAa,IAAI,eAAe;AAAA,IAC3C,OAAO;AAAA,IACP,SACE;AAAA,IACF,UAAU;AAAA,EACZ,CAAC;AAEY,QAAA,cAAc,IAAI,eAAe;AAAA,IAC5C,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UACE;AAAA,EACJ,CAAC;AAEY,QAAA,wBAAwB,CAAC,YAAoB;AACxD,YAAQ,SAAS;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAAA,ECrDO,MAAM,gBAAsC;AAAA,IAEjD,YAAY,SAAkC;AAG9C,WAAA,gBAAgB,CAAC,OAAoB,SACnC,MAAM,OAAO,IAAI;AAEV,WAAA,SAAAA;AAsET,WAAA,QAAQ,CAAC,QAAe;AACtB,eAAO,IAAI;AAAA,MAAA;AA5EN,WAAA,WAAU,mCAAS,YAAW;AAAA,IACrC;AAAA,IAMA,MAAM,QAAQ,OAA+C;AAC3D,YAAM,WAAoB,CAAA;AAE1B,iBAAW,QAAQ,OAAO;AAClB,cAAA,EAAE,MAAM,UAAc,IAAA;AACtB,cAAA,WAAW,IAAI;AACZ,iBAAA,OAAO,QAAQ,IAAI;AACnB,iBAAA,OAAO,aAAa,SAAS;AAC7B,iBAAA,OAAO,YAAY,KAAK,IAAI;AAErC,cAAM,MAAM,MAAM,KAAK,cAAc,KAAK,SAAS;AAAA,UACjD,QAAQ;AAAA,UACR,MAAM;AAAA,QAAA,CACP;AAEG,YAAA,IAAI,WAAW,KAAK;AAChB,gBAAA,eAAe,MAAM,IAAI;AACzB,gBAAA,IAAI,MAAM,aAAa,OAAO;AAAA,QACtC;AACM,cAAA,UAAU,MAAM,IAAI;AAE1B,cAAM,YAAmB;AAAA,UACvB,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,UAAU,QAAQ;AAAA,UAClB,WAAW;AAAA,UACX,YAAY;AAAA,YACV,SAAS,QAAQ;AAAA,YACjB,WAAW,QAAQ;AAAA,YACnB,aAAa,QAAQ;AAAA,UACvB;AAAA,UACA,KAAK,QAAQ;AAAA,QAAA;AAGf,iBAAS,KAAK,SAAS;AAAA,MACzB;AACO,aAAA;AAAA,IACT;AAAA,IACA,MAAM,OAAO,OAAc;AACzB,YAAM,KAAK;AAAA,QACT,GAAG,KAAK,OAAO,IAAI,mBAAmB,MAAM,EAAE,CAAC;AAAA,QAC/C;AAAA,UACE,QAAQ;AAAA,QACV;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,MAAM,KAAK,SAA+C;AAClD,YAAA,QAAQ,KAAK,WAAW,OAAO;AACrC,YAAM,WAAW,MAAM,KAAK,cAAc,KAAK,UAAU,KAAK;AAE1D,UAAA,SAAS,WAAW,KAAK;AACrB,cAAA;AAAA,MACR;AACI,UAAA,SAAS,WAAW,KAAK;AACrB,cAAA;AAAA,MACR;AACI,UAAA,SAAS,UAAU,KAAK;AAC1B,cAAM,EAAE,EAAM,IAAA,MAAM,SAAS,KAAK;AAC5B,cAAA,QAAQ,sBAAsB,CAAC;AAC/B,cAAA;AAAA,MACR;AACA,YAAM,EAAE,OAAO,OAAA,IAAW,MAAM,SAAS,KAAK;AACvC,aAAA;AAAA,QACL,OAAO,MAAM,IAAI,CAAC,SAAS,IAAI;AAAA,QAC/B,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IAMA,WAAW,SAA2B;AACpC,YAAM,SAAS,OAAO,KAAK,OAAO,EAC/B;AAAA,QACC,CAAC,QACC,QAAQ,GAA6B,MAAM,MAC3C,QAAQ,GAA6B,MAAM;AAAA,MAE9C,EAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,QAAQ,GAA6B,CAAC,EAAE,EAC/D,KAAK,GAAG;AAEX,aAAO,IAAI,MAAM;AAAA,IACnB;AAAA,EACF;ACxGa,QAAA,iCAAiC,CAC5C,UAAkC,EAAE,SAAS,yBAE7C,MAAM,iCAAiC,gBAAgB;AAAA,IAErD,YAAY,QAAgB;AAC1B,YAAM,OAAO;AACb,WAAK,SAAS;AACT,WAAA,gBAAgB,OAAO,OAAoB,SAAuB;AACjE,YAAA;AACI,gBAAA,MAAM,MAAM;AACZ,gBAAA,QAAQ,GAAG,IAAI,SAAS,GAAG,IAAI,MAAM,GAAG,YAC5C,OAAO,QACT;AAEA,gBAAM,MAAM,OAAO,aAAa,eAAe,MAAM,OAAO,IAAI;AACzD,iBAAA;AAAA,iBACA,OAAO;AACd,kBAAQ,MAAM,KAAK;AACnB,iBAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAK,CAAA;AAAA,QAC3C;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEW,QAAA,2BAA2B,+BAA+B;;;;;;"}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/errors.ts","../src/azure-media-store.ts","../src/azure-tina-cloud-media-store.ts"],"sourcesContent":["/**\n\n*/\n\ninterface MediaListErrorConfig {\n title: string;\n message: string;\n docsLink: string;\n}\n\nclass MediaListError extends Error {\n public ERR_TYPE = 'MediaListError';\n public title: string;\n public docsLink: string;\n\n constructor(config: MediaListErrorConfig) {\n super(config.message);\n this.title = config.title;\n this.docsLink = config.docsLink;\n }\n}\n\nexport const E_DEFAULT = new MediaListError({\n title: 'An Error Occurred',\n message: 'Something went wrong fetching your media from Azure Blob Storage.',\n docsLink: 'https://tina.io/docs/reference/media/external/azure',\n});\n\nexport const E_UNAUTHORIZED = new MediaListError({\n title: 'Unauthorized',\n message: \"You don't have access to this resource.\",\n docsLink:\n 'https://tina.io/docs/reference/media/external/cloudinary/#set-up-api-routes-nextjs-example',\n});\n\nexport const E_CONFIG = new MediaListError({\n title: 'Missing Credentials',\n message:\n 'Unable to connect to Cloudinary because one or more environment variables are missing.',\n docsLink: 'https://tina.io/docs/media-cloudinary/',\n});\n\nexport const E_KEY_FAIL = new MediaListError({\n title: 'Bad Credentials',\n message:\n 'Unable to connect to Cloudinary because one or more environment variables are misconfigured.',\n docsLink: 'https://tina.io/docs/media-cloudinary/',\n});\n\nexport const E_BAD_ROUTE = new MediaListError({\n title: 'Bad Route',\n message: 'The Cloudinary API route is missing or misconfigured.',\n docsLink:\n 'https://tina.io/docs/reference/media/external/cloudinary/#set-up-api-routes-nextjs-example',\n});\n\nexport const interpretErrorMessage = (message: string) => {\n switch (message) {\n case 'Must supply cloud_name':\n case 'Must supply api_key':\n case 'Must supply api_secret':\n return E_CONFIG;\n case 'unknown api_key':\n return E_KEY_FAIL;\n default:\n return E_DEFAULT;\n }\n};\n","import type {\n Media,\n MediaList,\n MediaListOptions,\n MediaStore,\n MediaUploadOptions,\n} from 'tinacms';\nimport { DEFAULT_MEDIA_UPLOAD_TYPES } from 'tinacms';\nimport { E_UNAUTHORIZED, E_BAD_ROUTE, interpretErrorMessage } from './errors';\n\nexport type AzureMediaStoreOptions = {\n baseUrl?: string;\n};\n\nexport class AzureMediaStore implements MediaStore {\n baseUrl: string;\n constructor(options?: AzureMediaStoreOptions) {\n this.baseUrl = options?.baseUrl || '/api/azure/media';\n }\n fetchFunction = (input: RequestInfo, init?: RequestInit) =>\n fetch(input, init);\n\n accept = DEFAULT_MEDIA_UPLOAD_TYPES;\n\n async persist(media: MediaUploadOptions[]): Promise<Media[]> {\n const newFiles: Media[] = [];\n\n for (const item of media) {\n const { file, directory } = item;\n const formData = new FormData();\n formData.append('file', file);\n formData.append('directory', directory);\n formData.append('filename', file.name);\n\n const res = await this.fetchFunction(this.baseUrl, {\n method: 'POST',\n body: formData,\n });\n\n if (res.status !== 200) {\n const responseData = await res.json();\n throw new Error(responseData.message);\n }\n const fileRes = await res.json();\n\n const parsedRes: Media = {\n type: 'file',\n id: fileRes.name,\n filename: fileRes.filename,\n directory: '/',\n thumbnails: {\n '75x75': fileRes.url,\n '400x400': fileRes.url,\n '1000x1000': fileRes.url,\n },\n src: fileRes.url,\n };\n\n newFiles.push(parsedRes);\n }\n return newFiles;\n }\n async delete(media: Media) {\n await this.fetchFunction(\n `${this.baseUrl}/${encodeURIComponent(media.id)}`,\n {\n method: 'DELETE',\n }\n );\n }\n async list(options: MediaListOptions): Promise<MediaList> {\n const query = this.buildQuery(options);\n const response = await this.fetchFunction(this.baseUrl + query);\n\n if (response.status === 401) {\n throw E_UNAUTHORIZED;\n }\n if (response.status === 404) {\n throw E_BAD_ROUTE;\n }\n if (response.status >= 500) {\n const { e } = await response.json();\n const error = interpretErrorMessage(e);\n throw error;\n }\n const { items, offset } = await response.json();\n return {\n items: items.map((item) => item),\n nextOffset: offset,\n };\n }\n\n parse = (img: Media) => {\n return img.src;\n };\n\n buildQuery(options: MediaListOptions) {\n const params = Object.keys(options)\n .filter(\n (key) =>\n options[key as keyof MediaListOptions] !== '' &&\n options[key as keyof MediaListOptions] !== undefined\n )\n .map((key) => `${key}=${options[key as keyof MediaListOptions]}`)\n .join('&');\n\n return `?${params}`;\n }\n}\n","import type { Client } from 'tinacms';\nimport type { AzureMediaStoreOptions } from './azure-media-store';\nimport { AzureMediaStore } from './azure-media-store';\n\nexport const createTinaCloudAzureMediaStore = (\n options: AzureMediaStoreOptions = { baseUrl: '/api/azure/media' }\n) =>\n class TinaCloudAzureMediaStore extends AzureMediaStore {\n client: Client;\n constructor(client: Client) {\n super(options);\n this.client = client;\n this.fetchFunction = async (input: RequestInfo, init?: RequestInit) => {\n try {\n const url = input.toString();\n const query = `${url.includes('?') ? '&' : '?'}clientID=${\n client.clientId\n }`;\n\n const res = client.authProvider.fetchWithToken(url + query, init);\n return res;\n } catch (error) {\n console.error(error);\n return new Response(null, { status: 500 });\n }\n };\n }\n };\n\nexport const TinaCloudAzureMediaStore = createTinaCloudAzureMediaStore();\n"],"names":[],"mappings":"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"}
|