UNPKG

2.9 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
7const Asset = require('../Asset');
8
9const localRequire = require('../utils/localRequire');
10
11const path = require('path');
12
13const _require = require('@parcel/utils'),
14 promisify = _require.promisify;
15
16const Resolver = require('../Resolver');
17
18class GLSLAsset extends Asset {
19 constructor(name, options) {
20 super(name, options);
21 this.type = 'js';
22 }
23
24 parse() {
25 var _this = this;
26
27 return (0, _asyncToGenerator2.default)(function* () {
28 const glslifyDeps = yield localRequire('glslify-deps', _this.name); // Use the Parcel resolver rather than the default glslify one.
29 // This adds support for parcel features like aliases, and tilde paths.
30
31 const resolver = new Resolver({
32 extensions: ['.glsl', '.vert', '.frag'],
33 rootDir: _this.options.rootDir
34 }); // Parse and collect dependencies with glslify-deps
35
36 let cwd = path.dirname(_this.name);
37 let depper = glslifyDeps({
38 cwd,
39 resolve: function () {
40 var _resolve = (0, _asyncToGenerator2.default)(function* (target, opts, next) {
41 try {
42 let res = yield resolver.resolve(target, path.join(opts.basedir, 'index'));
43 next(null, res.path);
44 } catch (err) {
45 next(err);
46 }
47 });
48
49 return function resolve(_x, _x2, _x3) {
50 return _resolve.apply(this, arguments);
51 };
52 }()
53 });
54 return promisify(depper.inline.bind(depper))(_this.contents, cwd);
55 })();
56 }
57
58 collectDependencies() {
59 var _iteratorNormalCompletion = true;
60 var _didIteratorError = false;
61 var _iteratorError = undefined;
62
63 try {
64 for (var _iterator = this.ast[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
65 let dep = _step.value;
66
67 if (!dep.entry) {
68 this.addDependency(dep.file, {
69 includedInParent: true
70 });
71 }
72 }
73 } catch (err) {
74 _didIteratorError = true;
75 _iteratorError = err;
76 } finally {
77 try {
78 if (!_iteratorNormalCompletion && _iterator.return != null) {
79 _iterator.return();
80 }
81 } finally {
82 if (_didIteratorError) {
83 throw _iteratorError;
84 }
85 }
86 }
87 }
88
89 generate() {
90 var _this2 = this;
91
92 return (0, _asyncToGenerator2.default)(function* () {
93 // Generate the bundled glsl file
94 const glslifyBundle = yield localRequire('glslify-bundle', _this2.name);
95 let glsl = glslifyBundle(_this2.ast);
96 return `module.exports=${JSON.stringify(glsl)};`;
97 })();
98 }
99
100}
101
102module.exports = GLSLAsset;
\No newline at end of file