@foxford/tsup-config 1.0.2 → 1.1.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.
- package/README.mdx +7 -1
- package/index.cjs +26 -66
- package/index.d.ts +5 -1
- package/index.mjs +26 -69
- package/package.json +12 -2
package/README.mdx
CHANGED
|
@@ -47,12 +47,18 @@ export default defineConfig(
|
|
|
47
47
|
## Что делает сборка
|
|
48
48
|
|
|
49
49
|
1. `entry` для tsup — из декларации;
|
|
50
|
-
2. ESM → `.
|
|
50
|
+
2. ESM → `.js`, CJS → `.cjs` для пакетов с `"type": "module"`;
|
|
51
51
|
3. `build/package.json`: метаданные без dev-полей, `exports` внутрь артефакта,
|
|
52
52
|
`files` — по фактическому содержимому `build/`;
|
|
53
53
|
4. падает, если объявленного подпути нет в `exports` исходного package.json,
|
|
54
54
|
если `exports` ведёт не на исходник, или если файла из `exports` нет в `build/`.
|
|
55
55
|
|
|
56
|
+
Синтаксис пакетного выхода понижается до production-целей `@foxford/browserslist-config/build` для ESM-приложений. Окружение выбрано явно: `NODE_ENV=test` или dev-режим команды не меняют публикуемый код. Пакеты, исполняемые только в Node, задают `overrides: { target: 'node18' }`; сам `tsup-config` также собирается для Node 18.
|
|
57
|
+
|
|
58
|
+
Пакетная сборка не добавляет глобальные полифиллы. Итоговый сборщик приложения обрабатывает код вместе с зависимостями и подключает нужные API. У `den-preact` в промежуточном ESM сохраняются `import.meta` и optional chaining: они нужны сборщику потребителя для удаления серверного рендера из браузерного выхода.
|
|
59
|
+
|
|
60
|
+
Для старых Safari профиль применяет тот же обход destructuring, что и Vite 7: esbuild сохраняет этот синтаксис. Это позволяет собрать код, но не исправляет известный баг движка в отдельных операциях с array rest. Условие обхода и ограничение описаны в [пакете браузерных целей](https://github.com/foxford/frontend-platform/blob/main/packages/browserslist-config/README.mdx).
|
|
61
|
+
|
|
56
62
|
## Пакеты со своей сборкой
|
|
57
63
|
|
|
58
64
|
`@foxford/den-vike` собирается `tsc`, а не tsup: его vike-хуки связаны импортами
|
package/index.cjs
CHANGED
|
@@ -3,34 +3,8 @@ var __create = Object.create;
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
-
var __spreadValues = (a, b) => {
|
|
12
|
-
for (var prop in b || (b = {}))
|
|
13
|
-
if (__hasOwnProp.call(b, prop))
|
|
14
|
-
__defNormalProp(a, prop, b[prop]);
|
|
15
|
-
if (__getOwnPropSymbols)
|
|
16
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
-
if (__propIsEnum.call(b, prop))
|
|
18
|
-
__defNormalProp(a, prop, b[prop]);
|
|
19
|
-
}
|
|
20
|
-
return a;
|
|
21
|
-
};
|
|
22
|
-
var __objRest = (source, exclude) => {
|
|
23
|
-
var target = {};
|
|
24
|
-
for (var prop in source)
|
|
25
|
-
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
26
|
-
target[prop] = source[prop];
|
|
27
|
-
if (source != null && __getOwnPropSymbols)
|
|
28
|
-
for (var prop of __getOwnPropSymbols(source)) {
|
|
29
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
30
|
-
target[prop] = source[prop];
|
|
31
|
-
}
|
|
32
|
-
return target;
|
|
33
|
-
};
|
|
34
8
|
var __export = (target, all) => {
|
|
35
9
|
for (var name in all)
|
|
36
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -52,26 +26,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
52
26
|
mod
|
|
53
27
|
));
|
|
54
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
55
|
-
var __async = (__this, __arguments, generator) => {
|
|
56
|
-
return new Promise((resolve, reject) => {
|
|
57
|
-
var fulfilled = (value) => {
|
|
58
|
-
try {
|
|
59
|
-
step(generator.next(value));
|
|
60
|
-
} catch (e) {
|
|
61
|
-
reject(e);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
var rejected = (value) => {
|
|
65
|
-
try {
|
|
66
|
-
step(generator.throw(value));
|
|
67
|
-
} catch (e) {
|
|
68
|
-
reject(e);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
72
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
29
|
|
|
76
30
|
// src/index.js
|
|
77
31
|
var src_exports = {};
|
|
@@ -90,6 +44,7 @@ __export(src_exports, {
|
|
|
90
44
|
module.exports = __toCommonJS(src_exports);
|
|
91
45
|
var import_node_fs = __toESM(require("fs"), 1);
|
|
92
46
|
var import_node_path = __toESM(require("path"), 1);
|
|
47
|
+
var import_build = require("@foxford/browserslist-config/build");
|
|
93
48
|
function defineEntries(map) {
|
|
94
49
|
for (const [subpath, source] of Object.entries(map)) {
|
|
95
50
|
if (!subpath.startsWith(".")) {
|
|
@@ -109,9 +64,8 @@ function toTsupEntry(entries) {
|
|
|
109
64
|
return Object.fromEntries(Object.entries(entries).map(([subpath, source]) => [artifactName(subpath, source), source]));
|
|
110
65
|
}
|
|
111
66
|
function assertSourceExports(entries, packageJson) {
|
|
112
|
-
var _a;
|
|
113
67
|
const declared = new Set(Object.keys(entries));
|
|
114
|
-
const actual = new Set(Object.keys(
|
|
68
|
+
const actual = new Set(Object.keys(packageJson.exports ?? {}).filter((key) => !key.endsWith(".mdx")));
|
|
115
69
|
const missing = [...declared].filter((key) => !actual.has(key));
|
|
116
70
|
const extra = [...actual].filter((key) => !declared.has(key));
|
|
117
71
|
if (missing.length > 0 || extra.length > 0) {
|
|
@@ -136,7 +90,7 @@ function toBuildExports(entries, { extensions }) {
|
|
|
136
90
|
return Object.fromEntries(
|
|
137
91
|
Object.entries(entries).map(([subpath, source]) => {
|
|
138
92
|
const name = artifactName(subpath, source);
|
|
139
|
-
return [subpath,
|
|
93
|
+
return [subpath, { ...extensions(name) }];
|
|
140
94
|
})
|
|
141
95
|
);
|
|
142
96
|
}
|
|
@@ -161,9 +115,8 @@ function writeBuildPackageJson({ entries, extensions, main, module: moduleField,
|
|
|
161
115
|
`);
|
|
162
116
|
}
|
|
163
117
|
function verifyBuildExports(outDir = "build") {
|
|
164
|
-
var _a;
|
|
165
118
|
const packageJson = JSON.parse(import_node_fs.default.readFileSync(import_node_path.default.join(outDir, "package.json"), "utf-8"));
|
|
166
|
-
const missing = Object.values(
|
|
119
|
+
const missing = Object.values(packageJson.exports ?? {}).flatMap((entry) => typeof entry === "string" ? [entry] : Object.values(entry)).filter((file) => !import_node_fs.default.existsSync(import_node_path.default.join(outDir, file)));
|
|
167
120
|
if (missing.length > 0) {
|
|
168
121
|
throw new Error(`\u0432 ${outDir}/ \u043D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432 \u0434\u043B\u044F exports: ${[...new Set(missing)].join(", ")}`);
|
|
169
122
|
}
|
|
@@ -209,12 +162,9 @@ function addExtensionsToRelativeImports(outDir = "build") {
|
|
|
209
162
|
return patched;
|
|
210
163
|
}
|
|
211
164
|
function createTsupConfig({ entries, overrides = {} }) {
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
require: `./${name}.cjs`,
|
|
216
|
-
types: `./${name}.d.ts`
|
|
217
|
-
});
|
|
165
|
+
const { esbuildOptions: overrideEsbuildOptions, target, ...rest } = overrides;
|
|
166
|
+
const browserProfile = target === void 0 ? (0, import_build.resolveBrowserBuild)({ env: "production" }) : void 0;
|
|
167
|
+
const extensions = (name) => ({ import: `./${name}.js`, require: `./${name}.cjs`, types: `./${name}.d.ts` });
|
|
218
168
|
process.on("beforeExit", (code) => {
|
|
219
169
|
if (code !== 0) return;
|
|
220
170
|
updateBuildFiles();
|
|
@@ -225,7 +175,7 @@ function createTsupConfig({ entries, overrides = {} }) {
|
|
|
225
175
|
process.exitCode = 1;
|
|
226
176
|
}
|
|
227
177
|
});
|
|
228
|
-
return
|
|
178
|
+
return {
|
|
229
179
|
bundle: true,
|
|
230
180
|
clean: true,
|
|
231
181
|
dts: true,
|
|
@@ -239,21 +189,31 @@ function createTsupConfig({ entries, overrides = {} }) {
|
|
|
239
189
|
// react/jsx-runtime и от области видимости не зависит.
|
|
240
190
|
esbuildOptions: (options, context) => {
|
|
241
191
|
options.jsx = "automatic";
|
|
242
|
-
|
|
192
|
+
if (browserProfile) {
|
|
193
|
+
options.supported = { ...options.supported, ...browserProfile.esbuildSupported };
|
|
194
|
+
}
|
|
195
|
+
overrideEsbuildOptions?.(options, context);
|
|
243
196
|
},
|
|
244
197
|
format: ["cjs", "esm"],
|
|
245
|
-
onSuccess: () =>
|
|
198
|
+
onSuccess: async () => {
|
|
246
199
|
copyReadme();
|
|
247
200
|
const root = entries["."];
|
|
248
|
-
writeBuildPackageJson(
|
|
201
|
+
writeBuildPackageJson({
|
|
249
202
|
entries,
|
|
250
|
-
extensions
|
|
251
|
-
|
|
252
|
-
|
|
203
|
+
extensions,
|
|
204
|
+
...root === void 0 ? {} : { main: extensions(artifactName(".", root)).require, module: extensions(artifactName(".", root)).import }
|
|
205
|
+
});
|
|
206
|
+
},
|
|
253
207
|
outDir: "build",
|
|
254
208
|
sourcemap: false,
|
|
255
|
-
splitting: false
|
|
256
|
-
|
|
209
|
+
splitting: false,
|
|
210
|
+
// Пакетный выход ещё пересобирает приложение: здесь понижается синтаксис,
|
|
211
|
+
// а полифиллы и совместимость всех зависимостей проверяет финальная сборка.
|
|
212
|
+
target: target ?? browserProfile?.targets,
|
|
213
|
+
// Хук уже дополнен jsx: 'automatic', а undefined target не должен отменять
|
|
214
|
+
// общую браузерную цель — обе опции исключены из спреда.
|
|
215
|
+
...rest
|
|
216
|
+
};
|
|
257
217
|
}
|
|
258
218
|
// Annotate the CommonJS export names for ESM import in node:
|
|
259
219
|
0 && (module.exports = {
|
package/index.d.ts
CHANGED
|
@@ -42,5 +42,9 @@ export function copyReadme(outDir?: string): void
|
|
|
42
42
|
*/
|
|
43
43
|
export function addExtensionsToRelativeImports(outDir?: string): number
|
|
44
44
|
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Готовый tsup-конфиг публикуемого пакета монорепо.
|
|
47
|
+
* По умолчанию — production-цели @foxford/browserslist-config для ESM-приложений.
|
|
48
|
+
* Пакеты для Node задают overrides.target; полифиллы добавляет сборка приложения.
|
|
49
|
+
*/
|
|
46
50
|
export function createTsupConfig(options: { entries: Entries; overrides?: Options }): Options
|
package/index.mjs
CHANGED
|
@@ -1,55 +1,7 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
-
var __spreadValues = (a, b) => {
|
|
7
|
-
for (var prop in b || (b = {}))
|
|
8
|
-
if (__hasOwnProp.call(b, prop))
|
|
9
|
-
__defNormalProp(a, prop, b[prop]);
|
|
10
|
-
if (__getOwnPropSymbols)
|
|
11
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
-
if (__propIsEnum.call(b, prop))
|
|
13
|
-
__defNormalProp(a, prop, b[prop]);
|
|
14
|
-
}
|
|
15
|
-
return a;
|
|
16
|
-
};
|
|
17
|
-
var __objRest = (source, exclude) => {
|
|
18
|
-
var target = {};
|
|
19
|
-
for (var prop in source)
|
|
20
|
-
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
21
|
-
target[prop] = source[prop];
|
|
22
|
-
if (source != null && __getOwnPropSymbols)
|
|
23
|
-
for (var prop of __getOwnPropSymbols(source)) {
|
|
24
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
25
|
-
target[prop] = source[prop];
|
|
26
|
-
}
|
|
27
|
-
return target;
|
|
28
|
-
};
|
|
29
|
-
var __async = (__this, __arguments, generator) => {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
var fulfilled = (value) => {
|
|
32
|
-
try {
|
|
33
|
-
step(generator.next(value));
|
|
34
|
-
} catch (e) {
|
|
35
|
-
reject(e);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var rejected = (value) => {
|
|
39
|
-
try {
|
|
40
|
-
step(generator.throw(value));
|
|
41
|
-
} catch (e) {
|
|
42
|
-
reject(e);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
46
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
|
|
50
1
|
// src/index.js
|
|
51
2
|
import fs from "fs";
|
|
52
3
|
import path from "path";
|
|
4
|
+
import { resolveBrowserBuild } from "@foxford/browserslist-config/build";
|
|
53
5
|
function defineEntries(map) {
|
|
54
6
|
for (const [subpath, source] of Object.entries(map)) {
|
|
55
7
|
if (!subpath.startsWith(".")) {
|
|
@@ -69,9 +21,8 @@ function toTsupEntry(entries) {
|
|
|
69
21
|
return Object.fromEntries(Object.entries(entries).map(([subpath, source]) => [artifactName(subpath, source), source]));
|
|
70
22
|
}
|
|
71
23
|
function assertSourceExports(entries, packageJson) {
|
|
72
|
-
var _a;
|
|
73
24
|
const declared = new Set(Object.keys(entries));
|
|
74
|
-
const actual = new Set(Object.keys(
|
|
25
|
+
const actual = new Set(Object.keys(packageJson.exports ?? {}).filter((key) => !key.endsWith(".mdx")));
|
|
75
26
|
const missing = [...declared].filter((key) => !actual.has(key));
|
|
76
27
|
const extra = [...actual].filter((key) => !declared.has(key));
|
|
77
28
|
if (missing.length > 0 || extra.length > 0) {
|
|
@@ -96,7 +47,7 @@ function toBuildExports(entries, { extensions }) {
|
|
|
96
47
|
return Object.fromEntries(
|
|
97
48
|
Object.entries(entries).map(([subpath, source]) => {
|
|
98
49
|
const name = artifactName(subpath, source);
|
|
99
|
-
return [subpath,
|
|
50
|
+
return [subpath, { ...extensions(name) }];
|
|
100
51
|
})
|
|
101
52
|
);
|
|
102
53
|
}
|
|
@@ -121,9 +72,8 @@ function writeBuildPackageJson({ entries, extensions, main, module: moduleField,
|
|
|
121
72
|
`);
|
|
122
73
|
}
|
|
123
74
|
function verifyBuildExports(outDir = "build") {
|
|
124
|
-
var _a;
|
|
125
75
|
const packageJson = JSON.parse(fs.readFileSync(path.join(outDir, "package.json"), "utf-8"));
|
|
126
|
-
const missing = Object.values(
|
|
76
|
+
const missing = Object.values(packageJson.exports ?? {}).flatMap((entry) => typeof entry === "string" ? [entry] : Object.values(entry)).filter((file) => !fs.existsSync(path.join(outDir, file)));
|
|
127
77
|
if (missing.length > 0) {
|
|
128
78
|
throw new Error(`\u0432 ${outDir}/ \u043D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432 \u0434\u043B\u044F exports: ${[...new Set(missing)].join(", ")}`);
|
|
129
79
|
}
|
|
@@ -169,12 +119,9 @@ function addExtensionsToRelativeImports(outDir = "build") {
|
|
|
169
119
|
return patched;
|
|
170
120
|
}
|
|
171
121
|
function createTsupConfig({ entries, overrides = {} }) {
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
require: `./${name}.cjs`,
|
|
176
|
-
types: `./${name}.d.ts`
|
|
177
|
-
});
|
|
122
|
+
const { esbuildOptions: overrideEsbuildOptions, target, ...rest } = overrides;
|
|
123
|
+
const browserProfile = target === void 0 ? resolveBrowserBuild({ env: "production" }) : void 0;
|
|
124
|
+
const extensions = (name) => ({ import: `./${name}.js`, require: `./${name}.cjs`, types: `./${name}.d.ts` });
|
|
178
125
|
process.on("beforeExit", (code) => {
|
|
179
126
|
if (code !== 0) return;
|
|
180
127
|
updateBuildFiles();
|
|
@@ -185,7 +132,7 @@ function createTsupConfig({ entries, overrides = {} }) {
|
|
|
185
132
|
process.exitCode = 1;
|
|
186
133
|
}
|
|
187
134
|
});
|
|
188
|
-
return
|
|
135
|
+
return {
|
|
189
136
|
bundle: true,
|
|
190
137
|
clean: true,
|
|
191
138
|
dts: true,
|
|
@@ -199,21 +146,31 @@ function createTsupConfig({ entries, overrides = {} }) {
|
|
|
199
146
|
// react/jsx-runtime и от области видимости не зависит.
|
|
200
147
|
esbuildOptions: (options, context) => {
|
|
201
148
|
options.jsx = "automatic";
|
|
202
|
-
|
|
149
|
+
if (browserProfile) {
|
|
150
|
+
options.supported = { ...options.supported, ...browserProfile.esbuildSupported };
|
|
151
|
+
}
|
|
152
|
+
overrideEsbuildOptions?.(options, context);
|
|
203
153
|
},
|
|
204
154
|
format: ["cjs", "esm"],
|
|
205
|
-
onSuccess: () =>
|
|
155
|
+
onSuccess: async () => {
|
|
206
156
|
copyReadme();
|
|
207
157
|
const root = entries["."];
|
|
208
|
-
writeBuildPackageJson(
|
|
158
|
+
writeBuildPackageJson({
|
|
209
159
|
entries,
|
|
210
|
-
extensions
|
|
211
|
-
|
|
212
|
-
|
|
160
|
+
extensions,
|
|
161
|
+
...root === void 0 ? {} : { main: extensions(artifactName(".", root)).require, module: extensions(artifactName(".", root)).import }
|
|
162
|
+
});
|
|
163
|
+
},
|
|
213
164
|
outDir: "build",
|
|
214
165
|
sourcemap: false,
|
|
215
|
-
splitting: false
|
|
216
|
-
|
|
166
|
+
splitting: false,
|
|
167
|
+
// Пакетный выход ещё пересобирает приложение: здесь понижается синтаксис,
|
|
168
|
+
// а полифиллы и совместимость всех зависимостей проверяет финальная сборка.
|
|
169
|
+
target: target ?? browserProfile?.targets,
|
|
170
|
+
// Хук уже дополнен jsx: 'automatic', а undefined target не должен отменять
|
|
171
|
+
// общую браузерную цель — обе опции исключены из спреда.
|
|
172
|
+
...rest
|
|
173
|
+
};
|
|
217
174
|
}
|
|
218
175
|
export {
|
|
219
176
|
addExtensionsToRelativeImports,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxford/tsup-config",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Общая сборка публикуемых пакетов: декларация точек входа, tsup-конфиг, генерация публикуемого package.json",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"foxford",
|
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
"build",
|
|
9
9
|
"config"
|
|
10
10
|
],
|
|
11
|
+
"homepage": "https://github.com/foxford/frontend-platform",
|
|
12
|
+
"bugs": "https://github.com/foxford/frontend-platform/issues",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/foxford/frontend-platform.git",
|
|
16
|
+
"directory": "packages/tsup-config"
|
|
17
|
+
},
|
|
11
18
|
"license": "MIT",
|
|
12
19
|
"author": "Foxford Co",
|
|
13
20
|
"maintainers": [
|
|
@@ -18,6 +25,9 @@
|
|
|
18
25
|
}
|
|
19
26
|
],
|
|
20
27
|
"type": "module",
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@foxford/browserslist-config": "^1.2.0"
|
|
30
|
+
},
|
|
21
31
|
"peerDependencies": {
|
|
22
32
|
"tsup": "*"
|
|
23
33
|
},
|
|
@@ -37,6 +47,6 @@
|
|
|
37
47
|
"index.mjs",
|
|
38
48
|
"package.json"
|
|
39
49
|
],
|
|
40
|
-
"sha": "
|
|
50
|
+
"sha": "6bf9ff8",
|
|
41
51
|
"scripts": {}
|
|
42
52
|
}
|