@atlaspack/transformer-html 2.14.5-canary.31 → 2.14.5-canary.311

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/inline.js ADDED
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = extractInlineAssets;
7
+ const rust_1 = require("@atlaspack/rust");
8
+ const posthtml_1 = __importDefault(require("posthtml"));
9
+ const SCRIPT_TYPES = {
10
+ 'application/javascript': 'js',
11
+ 'text/javascript': 'js',
12
+ 'application/json': false,
13
+ 'application/ld+json': 'jsonld',
14
+ 'text/html': false,
15
+ module: 'js',
16
+ };
17
+ function extractInlineAssets(asset, ast) {
18
+ let program = ast.program;
19
+ let key = 0;
20
+ // Extract inline <script> and <style> tags for processing.
21
+ let parts = [];
22
+ let hasModuleScripts = false;
23
+ // @ts-expect-error TS2339
24
+ (0, posthtml_1.default)().walk.call(program, (node) => {
25
+ let parcelKey = (0, rust_1.hashString)(`${asset.id}:${key++}`);
26
+ if (node.tag === 'script' || node.tag === 'style') {
27
+ let value = node.content && node.content.join('');
28
+ if (value != null) {
29
+ let type, env;
30
+ if (node.tag === 'style') {
31
+ if (node.attrs && node.attrs.type != null) {
32
+ type = node.attrs.type.split('/')[1];
33
+ }
34
+ else {
35
+ type = 'css';
36
+ }
37
+ }
38
+ else if (node.attrs && node.attrs.type != null) {
39
+ // Skip JSON
40
+ // @ts-expect-error TS7053
41
+ if (SCRIPT_TYPES[node.attrs.type] === false) {
42
+ return node;
43
+ }
44
+ // @ts-expect-error TS7053
45
+ if (SCRIPT_TYPES[node.attrs.type]) {
46
+ // @ts-expect-error TS7053
47
+ type = SCRIPT_TYPES[node.attrs.type];
48
+ }
49
+ else {
50
+ type = node.attrs.type.split('/')[1];
51
+ }
52
+ let outputFormat = 'global';
53
+ let sourceType = 'script';
54
+ let attrs = node.attrs;
55
+ if (attrs && attrs.type === 'module') {
56
+ if (asset.env.shouldScopeHoist &&
57
+ asset.env.supports('esmodules', true)) {
58
+ outputFormat = 'esmodule';
59
+ }
60
+ else {
61
+ delete attrs.type;
62
+ }
63
+ sourceType = 'module';
64
+ }
65
+ let loc = node.location
66
+ ? {
67
+ filePath: asset.filePath,
68
+ start: node.location.start,
69
+ end: node.location.end,
70
+ }
71
+ : undefined;
72
+ env = {
73
+ sourceType,
74
+ outputFormat,
75
+ loc,
76
+ };
77
+ }
78
+ else {
79
+ let loc = node.location
80
+ ? {
81
+ filePath: asset.filePath,
82
+ start: node.location.start,
83
+ end: node.location.end,
84
+ }
85
+ : undefined;
86
+ type = 'js';
87
+ env = {
88
+ sourceType: 'script',
89
+ loc,
90
+ };
91
+ }
92
+ if (!type) {
93
+ return node;
94
+ }
95
+ if (!node.attrs) {
96
+ node.attrs = {};
97
+ }
98
+ // allow a script/style tag to declare its key
99
+ if (node.attrs['data-parcel-key']) {
100
+ parcelKey = node.attrs['data-parcel-key'];
101
+ }
102
+ // Inform packager to remove type, since CSS and JS are the defaults.
103
+ if (node.attrs?.type && node.tag === 'style') {
104
+ delete node.attrs.type;
105
+ }
106
+ let bundleBehavior = 'inline';
107
+ if (typeof node.attrs['data-atlaspack-isolated'] !== 'undefined') {
108
+ bundleBehavior = 'inlineIsolated';
109
+ delete node.attrs['data-atlaspack-isolated'];
110
+ }
111
+ // insert parcelId to allow us to retrieve node during packaging
112
+ node.attrs['data-parcel-key'] = parcelKey;
113
+ asset.setAST(ast); // mark dirty
114
+ asset.addDependency({
115
+ specifier: parcelKey,
116
+ specifierType: 'esm',
117
+ });
118
+ parts.push({
119
+ type,
120
+ content: value,
121
+ uniqueKey: parcelKey,
122
+ bundleBehavior,
123
+ // @ts-expect-error TS2322
124
+ env,
125
+ meta: {
126
+ type: 'tag',
127
+ node,
128
+ startLine: node.location?.start.line,
129
+ },
130
+ });
131
+ if (env && env.sourceType === 'module') {
132
+ hasModuleScripts = true;
133
+ }
134
+ }
135
+ }
136
+ // Process inline style attributes.
137
+ let attrs = node.attrs;
138
+ let style = attrs?.style;
139
+ if (attrs != null && style != null) {
140
+ attrs.style = asset.addDependency({
141
+ specifier: parcelKey,
142
+ specifierType: 'esm',
143
+ });
144
+ asset.setAST(ast); // mark dirty
145
+ parts.push({
146
+ type: 'css',
147
+ content: style,
148
+ uniqueKey: parcelKey,
149
+ bundleBehavior: 'inline',
150
+ meta: {
151
+ type: 'attr',
152
+ node,
153
+ },
154
+ });
155
+ }
156
+ return node;
157
+ });
158
+ return {
159
+ assets: parts,
160
+ hasModuleScripts,
161
+ };
162
+ }
@@ -58,6 +58,8 @@ function _diagnostic() {
58
58
  return data;
59
59
  }
60
60
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
61
+ // @ts-expect-error TS2305
62
+
61
63
  function parseHTML(code, xmlMode) {
62
64
  return {
63
65
  type: 'posthtml',
@@ -156,6 +158,7 @@ const transformerOpts = exports.transformerOpts = {
156
158
  }) {
157
159
  return {
158
160
  content: (0, _posthtmlRender().render)(ast.program, {
161
+ // @ts-expect-error TS2322
159
162
  closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined
160
163
  })
161
164
  };
@@ -165,6 +168,7 @@ var _default = exports.default = new (_plugin().Transformer)(transformerOpts);
165
168
  function findFirstMatch(ast, expressions) {
166
169
  let found;
167
170
  for (const expression of expressions) {
171
+ // @ts-expect-error TS2339
168
172
  (0, _posthtml().default)().match.call(ast.program, expression, node => {
169
173
  found = node;
170
174
  return node;
@@ -19,6 +19,8 @@ function _srcset() {
19
19
  return data;
20
20
  }
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ // @ts-expect-error TS2724
23
+
22
24
  // A list of all attributes that may produce a dependency
23
25
  // Based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
24
26
  const ATTRS = {
@@ -89,6 +91,7 @@ function collectDependencies(asset, ast) {
89
91
  let hasModuleScripts = false;
90
92
  let seen = new Set();
91
93
  let errors = [];
94
+ // @ts-expect-error TS2339
92
95
  (0, _posthtml().default)().walk.call(ast.program, node => {
93
96
  let {
94
97
  tag,
@@ -100,6 +103,7 @@ function collectDependencies(asset, ast) {
100
103
  seen.add(node);
101
104
  if (tag === 'meta') {
102
105
  const isMetaDependency = Object.keys(attrs).some(attr => {
106
+ // @ts-expect-error TS7053
103
107
  let values = META[attr];
104
108
  return values && values.includes(attrs[attr]) && attrs.content !== '' && !(attrs.name === 'msapplication-config' && attrs.content === 'none');
105
109
  });
@@ -169,6 +173,7 @@ function collectDependencies(asset, ast) {
169
173
  priority: 'parallel',
170
174
  bundleBehavior: sourceType === 'script' || attrs.async != null ? 'isolated' : undefined,
171
175
  env: {
176
+ // @ts-expect-error TS2322
172
177
  sourceType,
173
178
  outputFormat: 'global',
174
179
  loc
@@ -185,7 +190,9 @@ function collectDependencies(asset, ast) {
185
190
  // because nomodule scripts won't run when modules are supported.
186
191
  bundleBehavior: sourceType === 'script' || attrs.async != null ? 'isolated' : undefined,
187
192
  env: {
193
+ // @ts-expect-error TS2322
188
194
  sourceType,
195
+ // @ts-expect-error TS2322
189
196
  outputFormat,
190
197
  loc
191
198
  }
@@ -204,6 +211,8 @@ function collectDependencies(asset, ast) {
204
211
  if (attrs[attr][0] === '#') {
205
212
  continue;
206
213
  }
214
+
215
+ // @ts-expect-error TS7053
207
216
  let elements = ATTRS[attr];
208
217
  if (elements && elements.includes(node.tag)) {
209
218
  // Check for empty string
@@ -215,6 +224,7 @@ function collectDependencies(asset, ast) {
215
224
  });
216
225
  }
217
226
  let depHandler = getAttrDepHandler(attr);
227
+ // @ts-expect-error TS7053
218
228
  let depOptionsHandler = OPTIONS[node.tag];
219
229
  let depOptions = typeof depOptionsHandler === 'function' ? depOptionsHandler(attrs, asset.env) : depOptionsHandler && depOptionsHandler[attr];
220
230
  attrs[attr] = depHandler(asset, attrs[attr], depOptions);
package/lib/inline.js CHANGED
@@ -19,6 +19,8 @@ function _posthtml() {
19
19
  return data;
20
20
  }
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ // @ts-expect-error TS2724
23
+
22
24
  const SCRIPT_TYPES = {
23
25
  'application/javascript': 'js',
24
26
  'text/javascript': 'js',
@@ -34,6 +36,7 @@ function extractInlineAssets(asset, ast) {
34
36
  // Extract inline <script> and <style> tags for processing.
35
37
  let parts = [];
36
38
  let hasModuleScripts = false;
39
+ // @ts-expect-error TS2339
37
40
  (0, _posthtml().default)().walk.call(program, node => {
38
41
  let parcelKey = (0, _rust().hashString)(`${asset.id}:${key++}`);
39
42
  if (node.tag === 'script' || node.tag === 'style') {
@@ -49,10 +52,14 @@ function extractInlineAssets(asset, ast) {
49
52
  }
50
53
  } else if (node.attrs && node.attrs.type != null) {
51
54
  // Skip JSON
55
+ // @ts-expect-error TS7053
52
56
  if (SCRIPT_TYPES[node.attrs.type] === false) {
53
57
  return node;
54
58
  }
59
+
60
+ // @ts-expect-error TS7053
55
61
  if (SCRIPT_TYPES[node.attrs.type]) {
62
+ // @ts-expect-error TS7053
56
63
  type = SCRIPT_TYPES[node.attrs.type];
57
64
  } else {
58
65
  type = node.attrs.type.split('/')[1];
@@ -106,6 +113,11 @@ function extractInlineAssets(asset, ast) {
106
113
  if ((_node$attrs = node.attrs) !== null && _node$attrs !== void 0 && _node$attrs.type && node.tag === 'style') {
107
114
  delete node.attrs.type;
108
115
  }
116
+ let bundleBehavior = 'inline';
117
+ if (typeof node.attrs['data-atlaspack-isolated'] !== 'undefined') {
118
+ bundleBehavior = 'inlineIsolated';
119
+ delete node.attrs['data-atlaspack-isolated'];
120
+ }
109
121
 
110
122
  // insert parcelId to allow us to retrieve node during packaging
111
123
  node.attrs['data-parcel-key'] = parcelKey;
@@ -119,11 +131,11 @@ function extractInlineAssets(asset, ast) {
119
131
  type,
120
132
  content: value,
121
133
  uniqueKey: parcelKey,
122
- bundleBehavior: 'inline',
134
+ bundleBehavior,
135
+ // @ts-expect-error TS2322
123
136
  env,
124
137
  meta: {
125
138
  type: 'tag',
126
- // $FlowFixMe
127
139
  node,
128
140
  startLine: (_node$location = node.location) === null || _node$location === void 0 ? void 0 : _node$location.start.line
129
141
  }
@@ -151,7 +163,6 @@ function extractInlineAssets(asset, ast) {
151
163
  bundleBehavior: 'inline',
152
164
  meta: {
153
165
  type: 'attr',
154
- // $FlowFixMe
155
166
  node
156
167
  }
157
168
  });
@@ -0,0 +1,6 @@
1
+ import { Transformer } from '@atlaspack/plugin';
2
+ import type { AST, Transformer as TransformerOpts } from '@atlaspack/types';
3
+ export declare function parseHTML(code: string, xmlMode: boolean): AST;
4
+ export declare const transformerOpts: TransformerOpts<undefined>;
5
+ declare const _default: Transformer<undefined>;
6
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import type { AST, MutableAsset } from '@atlaspack/types';
2
+ export default function collectDependencies(asset: MutableAsset, ast: AST): boolean;
@@ -0,0 +1,7 @@
1
+ import type { AST, MutableAsset, TransformerResult } from '@atlaspack/types';
2
+ interface ExtractInlineAssetsResult {
3
+ hasModuleScripts: boolean;
4
+ assets: Array<TransformerResult>;
5
+ }
6
+ export default function extractInlineAssets(asset: MutableAsset, ast: AST): ExtractInlineAssetsResult;
7
+ export {};
package/package.json CHANGED
@@ -1,26 +1,29 @@
1
1
  {
2
2
  "name": "@atlaspack/transformer-html",
3
- "version": "2.14.5-canary.31+e05252108",
3
+ "version": "2.14.5-canary.311+38f3569a7",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "scripts": {
9
- "test": "mocha"
9
+ "test": "mocha",
10
+ "build:lib": "gulp build --gulpfile ../../../gulpfile.js --cwd ."
10
11
  },
11
12
  "repository": {
12
13
  "type": "git",
13
14
  "url": "https://github.com/atlassian-labs/atlaspack.git"
14
15
  },
15
- "main": "lib/HTMLTransformer.js",
16
- "source": "src/HTMLTransformer.js",
16
+ "main": "./lib/HTMLTransformer.js",
17
+ "source": "./src/HTMLTransformer.ts",
18
+ "types": "./lib/types/HTMLTransformer.d.ts",
17
19
  "engines": {
18
20
  "node": ">= 16.0.0"
19
21
  },
20
22
  "dependencies": {
21
- "@atlaspack/diagnostic": "2.14.1-canary.99+e05252108",
22
- "@atlaspack/plugin": "2.14.5-canary.31+e05252108",
23
- "@atlaspack/rust": "3.2.1-canary.31+e05252108",
23
+ "@atlaspack/diagnostic": "2.14.1-canary.379+38f3569a7",
24
+ "@atlaspack/feature-flags": "2.14.1-canary.379+38f3569a7",
25
+ "@atlaspack/plugin": "2.14.5-canary.311+38f3569a7",
26
+ "@atlaspack/rust": "3.2.1-canary.311+38f3569a7",
24
27
  "nullthrows": "^1.1.1",
25
28
  "posthtml": "^0.16.5",
26
29
  "posthtml-parser": "^0.10.1",
@@ -29,8 +32,8 @@
29
32
  "srcset": "4"
30
33
  },
31
34
  "devDependencies": {
32
- "@atlaspack/core": "2.16.2-canary.31+e05252108"
35
+ "@atlaspack/core": "2.16.2-canary.311+38f3569a7"
33
36
  },
34
37
  "type": "commonjs",
35
- "gitHead": "e0525210850ed1606146eb86991049cf567c5dec"
36
- }
38
+ "gitHead": "38f3569a7024357c43274666312bc6d024bfe5f9"
39
+ }
@@ -1,9 +1,8 @@
1
- // @flow
2
-
3
1
  import {Transformer} from '@atlaspack/plugin';
4
2
  import type {AST, Transformer as TransformerOpts} from '@atlaspack/types';
5
3
  import {parser as parse} from 'posthtml-parser';
6
4
  import nullthrows from 'nullthrows';
5
+ // @ts-expect-error TS2305
7
6
  import type {PostHTMLExpression, PostHTMLNode} from 'posthtml';
8
7
  import PostHTML from 'posthtml';
9
8
  import {render} from 'posthtml-render';
@@ -25,7 +24,7 @@ export function parseHTML(code: string, xmlMode: boolean): AST {
25
24
  };
26
25
  }
27
26
 
28
- export const transformerOpts: TransformerOpts<void> = {
27
+ export const transformerOpts: TransformerOpts<undefined> = {
29
28
  canReuseAST({ast}) {
30
29
  return ast.type === 'posthtml' && semver.satisfies(ast.version, '^0.4.0');
31
30
  },
@@ -46,7 +45,7 @@ export const transformerOpts: TransformerOpts<void> = {
46
45
  let hasModuleScripts;
47
46
  try {
48
47
  hasModuleScripts = collectDependencies(asset, ast);
49
- } catch (errors) {
48
+ } catch (errors: any) {
50
49
  if (Array.isArray(errors)) {
51
50
  throw new ThrowableDiagnostic({
52
51
  diagnostic: errors.map((error) => ({
@@ -81,7 +80,7 @@ export const transformerOpts: TransformerOpts<void> = {
81
80
  }),
82
81
  },
83
82
  content: [],
84
- };
83
+ } as const;
85
84
 
86
85
  const found = findFirstMatch(ast, [{tag: 'body'}, {tag: 'html'}]);
87
86
 
@@ -108,20 +107,23 @@ export const transformerOpts: TransformerOpts<void> = {
108
107
  generate({ast, asset}) {
109
108
  return {
110
109
  content: render(ast.program, {
110
+ // @ts-expect-error TS2322
111
111
  closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined,
112
112
  }),
113
113
  };
114
114
  },
115
115
  };
116
- export default (new Transformer(transformerOpts): Transformer);
116
+
117
+ export default new Transformer(transformerOpts) as Transformer<undefined>;
117
118
 
118
119
  function findFirstMatch(
119
120
  ast: AST,
120
121
  expressions: PostHTMLExpression[],
121
- ): ?PostHTMLNode {
122
+ ): PostHTMLNode | null | undefined {
122
123
  let found;
123
124
 
124
125
  for (const expression of expressions) {
126
+ // @ts-expect-error TS2339
125
127
  PostHTML().match.call(ast.program, expression, (node) => {
126
128
  found = node;
127
129
  return node;
@@ -1,6 +1,5 @@
1
- // @flow
2
-
3
1
  import type {AST, MutableAsset, FilePath} from '@atlaspack/types';
2
+ // @ts-expect-error TS2724
4
3
  import type {PostHTMLNode} from 'posthtml';
5
4
  import PostHTML from 'posthtml';
6
5
  import {parse, stringify} from 'srcset';
@@ -26,7 +25,7 @@ const ATTRS = {
26
25
  'xlink:href': ['use', 'image', 'script'],
27
26
  content: ['meta'],
28
27
  data: ['object'],
29
- };
28
+ } as const;
30
29
 
31
30
  // A list of metadata that should produce a dependency
32
31
  // Based on:
@@ -63,7 +62,7 @@ const META = {
63
62
  'contentUrl',
64
63
  'downloadUrl',
65
64
  ],
66
- };
65
+ } as const;
67
66
 
68
67
  const FEED_TYPES = new Set(['application/rss+xml', 'application/atom+xml']);
69
68
 
@@ -75,7 +74,7 @@ const OPTIONS = {
75
74
  iframe: {
76
75
  src: {needsStableName: true},
77
76
  },
78
- link(attrs) {
77
+ link(attrs: any) {
79
78
  if (attrs.rel === 'stylesheet') {
80
79
  return {
81
80
  // Keep in the same bundle group as the HTML.
@@ -83,9 +82,13 @@ const OPTIONS = {
83
82
  };
84
83
  }
85
84
  },
86
- };
85
+ } as const;
87
86
 
88
- function collectSrcSetDependencies(asset, srcset, opts) {
87
+ function collectSrcSetDependencies(
88
+ asset: MutableAsset,
89
+ srcset: string,
90
+ opts: any,
91
+ ) {
89
92
  let parsed = parse(srcset).map(({url, ...v}) => ({
90
93
  url: asset.addURLDependency(url, opts),
91
94
  ...v,
@@ -93,12 +96,13 @@ function collectSrcSetDependencies(asset, srcset, opts) {
93
96
  return stringify(parsed);
94
97
  }
95
98
 
96
- function getAttrDepHandler(attr) {
99
+ function getAttrDepHandler(attr: string) {
97
100
  if (attr === 'srcset' || attr === 'imagesrcset') {
98
101
  return collectSrcSetDependencies;
99
102
  }
100
103
 
101
- return (asset, src, opts) => asset.addURLDependency(src, opts);
104
+ return (asset: MutableAsset, src: string, opts: any) =>
105
+ asset.addURLDependency(src, opts);
102
106
  }
103
107
 
104
108
  export default function collectDependencies(
@@ -108,11 +112,12 @@ export default function collectDependencies(
108
112
  let isDirty = false;
109
113
  let hasModuleScripts = false;
110
114
  let seen = new Set();
111
- let errors: Array<{|
112
- message: string,
113
- filePath: FilePath,
114
- loc: PostHTMLNode['location'],
115
- |}> = [];
115
+ let errors: Array<{
116
+ message: string;
117
+ filePath: FilePath;
118
+ loc: PostHTMLNode['location'];
119
+ }> = [];
120
+ // @ts-expect-error TS2339
116
121
  PostHTML().walk.call(ast.program, (node) => {
117
122
  let {tag, attrs} = node;
118
123
  if (!attrs || seen.has(node)) {
@@ -123,6 +128,7 @@ export default function collectDependencies(
123
128
 
124
129
  if (tag === 'meta') {
125
130
  const isMetaDependency = Object.keys(attrs).some((attr) => {
131
+ // @ts-expect-error TS7053
126
132
  let values = META[attr];
127
133
  return (
128
134
  values &&
@@ -197,7 +203,7 @@ export default function collectDependencies(
197
203
 
198
204
  // If this is a <script type="module">, and not all of the browser targets support ESM natively,
199
205
  // add a copy of the script tag with a nomodule attribute.
200
- let copy: ?PostHTMLNode;
206
+ let copy: PostHTMLNode | null | undefined;
201
207
  if (
202
208
  outputFormat === 'esmodule' &&
203
209
  !asset.env.supports('esmodules', true)
@@ -215,6 +221,7 @@ export default function collectDependencies(
215
221
  ? 'isolated'
216
222
  : undefined,
217
223
  env: {
224
+ // @ts-expect-error TS2322
218
225
  sourceType,
219
226
  outputFormat: 'global',
220
227
  loc,
@@ -236,7 +243,9 @@ export default function collectDependencies(
236
243
  ? 'isolated'
237
244
  : undefined,
238
245
  env: {
246
+ // @ts-expect-error TS2322
239
247
  sourceType,
248
+ // @ts-expect-error TS2322
240
249
  outputFormat,
241
250
  loc,
242
251
  },
@@ -258,6 +267,7 @@ export default function collectDependencies(
258
267
  continue;
259
268
  }
260
269
 
270
+ // @ts-expect-error TS7053
261
271
  let elements = ATTRS[attr];
262
272
  if (elements && elements.includes(node.tag)) {
263
273
  // Check for empty string
@@ -270,6 +280,7 @@ export default function collectDependencies(
270
280
  }
271
281
 
272
282
  let depHandler = getAttrDepHandler(attr);
283
+ // @ts-expect-error TS7053
273
284
  let depOptionsHandler = OPTIONS[node.tag];
274
285
  let depOptions =
275
286
  typeof depOptionsHandler === 'function'
@@ -1,10 +1,15 @@
1
- // @flow strict-local
2
-
3
- import type {AST, MutableAsset, TransformerResult} from '@atlaspack/types';
1
+ import type {
2
+ AST,
3
+ BundleBehavior,
4
+ MutableAsset,
5
+ TransformerResult,
6
+ } from '@atlaspack/types';
4
7
  import {hashString} from '@atlaspack/rust';
8
+ // @ts-expect-error TS2724
5
9
  import type {PostHTMLNode} from 'posthtml';
6
10
 
7
11
  import PostHTML from 'posthtml';
12
+ import {getFeatureFlag} from '@atlaspack/feature-flags';
8
13
 
9
14
  const SCRIPT_TYPES = {
10
15
  'application/javascript': 'js',
@@ -13,7 +18,7 @@ const SCRIPT_TYPES = {
13
18
  'application/ld+json': 'jsonld',
14
19
  'text/html': false,
15
20
  module: 'js',
16
- };
21
+ } as const;
17
22
 
18
23
  interface ExtractInlineAssetsResult {
19
24
  hasModuleScripts: boolean;
@@ -30,6 +35,7 @@ export default function extractInlineAssets(
30
35
  // Extract inline <script> and <style> tags for processing.
31
36
  let parts: Array<TransformerResult> = [];
32
37
  let hasModuleScripts = false;
38
+ // @ts-expect-error TS2339
33
39
  PostHTML().walk.call(program, (node: PostHTMLNode) => {
34
40
  let parcelKey = hashString(`${asset.id}:${key++}`);
35
41
  if (node.tag === 'script' || node.tag === 'style') {
@@ -45,11 +51,14 @@ export default function extractInlineAssets(
45
51
  }
46
52
  } else if (node.attrs && node.attrs.type != null) {
47
53
  // Skip JSON
54
+ // @ts-expect-error TS7053
48
55
  if (SCRIPT_TYPES[node.attrs.type] === false) {
49
56
  return node;
50
57
  }
51
58
 
59
+ // @ts-expect-error TS7053
52
60
  if (SCRIPT_TYPES[node.attrs.type]) {
61
+ // @ts-expect-error TS7053
53
62
  type = SCRIPT_TYPES[node.attrs.type];
54
63
  } else {
55
64
  type = node.attrs.type.split('/')[1];
@@ -117,6 +126,12 @@ export default function extractInlineAssets(
117
126
  delete node.attrs.type;
118
127
  }
119
128
 
129
+ let bundleBehavior: BundleBehavior = 'inline';
130
+ if (typeof node.attrs['data-atlaspack-isolated'] !== 'undefined') {
131
+ bundleBehavior = 'inlineIsolated';
132
+ delete node.attrs['data-atlaspack-isolated'];
133
+ }
134
+
120
135
  // insert parcelId to allow us to retrieve node during packaging
121
136
  node.attrs['data-parcel-key'] = parcelKey;
122
137
  asset.setAST(ast); // mark dirty
@@ -130,11 +145,11 @@ export default function extractInlineAssets(
130
145
  type,
131
146
  content: value,
132
147
  uniqueKey: parcelKey,
133
- bundleBehavior: 'inline',
148
+ bundleBehavior,
149
+ // @ts-expect-error TS2322
134
150
  env,
135
151
  meta: {
136
152
  type: 'tag',
137
- // $FlowFixMe
138
153
  node,
139
154
  startLine: node.location?.start.line,
140
155
  },
@@ -163,7 +178,6 @@ export default function extractInlineAssets(
163
178
  bundleBehavior: 'inline',
164
179
  meta: {
165
180
  type: 'attr',
166
- // $FlowFixMe
167
181
  node,
168
182
  },
169
183
  });