1 | "use strict";
|
2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3 | if (k2 === undefined) k2 = k;
|
4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5 | }) : (function(o, m, k, k2) {
|
6 | if (k2 === undefined) k2 = k;
|
7 | o[k2] = m[k];
|
8 | }));
|
9 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11 | }) : function(o, v) {
|
12 | o["default"] = v;
|
13 | });
|
14 | var __importStar = (this && this.__importStar) || function (mod) {
|
15 | if (mod && mod.__esModule) return mod;
|
16 | var result = {};
|
17 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18 | __setModuleDefault(result, mod);
|
19 | return result;
|
20 | };
|
21 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
22 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
23 | };
|
24 | Object.defineProperty(exports, "__esModule", { value: true });
|
25 | const fs_1 = require("fs");
|
26 | const colors = __importStar(require("kleur/colors"));
|
27 | const path_1 = __importDefault(require("path"));
|
28 | const rimraf_1 = __importDefault(require("rimraf"));
|
29 | const skypack_1 = require("skypack");
|
30 | const util_1 = __importDefault(require("util"));
|
31 | const logger_1 = require("../logger");
|
32 | const util_2 = require("../util");
|
33 | const fetchedPackages = new Set();
|
34 | function logFetching(origin, packageName, packageSemver) {
|
35 | if (fetchedPackages.has(packageName)) {
|
36 | return;
|
37 | }
|
38 | fetchedPackages.add(packageName);
|
39 | logger_1.logger.info(`import ${colors.bold(packageName + (packageSemver ? `@${packageSemver}` : ''))} ${colors.dim(`→ ${origin}/${packageName}`)}`);
|
40 | if (!packageSemver) {
|
41 | logger_1.logger.info(colors.yellow(`pin project to this version: \`snowpack add ${packageName}\``));
|
42 | }
|
43 | }
|
44 | function parseRawPackageImport(spec) {
|
45 | const impParts = spec.split('/');
|
46 | if (spec.startsWith('@')) {
|
47 | const [scope, name, ...rest] = impParts;
|
48 | return [`${scope}/${name}`, rest.join('/') || null];
|
49 | }
|
50 | const [name, ...rest] = impParts;
|
51 | return [name, rest.join('/') || null];
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 | exports.default = {
|
59 | async prepare(commandOptions) {
|
60 | var _a;
|
61 | const { config, lockfile } = commandOptions;
|
62 |
|
63 | if (config.packageOptions.source === 'remote' && !config.packageOptions.types) {
|
64 | return { imports: {} };
|
65 | }
|
66 | const lockEntryList = lockfile && Object.keys(lockfile.lock);
|
67 | if (!lockfile || !lockEntryList || lockEntryList.length === 0) {
|
68 | return { imports: {} };
|
69 | }
|
70 | logger_1.logger.info('checking for new TypeScript types...', { name: 'packageOptions.types' });
|
71 | await rimraf_1.default.sync(path_1.default.join(this.getCacheFolder(config), '.snowpack/types'));
|
72 | for (const lockEntry of lockEntryList) {
|
73 | const [packageName, semverRange] = lockEntry.split('#');
|
74 | const exactVersion = (_a = lockfile.lock[lockEntry]) === null || _a === void 0 ? void 0 : _a.substr(packageName.length + 1);
|
75 | await util_2.remotePackageSDK
|
76 | .installTypes(packageName, exactVersion || semverRange, path_1.default.join(this.getCacheFolder(config), 'types'))
|
77 | .catch((err) => logger_1.logger.debug('dts fetch error: ' + err.message));
|
78 | }
|
79 |
|
80 | logger_1.logger.info(`types updated. ${colors.dim('→ ./.snowpack/types')}`, {
|
81 | name: 'packageOptions.types',
|
82 | });
|
83 | return { imports: {} };
|
84 | },
|
85 | modifyBuildInstallOptions({ installOptions, config, lockfile }) {
|
86 | installOptions.importMap = lockfile
|
87 | ? util_2.convertLockfileToSkypackImportMap(config.packageOptions.origin, lockfile)
|
88 | : undefined;
|
89 | installOptions.rollup = installOptions.rollup || {};
|
90 | installOptions.rollup.plugins = installOptions.rollup.plugins || [];
|
91 | installOptions.rollup.plugins.push(skypack_1.rollupPluginSkypack({
|
92 | sdk: util_2.remotePackageSDK,
|
93 | logger: {
|
94 | debug: (...args) => logger_1.logger.debug(util_1.default.format(...args)),
|
95 | log: (...args) => logger_1.logger.info(util_1.default.format(...args)),
|
96 | warn: (...args) => logger_1.logger.warn(util_1.default.format(...args)),
|
97 | error: (...args) => logger_1.logger.error(util_1.default.format(...args)),
|
98 | },
|
99 | }));
|
100 |
|
101 | return installOptions;
|
102 | },
|
103 | async load(spec, { config, lockfile }) {
|
104 | let body;
|
105 | if (spec.startsWith('-/') ||
|
106 | spec.startsWith('pin/') ||
|
107 | spec.startsWith('new/') ||
|
108 | spec.startsWith('error/')) {
|
109 | body = (await util_2.remotePackageSDK.fetch(`/${spec}`)).body;
|
110 | }
|
111 | else {
|
112 | const [packageName, packagePath] = parseRawPackageImport(spec);
|
113 | if (lockfile && lockfile.dependencies[packageName]) {
|
114 | const lockEntry = packageName + '#' + lockfile.dependencies[packageName];
|
115 | if (packagePath) {
|
116 | body = (await util_2.remotePackageSDK.fetch('/' + lockfile.lock[lockEntry] + '/' + packagePath))
|
117 | .body;
|
118 | }
|
119 | else {
|
120 | body = (await util_2.remotePackageSDK.fetch('/' + lockfile.lock[lockEntry])).body;
|
121 | }
|
122 | }
|
123 | else {
|
124 | const packageSemver = 'latest';
|
125 | logFetching(config.packageOptions.origin, packageName, packageSemver);
|
126 | let lookupResponse = await util_2.remotePackageSDK.lookupBySpecifier(spec, packageSemver);
|
127 | if (!lookupResponse.error && lookupResponse.importStatus === 'NEW') {
|
128 | const buildResponse = await util_2.remotePackageSDK.buildNewPackage(spec, packageSemver);
|
129 | if (!buildResponse.success) {
|
130 | throw new Error('Package could not be built!');
|
131 | }
|
132 | lookupResponse = await util_2.remotePackageSDK.lookupBySpecifier(spec, packageSemver);
|
133 | }
|
134 | if (lookupResponse.error) {
|
135 | throw lookupResponse.error;
|
136 | }
|
137 |
|
138 |
|
139 | if (!fs_1.existsSync(path_1.default.join(this.getCacheFolder(config), '.snowpack/types', packageName))) {
|
140 | util_2.remotePackageSDK
|
141 | .installTypes(packageName, packageSemver, path_1.default.join(this.getCacheFolder(config), '.snowpack/types'))
|
142 | .catch(() => 'thats fine!');
|
143 | }
|
144 | body = lookupResponse.body;
|
145 | }
|
146 | }
|
147 | const ext = path_1.default.extname(spec);
|
148 | if (!ext || util_2.isJavaScript(spec)) {
|
149 | return body
|
150 | .toString()
|
151 | .replace(/(from|import) \'\//g, `$1 '${config.buildOptions.metaUrlPath}/pkg/`)
|
152 | .replace(/(from|import) \"\//g, `$1 "${config.buildOptions.metaUrlPath}/pkg/`);
|
153 | }
|
154 | return body;
|
155 | },
|
156 | resolvePackageImport(missingPackage, _, config) {
|
157 | return path_1.default.posix.join(config.buildOptions.metaUrlPath, 'pkg', missingPackage);
|
158 | },
|
159 | async recoverMissingPackageImport() {
|
160 | throw new Error('Unexpected Error: No such thing as a "missing" package import with Skypack.');
|
161 | },
|
162 | clearCache() {
|
163 | return skypack_1.clearCache();
|
164 | },
|
165 | getCacheFolder(config) {
|
166 | return ((config.packageOptions.source === 'remote' && config.packageOptions.cache) ||
|
167 | path_1.default.join(config.root, '.snowpack'));
|
168 | },
|
169 | };
|