mirror of
https://github.com/SamEyeBam/animate.git
synced 2025-09-28 15:05:25 +00:00
larry babby and threejs for glsl
This commit is contained in:
21
webGl/my-threejs-test/node_modules/@parcel/packager-css/LICENSE
generated
vendored
Normal file
21
webGl/my-threejs-test/node_modules/@parcel/packager-css/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-present Devon Govett
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
320
webGl/my-threejs-test/node_modules/@parcel/packager-css/lib/CSSPackager.js
generated
vendored
Normal file
320
webGl/my-threejs-test/node_modules/@parcel/packager-css/lib/CSSPackager.js
generated
vendored
Normal file
@@ -0,0 +1,320 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
exports.getSpecifier = getSpecifier;
|
||||
function _lightningcss() {
|
||||
const data = _interopRequireWildcard(require("lightningcss"));
|
||||
_lightningcss = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _assert() {
|
||||
const data = _interopRequireDefault(require("assert"));
|
||||
_assert = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _nullthrows() {
|
||||
const data = _interopRequireDefault(require("nullthrows"));
|
||||
_nullthrows = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _sourceMap() {
|
||||
const data = _interopRequireDefault(require("@parcel/source-map"));
|
||||
_sourceMap = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _plugin() {
|
||||
const data = require("@parcel/plugin");
|
||||
_plugin = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _diagnostic() {
|
||||
const data = require("@parcel/diagnostic");
|
||||
_diagnostic = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _utils() {
|
||||
const data = require("@parcel/utils");
|
||||
_utils = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
||||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
||||
// $FlowFixMe - init for browser build.
|
||||
var _default = exports.default = new (_plugin().Packager)({
|
||||
async package({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
getInlineBundleContents,
|
||||
getSourceMapReference,
|
||||
logger,
|
||||
options
|
||||
}) {
|
||||
// Inline style attributes are parsed differently from full CSS files.
|
||||
if (bundle.bundleBehavior === 'inline') {
|
||||
let entry = bundle.getMainEntry();
|
||||
if ((entry === null || entry === void 0 ? void 0 : entry.meta.type) === 'attr') {
|
||||
return replaceReferences(bundle, bundleGraph, await entry.getCode(), await entry.getMap(), getInlineBundleContents);
|
||||
}
|
||||
}
|
||||
let queue = new (_utils().PromiseQueue)({
|
||||
maxConcurrent: 32
|
||||
});
|
||||
let hoistedImports = [];
|
||||
let assetsByPlaceholder = new Map();
|
||||
let entry = null;
|
||||
let entryContents = '';
|
||||
bundle.traverse({
|
||||
enter: (node, context) => {
|
||||
if (node.type === 'asset' && !context) {
|
||||
// If there is only one entry, we'll use it directly.
|
||||
// Otherwise, we'll create a fake bundle entry with @import rules for each root asset.
|
||||
if (entry == null) {
|
||||
entry = node.value.id;
|
||||
} else {
|
||||
entry = bundle.id;
|
||||
}
|
||||
assetsByPlaceholder.set(node.value.id, node.value);
|
||||
entryContents += `@import "${node.value.id}";\n`;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
exit: node => {
|
||||
if (node.type === 'dependency') {
|
||||
let resolved = bundleGraph.getResolvedAsset(node.value, bundle);
|
||||
|
||||
// Hoist unresolved external dependencies (i.e. http: imports)
|
||||
if (node.value.priority === 'sync' && !bundleGraph.isDependencySkipped(node.value) && !resolved) {
|
||||
hoistedImports.push(node.value.specifier);
|
||||
}
|
||||
if (resolved && bundle.hasAsset(resolved)) {
|
||||
var _node$value$meta$plac;
|
||||
assetsByPlaceholder.set((_node$value$meta$plac = node.value.meta.placeholder) !== null && _node$value$meta$plac !== void 0 ? _node$value$meta$plac : node.value.specifier, resolved);
|
||||
}
|
||||
return;
|
||||
}
|
||||
let asset = node.value;
|
||||
queue.add(() => {
|
||||
var _asset$astGenerator;
|
||||
if (!asset.symbols.isCleared && options.mode === 'production' && ((_asset$astGenerator = asset.astGenerator) === null || _asset$astGenerator === void 0 ? void 0 : _asset$astGenerator.type) === 'postcss') {
|
||||
// a CSS Modules asset
|
||||
return processCSSModule(options, logger, bundleGraph, bundle, asset);
|
||||
} else {
|
||||
return Promise.all([asset, asset.getCode().then(css => {
|
||||
// Replace CSS variable references with resolved symbols.
|
||||
if (asset.meta.hasReferences) {
|
||||
let replacements = new Map();
|
||||
for (let dep of asset.getDependencies()) {
|
||||
for (let [exported, {
|
||||
local
|
||||
}] of dep.symbols) {
|
||||
let resolved = bundleGraph.getResolvedAsset(dep, bundle);
|
||||
if (resolved) {
|
||||
let resolution = bundleGraph.getSymbolResolution(resolved, exported, bundle);
|
||||
if (resolution.symbol) {
|
||||
replacements.set(local, resolution.symbol);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (replacements.size > 0) {
|
||||
let regex = new RegExp([...replacements.keys()].join('|'), 'g');
|
||||
css = css.replace(regex, m => escapeDashedIdent(replacements.get(m) || m));
|
||||
}
|
||||
}
|
||||
return css;
|
||||
}), bundle.env.sourceMap ? asset.getMap() : null]);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
let outputs = new Map((await queue.run()).map(([asset, code, map]) => [asset, [code, map]]));
|
||||
let map = new (_sourceMap().default)(options.projectRoot);
|
||||
|
||||
// $FlowFixMe
|
||||
if (process.browser) {
|
||||
await (0, _lightningcss().default)();
|
||||
}
|
||||
let res = await (0, _lightningcss().bundleAsync)({
|
||||
filename: (0, _nullthrows().default)(entry),
|
||||
sourceMap: !!bundle.env.sourceMap,
|
||||
resolver: {
|
||||
resolve(specifier) {
|
||||
return specifier;
|
||||
},
|
||||
async read(file) {
|
||||
if (file === bundle.id) {
|
||||
return entryContents;
|
||||
}
|
||||
let asset = assetsByPlaceholder.get(file);
|
||||
if (!asset) {
|
||||
return '';
|
||||
}
|
||||
let [code, map] = (0, _nullthrows().default)(outputs.get(asset));
|
||||
if (map) {
|
||||
let sm = await map.stringify({
|
||||
format: 'inline'
|
||||
});
|
||||
(0, _assert().default)(typeof sm === 'string');
|
||||
code += `\n/*# sourceMappingURL=${sm} */`;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
});
|
||||
let contents = res.code.toString();
|
||||
if (res.map) {
|
||||
let vlqMap = JSON.parse(res.map.toString());
|
||||
map.addVLQMap(vlqMap);
|
||||
let reference = await getSourceMapReference(map);
|
||||
if (reference != null) {
|
||||
contents += '/*# sourceMappingURL=' + reference + ' */\n';
|
||||
}
|
||||
}
|
||||
|
||||
// Prepend hoisted external imports.
|
||||
if (hoistedImports.length > 0) {
|
||||
let lineOffset = 0;
|
||||
let hoistedCode = '';
|
||||
for (let url of hoistedImports) {
|
||||
hoistedCode += `@import "${url}";\n`;
|
||||
lineOffset++;
|
||||
}
|
||||
if (bundle.env.sourceMap) {
|
||||
map.offsetLines(1, lineOffset);
|
||||
}
|
||||
contents = hoistedCode + contents;
|
||||
}
|
||||
return replaceReferences(bundle, bundleGraph, contents, map, getInlineBundleContents);
|
||||
}
|
||||
});
|
||||
function replaceReferences(bundle, bundleGraph, contents, map, getInlineBundleContents) {
|
||||
({
|
||||
contents,
|
||||
map
|
||||
} = (0, _utils().replaceURLReferences)({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
map,
|
||||
getReplacement: escapeString
|
||||
}));
|
||||
return (0, _utils().replaceInlineReferences)({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
getInlineBundleContents,
|
||||
getInlineReplacement: (dep, inlineType, contents) => ({
|
||||
from: getSpecifier(dep),
|
||||
to: escapeString(contents)
|
||||
}),
|
||||
map
|
||||
});
|
||||
}
|
||||
function getSpecifier(dep) {
|
||||
if (typeof dep.meta.placeholder === 'string') {
|
||||
return dep.meta.placeholder;
|
||||
}
|
||||
return dep.id;
|
||||
}
|
||||
function escapeString(contents) {
|
||||
return contents.replace(/(["\\])/g, '\\$1');
|
||||
}
|
||||
async function processCSSModule(options, logger, bundleGraph, bundle, asset) {
|
||||
var _await$asset$getAST;
|
||||
let postcss = await options.packageManager.require('postcss', options.projectRoot + '/index', {
|
||||
range: '^8.4.5',
|
||||
saveDev: true,
|
||||
shouldAutoInstall: options.shouldAutoInstall
|
||||
});
|
||||
let ast = postcss.fromJSON((0, _nullthrows().default)((_await$asset$getAST = await asset.getAST()) === null || _await$asset$getAST === void 0 ? void 0 : _await$asset$getAST.program));
|
||||
let usedSymbols = bundleGraph.getUsedSymbols(asset);
|
||||
if (usedSymbols != null) {
|
||||
let localSymbols = new Set([...asset.symbols].map(([, {
|
||||
local
|
||||
}]) => `.${local}`));
|
||||
let defaultImport = null;
|
||||
if (usedSymbols.has('default')) {
|
||||
let incoming = bundleGraph.getIncomingDependencies(asset);
|
||||
defaultImport = incoming.find(d => d.symbols.hasExportSymbol('default'));
|
||||
if (defaultImport) {
|
||||
var _defaultImport$symbol, _loc$filePath;
|
||||
let loc = (_defaultImport$symbol = defaultImport.symbols.get('default')) === null || _defaultImport$symbol === void 0 ? void 0 : _defaultImport$symbol.loc;
|
||||
logger.warn({
|
||||
message: 'CSS modules cannot be tree shaken when imported with a default specifier',
|
||||
...(loc && {
|
||||
codeFrames: [{
|
||||
filePath: (0, _nullthrows().default)((_loc$filePath = loc === null || loc === void 0 ? void 0 : loc.filePath) !== null && _loc$filePath !== void 0 ? _loc$filePath : defaultImport.sourcePath),
|
||||
codeHighlights: [(0, _diagnostic().convertSourceLocationToHighlight)(loc)]
|
||||
}]
|
||||
}),
|
||||
hints: [`Instead do: import * as style from "${defaultImport.specifier}";`],
|
||||
documentationURL: 'https://parceljs.org/languages/css/#tree-shaking'
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!defaultImport && !usedSymbols.has('*')) {
|
||||
let usedLocalSymbols = new Set([...usedSymbols].map(exportSymbol => `.${(0, _nullthrows().default)(asset.symbols.get(exportSymbol)).local}`));
|
||||
ast.walkRules(rule => {
|
||||
if (localSymbols.has(rule.selector) && !usedLocalSymbols.has(rule.selector)) {
|
||||
rule.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
let {
|
||||
content,
|
||||
map
|
||||
} = await postcss().process(ast, {
|
||||
from: undefined,
|
||||
to: options.projectRoot + '/index',
|
||||
map: {
|
||||
annotation: false,
|
||||
inline: false
|
||||
},
|
||||
// Pass postcss's own stringifier to it to silence its warning
|
||||
// as we don't want to perform any transformations -- only generate
|
||||
stringifier: postcss.stringify
|
||||
});
|
||||
let sourceMap;
|
||||
if (bundle.env.sourceMap && map != null) {
|
||||
sourceMap = new (_sourceMap().default)(options.projectRoot);
|
||||
sourceMap.addVLQMap(map.toJSON());
|
||||
}
|
||||
return [asset, content, sourceMap];
|
||||
}
|
||||
function escapeDashedIdent(name) {
|
||||
// https://drafts.csswg.org/cssom/#serialize-an-identifier
|
||||
let res = '';
|
||||
for (let c of name) {
|
||||
let code = c.codePointAt(0);
|
||||
if (code === 0) {
|
||||
res += '\ufffd';
|
||||
} else if (code >= 0x1 && code <= 0x1f || code === 0x7f) {
|
||||
res += '\\' + code.toString(16) + ' ';
|
||||
} else if (code >= 48 /* '0' */ && code <= 57 /* '9' */ || code >= 65 /* 'A' */ && code <= 90 /* 'Z' */ || code >= 97 /* 'a' */ && code <= 122 /* 'z' */ || code === 95 /* '_' */ || code === 45 /* '-' */ || code & 128 // non-ascii
|
||||
) {
|
||||
res += c;
|
||||
} else {
|
||||
res += '\\' + c;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
38
webGl/my-threejs-test/node_modules/@parcel/packager-css/package.json
generated
vendored
Normal file
38
webGl/my-threejs-test/node_modules/@parcel/packager-css/package.json
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "@parcel/packager-css",
|
||||
"version": "2.12.0",
|
||||
"license": "MIT",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/parcel"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/parcel-bundler/parcel.git"
|
||||
},
|
||||
"main": "lib/CSSPackager.js",
|
||||
"source": "src/CSSPackager.js",
|
||||
"engines": {
|
||||
"node": ">= 12.0.0",
|
||||
"parcel": "^2.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@parcel/diagnostic": "2.12.0",
|
||||
"@parcel/plugin": "2.12.0",
|
||||
"@parcel/source-map": "^2.1.1",
|
||||
"@parcel/utils": "2.12.0",
|
||||
"lightningcss": "^1.22.1",
|
||||
"nullthrows": "^1.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"lightningcss-wasm": "^1.22.1",
|
||||
"postcss": "^8.4.5"
|
||||
},
|
||||
"browser": {
|
||||
"lightningcss": "lightningcss-wasm"
|
||||
},
|
||||
"gitHead": "2059029ee91e5f03a273b0954d3e629d7375f986"
|
||||
}
|
374
webGl/my-threejs-test/node_modules/@parcel/packager-css/src/CSSPackager.js
generated
vendored
Normal file
374
webGl/my-threejs-test/node_modules/@parcel/packager-css/src/CSSPackager.js
generated
vendored
Normal file
@@ -0,0 +1,374 @@
|
||||
// @flow
|
||||
|
||||
import type {Root} from 'postcss';
|
||||
import type {Asset, Dependency} from '@parcel/types';
|
||||
import typeof PostCSS from 'postcss';
|
||||
// $FlowFixMe - init for browser build.
|
||||
import init, {bundleAsync} from 'lightningcss';
|
||||
|
||||
import invariant from 'assert';
|
||||
import nullthrows from 'nullthrows';
|
||||
import SourceMap from '@parcel/source-map';
|
||||
import {Packager} from '@parcel/plugin';
|
||||
import {convertSourceLocationToHighlight} from '@parcel/diagnostic';
|
||||
import {
|
||||
PromiseQueue,
|
||||
replaceInlineReferences,
|
||||
replaceURLReferences,
|
||||
} from '@parcel/utils';
|
||||
|
||||
export default (new Packager({
|
||||
async package({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
getInlineBundleContents,
|
||||
getSourceMapReference,
|
||||
logger,
|
||||
options,
|
||||
}) {
|
||||
// Inline style attributes are parsed differently from full CSS files.
|
||||
if (bundle.bundleBehavior === 'inline') {
|
||||
let entry = bundle.getMainEntry();
|
||||
if (entry?.meta.type === 'attr') {
|
||||
return replaceReferences(
|
||||
bundle,
|
||||
bundleGraph,
|
||||
await entry.getCode(),
|
||||
await entry.getMap(),
|
||||
getInlineBundleContents,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let queue = new PromiseQueue({
|
||||
maxConcurrent: 32,
|
||||
});
|
||||
let hoistedImports = [];
|
||||
let assetsByPlaceholder = new Map();
|
||||
let entry = null;
|
||||
let entryContents = '';
|
||||
|
||||
bundle.traverse({
|
||||
enter: (node, context) => {
|
||||
if (node.type === 'asset' && !context) {
|
||||
// If there is only one entry, we'll use it directly.
|
||||
// Otherwise, we'll create a fake bundle entry with @import rules for each root asset.
|
||||
if (entry == null) {
|
||||
entry = node.value.id;
|
||||
} else {
|
||||
entry = bundle.id;
|
||||
}
|
||||
|
||||
assetsByPlaceholder.set(node.value.id, node.value);
|
||||
entryContents += `@import "${node.value.id}";\n`;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
exit: node => {
|
||||
if (node.type === 'dependency') {
|
||||
let resolved = bundleGraph.getResolvedAsset(node.value, bundle);
|
||||
|
||||
// Hoist unresolved external dependencies (i.e. http: imports)
|
||||
if (
|
||||
node.value.priority === 'sync' &&
|
||||
!bundleGraph.isDependencySkipped(node.value) &&
|
||||
!resolved
|
||||
) {
|
||||
hoistedImports.push(node.value.specifier);
|
||||
}
|
||||
|
||||
if (resolved && bundle.hasAsset(resolved)) {
|
||||
assetsByPlaceholder.set(
|
||||
node.value.meta.placeholder ?? node.value.specifier,
|
||||
resolved,
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let asset = node.value;
|
||||
queue.add(() => {
|
||||
if (
|
||||
!asset.symbols.isCleared &&
|
||||
options.mode === 'production' &&
|
||||
asset.astGenerator?.type === 'postcss'
|
||||
) {
|
||||
// a CSS Modules asset
|
||||
return processCSSModule(
|
||||
options,
|
||||
logger,
|
||||
bundleGraph,
|
||||
bundle,
|
||||
asset,
|
||||
);
|
||||
} else {
|
||||
return Promise.all([
|
||||
asset,
|
||||
asset.getCode().then((css: string) => {
|
||||
// Replace CSS variable references with resolved symbols.
|
||||
if (asset.meta.hasReferences) {
|
||||
let replacements = new Map();
|
||||
for (let dep of asset.getDependencies()) {
|
||||
for (let [exported, {local}] of dep.symbols) {
|
||||
let resolved = bundleGraph.getResolvedAsset(dep, bundle);
|
||||
if (resolved) {
|
||||
let resolution = bundleGraph.getSymbolResolution(
|
||||
resolved,
|
||||
exported,
|
||||
bundle,
|
||||
);
|
||||
if (resolution.symbol) {
|
||||
replacements.set(local, resolution.symbol);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (replacements.size > 0) {
|
||||
let regex = new RegExp(
|
||||
[...replacements.keys()].join('|'),
|
||||
'g',
|
||||
);
|
||||
css = css.replace(regex, m =>
|
||||
escapeDashedIdent(replacements.get(m) || m),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return css;
|
||||
}),
|
||||
bundle.env.sourceMap ? asset.getMap() : null,
|
||||
]);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
let outputs = new Map(
|
||||
(await queue.run()).map(([asset, code, map]) => [asset, [code, map]]),
|
||||
);
|
||||
let map = new SourceMap(options.projectRoot);
|
||||
|
||||
// $FlowFixMe
|
||||
if (process.browser) {
|
||||
await init();
|
||||
}
|
||||
|
||||
let res = await bundleAsync({
|
||||
filename: nullthrows(entry),
|
||||
sourceMap: !!bundle.env.sourceMap,
|
||||
resolver: {
|
||||
resolve(specifier) {
|
||||
return specifier;
|
||||
},
|
||||
async read(file) {
|
||||
if (file === bundle.id) {
|
||||
return entryContents;
|
||||
}
|
||||
|
||||
let asset = assetsByPlaceholder.get(file);
|
||||
if (!asset) {
|
||||
return '';
|
||||
}
|
||||
let [code, map] = nullthrows(outputs.get(asset));
|
||||
if (map) {
|
||||
let sm = await map.stringify({format: 'inline'});
|
||||
invariant(typeof sm === 'string');
|
||||
code += `\n/*# sourceMappingURL=${sm} */`;
|
||||
}
|
||||
return code;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
let contents = res.code.toString();
|
||||
|
||||
if (res.map) {
|
||||
let vlqMap = JSON.parse(res.map.toString());
|
||||
map.addVLQMap(vlqMap);
|
||||
let reference = await getSourceMapReference(map);
|
||||
if (reference != null) {
|
||||
contents += '/*# sourceMappingURL=' + reference + ' */\n';
|
||||
}
|
||||
}
|
||||
|
||||
// Prepend hoisted external imports.
|
||||
if (hoistedImports.length > 0) {
|
||||
let lineOffset = 0;
|
||||
let hoistedCode = '';
|
||||
for (let url of hoistedImports) {
|
||||
hoistedCode += `@import "${url}";\n`;
|
||||
lineOffset++;
|
||||
}
|
||||
|
||||
if (bundle.env.sourceMap) {
|
||||
map.offsetLines(1, lineOffset);
|
||||
}
|
||||
|
||||
contents = hoistedCode + contents;
|
||||
}
|
||||
|
||||
return replaceReferences(
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
map,
|
||||
getInlineBundleContents,
|
||||
);
|
||||
},
|
||||
}): Packager);
|
||||
|
||||
function replaceReferences(
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
map,
|
||||
getInlineBundleContents,
|
||||
) {
|
||||
({contents, map} = replaceURLReferences({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
map,
|
||||
getReplacement: escapeString,
|
||||
}));
|
||||
|
||||
return replaceInlineReferences({
|
||||
bundle,
|
||||
bundleGraph,
|
||||
contents,
|
||||
getInlineBundleContents,
|
||||
getInlineReplacement: (dep, inlineType, contents) => ({
|
||||
from: getSpecifier(dep),
|
||||
to: escapeString(contents),
|
||||
}),
|
||||
map,
|
||||
});
|
||||
}
|
||||
|
||||
export function getSpecifier(dep: Dependency): string {
|
||||
if (typeof dep.meta.placeholder === 'string') {
|
||||
return dep.meta.placeholder;
|
||||
}
|
||||
|
||||
return dep.id;
|
||||
}
|
||||
|
||||
function escapeString(contents: string): string {
|
||||
return contents.replace(/(["\\])/g, '\\$1');
|
||||
}
|
||||
|
||||
async function processCSSModule(
|
||||
options,
|
||||
logger,
|
||||
bundleGraph,
|
||||
bundle,
|
||||
asset,
|
||||
): Promise<[Asset, string, ?SourceMap]> {
|
||||
let postcss: PostCSS = await options.packageManager.require(
|
||||
'postcss',
|
||||
options.projectRoot + '/index',
|
||||
{
|
||||
range: '^8.4.5',
|
||||
saveDev: true,
|
||||
shouldAutoInstall: options.shouldAutoInstall,
|
||||
},
|
||||
);
|
||||
|
||||
let ast: Root = postcss.fromJSON(nullthrows((await asset.getAST())?.program));
|
||||
|
||||
let usedSymbols = bundleGraph.getUsedSymbols(asset);
|
||||
if (usedSymbols != null) {
|
||||
let localSymbols = new Set(
|
||||
[...asset.symbols].map(([, {local}]) => `.${local}`),
|
||||
);
|
||||
|
||||
let defaultImport = null;
|
||||
if (usedSymbols.has('default')) {
|
||||
let incoming = bundleGraph.getIncomingDependencies(asset);
|
||||
defaultImport = incoming.find(d => d.symbols.hasExportSymbol('default'));
|
||||
if (defaultImport) {
|
||||
let loc = defaultImport.symbols.get('default')?.loc;
|
||||
logger.warn({
|
||||
message:
|
||||
'CSS modules cannot be tree shaken when imported with a default specifier',
|
||||
...(loc && {
|
||||
codeFrames: [
|
||||
{
|
||||
filePath: nullthrows(loc?.filePath ?? defaultImport.sourcePath),
|
||||
codeHighlights: [convertSourceLocationToHighlight(loc)],
|
||||
},
|
||||
],
|
||||
}),
|
||||
hints: [
|
||||
`Instead do: import * as style from "${defaultImport.specifier}";`,
|
||||
],
|
||||
documentationURL: 'https://parceljs.org/languages/css/#tree-shaking',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!defaultImport && !usedSymbols.has('*')) {
|
||||
let usedLocalSymbols = new Set(
|
||||
[...usedSymbols].map(
|
||||
exportSymbol =>
|
||||
`.${nullthrows(asset.symbols.get(exportSymbol)).local}`,
|
||||
),
|
||||
);
|
||||
ast.walkRules(rule => {
|
||||
if (
|
||||
localSymbols.has(rule.selector) &&
|
||||
!usedLocalSymbols.has(rule.selector)
|
||||
) {
|
||||
rule.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let {content, map} = await postcss().process(ast, {
|
||||
from: undefined,
|
||||
to: options.projectRoot + '/index',
|
||||
map: {
|
||||
annotation: false,
|
||||
inline: false,
|
||||
},
|
||||
// Pass postcss's own stringifier to it to silence its warning
|
||||
// as we don't want to perform any transformations -- only generate
|
||||
stringifier: postcss.stringify,
|
||||
});
|
||||
|
||||
let sourceMap;
|
||||
if (bundle.env.sourceMap && map != null) {
|
||||
sourceMap = new SourceMap(options.projectRoot);
|
||||
sourceMap.addVLQMap(map.toJSON());
|
||||
}
|
||||
|
||||
return [asset, content, sourceMap];
|
||||
}
|
||||
|
||||
function escapeDashedIdent(name) {
|
||||
// https://drafts.csswg.org/cssom/#serialize-an-identifier
|
||||
let res = '';
|
||||
for (let c of name) {
|
||||
let code = c.codePointAt(0);
|
||||
if (code === 0) {
|
||||
res += '\ufffd';
|
||||
} else if ((code >= 0x1 && code <= 0x1f) || code === 0x7f) {
|
||||
res += '\\' + code.toString(16) + ' ';
|
||||
} else if (
|
||||
(code >= 48 /* '0' */ && code <= 57) /* '9' */ ||
|
||||
(code >= 65 /* 'A' */ && code <= 90) /* 'Z' */ ||
|
||||
(code >= 97 /* 'a' */ && code <= 122) /* 'z' */ ||
|
||||
code === 95 /* '_' */ ||
|
||||
code === 45 /* '-' */ ||
|
||||
code & 128 // non-ascii
|
||||
) {
|
||||
res += c;
|
||||
} else {
|
||||
res += '\\' + c;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
Reference in New Issue
Block a user