@arcgis/lumina-compiler 4.34.0-next.16 → 4.34.0-next.160

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.
Files changed (36) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -10
  3. package/dist/context/index.d.ts +12 -2
  4. package/dist/dependencies/arcgisCore.d.ts +1 -1
  5. package/dist/dependencies/discover.d.ts +7 -2
  6. package/dist/dependencies/lumina.d.ts +1 -1
  7. package/dist/dependencies/stencil.d.ts +2 -2
  8. package/dist/dependencies/testSetupFiles.d.ts +1 -0
  9. package/dist/dependencies/updateLumina.d.ts +3 -3
  10. package/dist/entrypoints/resolveTagName.d.ts +2 -2
  11. package/dist/frameworkTypes/preact.d.ts +1 -0
  12. package/dist/frameworkTypes/preact10.d.ts +10 -0
  13. package/dist/index.js +2397 -2317
  14. package/dist/jsxToLitHtml/importsConfig.d.ts +10 -0
  15. package/dist/jsxToLitHtml/types.d.ts +4 -2
  16. package/dist/loader/{hideUntilHydrated.d.ts → css.d.ts} +6 -1
  17. package/dist/loader/index.d.ts +1 -1
  18. package/dist/loader/lazy.d.ts +1 -1
  19. package/dist/logger-hJvg0JOj.js +34 -0
  20. package/dist/plugins/buildCdn.d.ts +6 -0
  21. package/dist/plugins/loadLitCss.d.ts +52 -11
  22. package/dist/publicTypes.d.ts +70 -118
  23. package/dist/puppeteerTesting/globalSetup.d.ts +1 -1
  24. package/dist/puppeteerTesting/index.js +1 -1
  25. package/dist/puppeteerTesting/vitest/matchers/index.d.ts +12 -12
  26. package/dist/testing/failOnConsole.d.ts +6 -0
  27. package/dist/testing/index.js +79 -60
  28. package/dist/testing/mount.d.ts +2 -2
  29. package/dist/testing/vitestTypes.d.ts +8 -0
  30. package/dist/transformers/injectRuntimeOptions.d.ts +12 -2
  31. package/dist/transformers/internalTypeScriptApis.d.ts +4 -1
  32. package/dist/transformers/utils.d.ts +2 -7
  33. package/package.json +20 -18
  34. package/dist/jsxToLitHtml/escapeForTemplateLiteral.d.ts +0 -45
  35. package/dist/logger-KpGU2b3R.js +0 -28
  36. package/dist/plugins/buildStencilHydrate.d.ts +0 -16
@@ -0,0 +1,10 @@
1
+ import { JsxImportName } from './types';
2
+ /**
3
+ * Most Lit API's are re-exported from multiple packages. Because only Lit
4
+ * package is declared as an explicit dependency, Lumina's auto-inserted imports
5
+ * should only import from the Lit package (from the first import path in the
6
+ * lists below). However, to avoid double-importing things if the file already
7
+ * imports these APIs from another package, we need to check for all the places
8
+ * that export these APIs (the 2nd+ items in the lists below).
9
+ */
10
+ export declare const dynamicallyInsertedImportsByName: Record<JsxImportName, string[]>;
@@ -63,10 +63,12 @@ export declare const ambiguousSvgTag: unique symbol;
63
63
  export declare const cssTag = "css";
64
64
  export declare const mathMlTag = "mathml";
65
65
  declare const litTagsArray: readonly ["css", "html", "mathml", "staticHtml", "staticSvg", "svg"];
66
- export declare const litTags: Set<"html" | "css" | "mathml" | "staticHtml" | "staticSvg" | "svg">;
66
+ export declare const litTags: Set<"html" | "svg" | "css" | "mathml" | "staticHtml" | "staticSvg">;
67
67
  export type LitTag = (typeof litTagsArray)[number];
68
- export declare const jsxImportNames: readonly ["keyed", "ref", "repeat", "live", "css", "html", "mathml", "staticHtml", "staticSvg", "svg", "safeClassMap", "safeStyleMap", "deferLoad", "nothing"];
68
+ export declare const jsxImportNames: readonly ["keyed", "ref", "repeat", "live", "css", "html", "mathml", "staticHtml", "staticSvg", "svg", "safeClassMap", "safeStyleMap", "deferLoad", "stabilizedRef", "nothing"];
69
69
  export type JsxImportName = (typeof jsxImportNames)[number];
70
70
  export type JsxHost = ts.JsxElement | ts.JsxFragment | ts.JsxSelfClosingElement;
71
+ /** Returns `true` if the given node is an array expression containing jsx nodes */
72
+ export declare const isJsxArray: (node: ts.Node) => node is ts.ArrayLiteralExpression;
71
73
  export declare const isJsxHost: (node: ts.Node) => node is JsxHost;
72
74
  export {};
@@ -9,7 +9,12 @@ export declare const defaultHydratedAttribute = "hydrated";
9
9
  * @see https://discord.com/channels/1012791295170859069/1274527043614150708
10
10
  */
11
11
  export declare function getGlobalCssInjectionCode(globalCssString: string | undefined, context: CompilerContext): string;
12
- /**
12
+ /**a
13
13
  * Get a CSS string that can be printed into a .css file
14
+ *
15
+ * Global CSS is auto-imported by bundlers. To ensure it is always loaded with
16
+ * lower precedence order than user styles, we wrap it in `@layer{}`.
17
+ *
18
+ * @see https://devtopia.esri.com/WebGIS/arcgis-web-components/discussions/1824#discussioncomment-12625
14
19
  */
15
20
  export declare const getGlobalCssAsString: (context: CompilerContext) => string;
@@ -10,4 +10,4 @@ import { CompilerContext } from '../context';
10
10
  * The generated api.json is then used by componentTransformPipeline() and by
11
11
  * generateDocs(), among others.
12
12
  */
13
- export declare function generateVirtualFiles(context: CompilerContext): VitePlugin;
13
+ export declare function generateVirtualFiles(context: CompilerContext): readonly [VitePlugin, VitePlugin];
@@ -15,7 +15,7 @@ export declare const loaderDts = "import \"./index\";\nexport declare const defi
15
15
  * properties, attributes, asynchronous methods and synchronous methods.
16
16
  */
17
17
  declare function buildCompactLazyMeta(customElement: Pick<ApiCustomElementDeclaration, "members" | "tagName">): string;
18
- export declare function buildLazyBeta(customElement: Pick<ApiCustomElementDeclaration, "members" | "tagName">): HmrComponentMeta;
18
+ export declare function buildLazyMeta(customElement: Pick<ApiCustomElementDeclaration, "members" | "tagName">): HmrComponentMeta;
19
19
  export declare const exportsForTests: {
20
20
  buildCompactLazyMeta: typeof buildCompactLazyMeta;
21
21
  };
@@ -0,0 +1,34 @@
1
+ import { setApiExtractorErrorLogger as c } from "@arcgis/api-extractor";
2
+ import { toSystemPathSeparators as i, path as g } from "@arcgis/components-build-utils";
3
+ import a from "chalk";
4
+ let e = {
5
+ // Temporary logger to use until vite config is loaded and we have access to
6
+ // actual logger.
7
+ info: console.log,
8
+ warn: console.warn,
9
+ error: console.error
10
+ }, s = process.cwd();
11
+ function n(t, r, o) {
12
+ return typeof o == "string" ? (o = o.startsWith(s) ? i(g.relative(s, o)) : o, o = `${o}: `) : o = "", `${t} ${o}${r}`;
13
+ }
14
+ const f = {
15
+ initialize(t, r) {
16
+ e = t, s = r, c(e.error);
17
+ },
18
+ info(t, r, o) {
19
+ e.info(n(a.cyan(`[${t}]`), r, o));
20
+ },
21
+ warn(t, r, o) {
22
+ e.warn(n(a.yellow(`[${t}]`), r, o));
23
+ },
24
+ error(t, r, o) {
25
+ e.error(n(a.red(`[${t}]`), r, o)), process.exitCode = 1;
26
+ }
27
+ };
28
+ function l(t, r, o) {
29
+ return r instanceof Error ? (r.message = n(t, r.message, o), r) : n(a.red(`[${t}]`), r, o);
30
+ }
31
+ export {
32
+ l as f,
33
+ f as l
34
+ };
@@ -65,7 +65,13 @@ export declare function buildLoaderCode(runtimeVariableName: string, customEntry
65
65
  * ```
66
66
  */
67
67
  declare function transformChunk(chunk: CdnChunk, chunks: Map<string, CdnChunk>): void;
68
+ /**
69
+ * Given set of identifiers, produce the shortest possible ASCII-only identifier.
70
+ * We restrict to ASCII-range as it is faster to parse for engines.
71
+ */
72
+ declare function createIdentifierGenerator(seen: Set<string>): () => string;
68
73
  export declare const exportsForTests: {
69
74
  transformChunk: typeof transformChunk;
75
+ createIdentifierGenerator: typeof createIdentifierGenerator;
70
76
  };
71
77
  export {};
@@ -1,6 +1,22 @@
1
1
  import { Plugin } from 'vite';
2
2
  import { CompilerContext } from '../context';
3
+ /**
4
+ * CSS extension list taken from https://github.com/vitejs/vite/blob/a8c7083a3d7d7fe2e83e994ff008f39ee4f298f8/packages/vite/src/node/constants.ts#L50
5
+ */
3
6
  export declare const cssLangsRe: RegExp;
7
+ /**
8
+ * A flag added by Lumina at compile time to named CSS imports to turn
9
+ * them into Lit css`` tagged template literals (using `styles` named import).
10
+ *
11
+ * We do not automatically process every CSS file to allow for both:
12
+ * - keeping side-effect CSS imports inside external library code as is
13
+ * - tricky to do using resolveId() because ESBuild is used for some files in
14
+ * dev server.
15
+ * - explicitly importing external library's CSS as Lit css into shadow root
16
+ * - example: monaco or ckeditor styles, but attached into shadow root, rather
17
+ * than global
18
+ */
19
+ export declare const litCssFlag = "?litCss";
4
20
  /**
5
21
  * The `.adoptedStyleSheets` API is very convenient, but it has one issue: it
6
22
  * has higher precedence order than the `<link>` or `<style>` tags. This API was
@@ -12,18 +28,42 @@ export declare const cssLangsRe: RegExp;
12
28
  * More information:
13
29
  * https://discord.com/channels/1012791295170859069/1274527043614150708
14
30
  */
15
- export declare const layeredCssFlag = "?layered";
31
+ export declare const layeredLitCssFlag = "?layeredLitCss";
16
32
  /**
17
- * During build, we insert a side-effect import into the loader.ts file purely
18
- * so that the transform() is triggered for that file so that we can piggy back
19
- * on the transformed output (and create a separate .css file out of it). We do
20
- * not intend for such file to be included in the JS bundle in the NPM build.
21
- * Such import will be dropped by the minifier.
22
- *
23
- * It's a bit hacky, but that is needed to workaround this Vite behavior:
24
- * https://github.com/vitejs/vite/pull/11469#:~:text=Further%2C%20this.load%20is%20supposed%20to%20trigger%20transform%20and%20moduleParsed%20%2D%20this%20does%20not%20(in%20accordance%20with%20vite%27s%20on%2Ddemand%20nature
33
+ * Vite's library mode has CSS support (https://vite.dev/guide/build.html#css-support).
34
+ * However, if global css file references assets, the library mode will insert
35
+ * the assets base path in the CSS file. This does not work for us since the
36
+ * asset path is determined at runtime - provided by the user.
37
+ *
38
+ * Additionally, Vite's library mode css handling does not quite fit our use case:
39
+ * - We need to transform the global CSS to add hydrate CSS
40
+ * - Trickier given that we need to emit hydrate CSS even if user did not
41
+ * provide global css
42
+ * - Vite has css chunking support, which we don't need
43
+ * - We need to add an import for our CSS file (and those of libraries we are
44
+ * consuming) in runtime.ts, without processing the external CSS files
45
+ *
46
+ * It is possible to make Vite's library mode css work, but requires too much
47
+ * effort. Instead, we are bypassing Vite's global CSS handling and doing the
48
+ * simple handling sufficient for our single global css file:
49
+ * - During build, we insert a import into the loader.ts file purely
50
+ * so that the transform() is triggered for that file so that we can piggy back
51
+ * on the transformed output (and create a separate .css file out of it).
52
+ * Such import has no side-effects and is removed by Rollup.
53
+ *
54
+ * This is the only way to trigger the CSS transform without getting it added
55
+ * to the bundle because of this Vite behavior:
56
+ * https://github.com/vitejs/vite/pull/11469#:~:text=Further%2C%20this.load%20is%20supposed%20to%20trigger%20transform%20and%20moduleParsed%20%2D%20this%20does%20not%20(in%20accordance%20with%20vite%27s%20on%2Ddemand%20nature
57
+ * - We manually write dist/main.css based on hydrate CSS and global CSS.
58
+ * - During generateBundle() stage, we transform the emitted chunks/runtime.js
59
+ * to add the import to global CSS for our library and web component libraries
60
+ * we are consuming. We do this in generateBundle() stage so that such imports
61
+ * are not processed by bundler. Additionally, our loadLitCss plugin's
62
+ * transform() has a detection of side-effect CSS imports to error for them
63
+ * saying they should be import as named to be added to the shadow root - by
64
+ * doing this in generateBundle(), we bypass that check.
25
65
  */
26
- export declare const globalCssFlag = "?global";
66
+ export declare const globalCssFileFlag = "?globalFileLitCss";
27
67
  /**
28
68
  * Given a CSS file like:
29
69
  *
@@ -56,7 +96,7 @@ export declare const globalCssFlag = "?global";
56
96
  *
57
97
  * Then, we augment it into this:
58
98
  * ```js
59
- * import { css } from '@lit/reactive-element/css-tag.js';
99
+ * import { css } from 'lit/css-tag.js';
60
100
  * const styles = css`:host{display:flex;gap:1rem}button{padding:1rem}`;
61
101
  * export default styles;
62
102
  * ```
@@ -84,3 +124,4 @@ export declare const globalCssFlag = "?global";
84
124
  * will be inlined as base64 to simplify our life.
85
125
  */
86
126
  export declare const loadLitCss: (context: CompilerContext) => Plugin;
127
+ export declare function viteCssModuleToLit(code: string, withHmr: boolean, minify: boolean, isLayered: boolean): string;
@@ -3,9 +3,9 @@ import { Plugin } from 'vite';
3
3
  import { build as esbuildBuild } from 'esbuild';
4
4
  import { CompilerContext } from './context';
5
5
  import { PluginOptions as VitePluginDtsOptions } from 'vite-plugin-dts';
6
- import { ExternalsOptions as RollupPluginNodeExternalsOptions } from 'rollup-plugin-node-externals';
7
6
  import { WebTypesOptions } from './docs/webTypes/types';
8
7
  import { VsCodeDocOptions } from './docs/vsCodeCustomData/types';
8
+ import { DependencyManagementOptions as BaseDependencyManagementOptions } from '@arcgis/components-build-utils';
9
9
  import { ApiJson, ApiModule, CopyDocDefinitions } from '@arcgis/api-extractor';
10
10
  import { LuminaApiExtractor } from './extractor/extractor';
11
11
  /**
@@ -37,10 +37,9 @@ export type LuminaOptions = {
37
37
  * For more options, see Vite's "testing" option.
38
38
  * This is equivalent to the `e2e` mode in Stencil.
39
39
  *
40
- * @remarks
41
- * For new projects, we recommend using Vitest browser mode instead of
42
- * Puppeteer. See documentation:
43
- * https://qawebgis.esri.com/components/lumina/testing
40
+ * @deprecated
41
+ * For new projects, use Vitest browser mode instead of Puppeteer.
42
+ * See documentation: https://qawebgis.esri.com/components/lumina/testing
44
43
  */
45
44
  readonly puppeteerTesting?: PuppeteerTestingOptions;
46
45
  /**
@@ -64,6 +63,10 @@ export type LuminaOptions = {
64
63
  */
65
64
  readonly assets?: AssetHandlingOptions;
66
65
  readonly linting?: LintingOptions;
66
+ readonly experimental?: {
67
+ /** @deprecated See https://discord.com/channels/1012791295170859069/1047015641225371718 */
68
+ readonly stabilizeRef?: boolean;
69
+ };
67
70
  };
68
71
  export type BuildOptions = {
69
72
  /**
@@ -79,9 +82,13 @@ export type BuildOptions = {
79
82
  * @default undefined
80
83
  * @example "www"
81
84
  * @see [Based on Stencil's www build](https://stenciljs.com/docs/www)
82
- * @deprecated Use Storybook build or separate test app package.
85
+ * @deprecated Use Storybook build or a separate test app package.
83
86
  */
84
87
  readonly destination?: string;
88
+ /** @deprecated Use Storybook build or a separate test app package. */
89
+ readonly transformFile?: (htmlContent: string, htmlFilePath: string, context: CompilerContext) => string;
90
+ /** @deprecated Use Storybook build or a separate test app package. */
91
+ readonly afterBuildEnd?: (context: CompilerContext) => Promise<void> | void;
85
92
  };
86
93
  /**
87
94
  * Options for externalizing or bundling in dependencies.
@@ -92,7 +99,7 @@ export type BuildOptions = {
92
99
  * New lines are accepted.
93
100
  * Do not include // or /* - will be added automatically.
94
101
  *
95
- * @default require("@arcgis/components-utils").getPreamble()
102
+ * @default require("@arcgis/toolkit/string").getPreamble()
96
103
  *
97
104
  * @example
98
105
  * ```js
@@ -113,7 +120,6 @@ export type BuildOptions = {
113
120
  * Wrappers to generate.
114
121
  */
115
122
  readonly wrappers?: WrappersOptions[];
116
- readonly ssr?: SsrOptions;
117
123
  };
118
124
  export type BuildCdnOptions = {
119
125
  /**
@@ -149,7 +155,15 @@ export type BuildCdnOptions = {
149
155
  */
150
156
  readonly esbuildOptions?: Parameters<typeof esbuildBuild>[0];
151
157
  /**
152
- * A callback for mutating CDN chunks before they are written to disk.
158
+ * Transform the CDN entrypoint before it is processed by ESBuild.
159
+ *
160
+ * This callback is for advanced use cases only. The build output may change
161
+ * between Lumina versions without prior notice.
162
+ */
163
+ readonly entrypointTransformer?: (code: string, context: CompilerContext) => string;
164
+ /**
165
+ * A callback for mutating CDN ESBuild output chunks before they are written
166
+ * to disk.
153
167
  * This callback is for advanced use cases only. The build output may change
154
168
  * between Lumina versions without prior notice. Using this callback may
155
169
  * corrupt the CDN source map if it is enabled.
@@ -158,6 +172,11 @@ export type BuildCdnOptions = {
158
172
  };
159
173
  export type CdnChunk = {
160
174
  code: string;
175
+ /**
176
+ * Whether chunk is currently being processed. Used to detect cyclical imports.
177
+ * @private
178
+ */
179
+ isProcessing: boolean;
161
180
  isAsync: boolean | undefined;
162
181
  oldSingleExportName: string | undefined;
163
182
  };
@@ -168,32 +187,6 @@ export type CdnChunk = {
168
187
  * https://devtopia.esri.com/WebGIS/arcgis-web-components/discussions/1281
169
188
  */
170
189
  export type WrappersOptions = React18WrapperOptions;
171
- export type SsrOptions = {
172
- /**
173
- * Emit output compatible with Stencil's dist-hydrate-script build.
174
- *
175
- * @deprecated
176
- * This option should be used to smooth the migration path from Stencil.
177
- * You should instruct your SSR users to migrate to Lit's SSR implementation,
178
- * and then stop using this option.
179
- *
180
- * @see https://stenciljs.com/docs/hydrate-app
181
- * @see https://lit.dev/docs/ssr/overview/
182
- */
183
- readonly stencilCompatibility?: {
184
- /**
185
- * @default false
186
- */
187
- enabled?: boolean;
188
- /**
189
- * By default, the hydrate directory is output to package root, outside
190
- * of dist.
191
- *
192
- * @default "hydrate"
193
- */
194
- path?: string;
195
- };
196
- };
197
190
  /**
198
191
  * Options for creating React 18 wrapper.
199
192
  *
@@ -211,46 +204,31 @@ export type React18WrapperOptions = {
211
204
  /**
212
205
  * Options for externalizing dependencies.
213
206
  *
214
- * Reuse the options from rollup-plugin-node-externals, but rename two options for clarity.
215
- * - `include` is renamed to `externalize` to make it clear that these are externalized
216
- * - `exclude` is renamed to `bundleIn` to make it clear that these are bundled in
217
- *
218
- * @see https://www.npmjs.com/package/rollup-plugin-node-externals
219
- *
220
207
  * @remarks
221
208
  * If Vite is running under Storybook, these options are ignored. This is
222
209
  * because in Storybook build, unlike in a library build, we want to bundle in
223
210
  * all dependencies (with exception of @arcgis/core and web component
224
211
  * dependencies, which are loaded using the ESM CDN).
225
212
  */
226
- export type DependencyManagementOptions = Omit<RollupPluginNodeExternalsOptions, "exclude" | "include"> & {
213
+ export type DependencyManagementOptions = BaseDependencyManagementOptions & {
227
214
  /**
228
- * Force bundle in these dependencies even if they are declared as
229
- * dependencies or peerDependencies.
215
+ * By default, Lumina will error if it encounters usage of an unknown custom
216
+ * element. This setting allows to silence such error if you are manually
217
+ * importing some custom elements.
230
218
  *
231
- * @example
232
- * This is desirable if you wish to control the version of a dependency or
233
- * need to post-process the dependency in some way. Usually, you will declare
234
- * such as a devDependency, but there is a use case for declaring it as a
235
- * dependency instead:
236
- *
237
- * - If TypeScript types from the bundled in dependencies are referenced in
238
- * the `.d.ts` files of your library, you will need to declare the package
239
- * as a `dependency`, so that it is still installed on the consumer's
240
- * computer so that TypeScript can correctly resolve the types of that
241
- * library.
242
- */
243
- readonly bundleIn?: NonNullable<RollupPluginNodeExternalsOptions>["exclude"];
244
- /**
245
- * Force externalize these dependencies, even if they are declared as
246
- * devDependencies.
219
+ * > [!IMPORTANT]
220
+ * >
221
+ * > This option is an escape hatch. Build-time optimizations are not applied
222
+ * > to such custom elements. Additionally, you assume the responsibility for
223
+ * > correctly loading the web component in lazy, non-lazy and CDN builds.
247
224
  *
248
225
  * @example
249
- * This is desirable if you are sure the end user will have these dependencies
250
- * available, yet do not wish to declare these as devDependencies for some
251
- * technical reasons.
226
+ * ```ts
227
+ * // Silence errors for unknown custom elements that start with "fluent-"
228
+ * silenceUnknownJsxElementUsage: (tagName) => tagName.startsWith("fluent-")
229
+ * ```
252
230
  */
253
- readonly externalize?: NonNullable<RollupPluginNodeExternalsOptions>["include"];
231
+ readonly silenceUnknownJsxElementUsage?: (tagName: string, fileName: string, context: CompilerContext) => boolean;
254
232
  };
255
233
  export type ServeEnvironmentOptions = {
256
234
  /**
@@ -274,12 +252,24 @@ export type ServeEnvironmentOptions = {
274
252
  export type DetailedExtraDependency = {
275
253
  /** @example "@arcgis/map-config-components" */
276
254
  name: string;
277
- /** @example ():string => `https://example.com/arcgis-components/builds/main/cdn/map-config-components/` */
255
+ /**
256
+ * Overwrite the default CDN asset path for this dependency.
257
+ *
258
+ * @example (): string => `https://example.com/arcgis-components/builds/main/cdn/map-config-components/`
259
+ */
278
260
  getCdnUrl: (context: CompilerContext) => string;
279
261
  };
262
+ /**
263
+ * @deprecated
264
+ * For new projects, use Vitest browser mode instead of Puppeteer.
265
+ * See documentation: https://qawebgis.esri.com/components/lumina/testing
266
+ */
280
267
  export type PuppeteerTestingOptions = {
281
268
  /**
282
269
  * @default false
270
+ * @deprecated
271
+ * For new projects, use Vitest browser mode instead of Puppeteer.
272
+ * See documentation: https://qawebgis.esri.com/components/lumina/testing
283
273
  */
284
274
  readonly enabled?: boolean;
285
275
  /**
@@ -537,65 +527,27 @@ export type CssHandlingOptions = {
537
527
  * @default "hydrated"
538
528
  */
539
529
  hydratedAttribute?: string;
540
- /**
541
- * By default, if a side effect CSS import is detected, an error will thrown.
542
- * This is due to the requirement of handling shadow DOM styling.
543
- * Instead, you should import the "styles" variable from the .css file and add
544
- * it to your component.
545
- *
546
- * If there is a side effect CSS import from a file you don't control (i.e a
547
- * library you are using), then assign this property to a function that would
548
- * return "drop" to ignore those imports. In such case, you will be
549
- * responsible for manually providing the styles to the web component.
550
- *
551
- * If neither of these is satisfactory, a more complex solution can be
552
- * implemented in the future.
553
- *
554
- * @remarks
555
- * In regular codebases, it's common to have an import statement like so:
556
- * ```ts
557
- * import 'some-library/styles.css';
558
- * ```
559
- *
560
- * Doing so in a web component codebase is a bit trickier as the styles
561
- * need to be attached not to the `<head>` of the page, but to the shadow
562
- * root of the component that imported it. Doing so for transitive imports
563
- * is even trickier (if your component imported a .js file, which in turn
564
- * imported a .css file) as dependency tracking becomes necessary.
565
- *
566
- * That is why, for now, css imports need to be handled like so:
567
- *
568
- * - If import is originating from a file you control (your component file),
569
- * import the "styles" variable from the css file:
570
- *
571
- * ```ts
572
- * import { styles } from 'some-library/styles.css';
573
- * ```
574
- *
575
- * And then add it to your component
576
- *
577
- * ```ts
578
- * export class MyComponent extends LitElement {
579
- * static override styles = styles;
580
- * }
581
- * ```
582
- *
583
- * - If the import is originating from a file you don't control (i.e a library
584
- * code), you have to set this property to a function that will return
585
- * "drop" for a given library import to ignore such import, and then you
586
- * will have to manually provide the CSS file by importing "styles"
587
- * variable.
588
- *
589
- * @default () => "throwError"
590
- *
591
- */
592
- readonly sideEffectImportHandling?: (specifier: string, importer: string) => "drop" | "throwError";
593
530
  };
594
531
  export type AssetHandlingOptions = {
595
532
  /**
596
533
  * Any additional assets you wish to provide, besides those located in the
597
534
  * assets/ directories
598
535
  *
536
+ * @example
537
+ * ```ts
538
+ * import resolvePkg from "resolve-pkg";
539
+ *
540
+ * // ...
541
+ *
542
+ * extra: [
543
+ * {
544
+ * type: "directory",
545
+ * source: resolvePkg("@arcgis/arcade-sdk/dist/arcgis-arcade-editor")!,
546
+ * destination: "arcade-language",
547
+ * },
548
+ * ]
549
+ * ```
550
+ *
599
551
  * @remarks
600
552
  * If you need additional flexibility, you can call the
601
553
  * `compilerContext.provideAssets()` utility at any time
@@ -26,7 +26,7 @@ declare module "vitest" {
26
26
  *
27
27
  * It has to be separate because Vitest's dev server resolves imports for the
28
28
  * "node" import condition. If we instead tell Vitest to use browser export
29
- * conditions, than Lit's "isServer" will be false both in browser and node.js,
29
+ * conditions, then Lit's "isServer" will be false both in browser and node.js,
30
30
  * potentially breaking some components. While happy-dom is neat, it does match
31
31
  * the actual browser API 100%. It is safer to run a separate Vite instance for
32
32
  * Node.js (Vitest) and browser. This is a short-term issue anyway as we are
@@ -1,7 +1,7 @@
1
1
  import { expect as p, afterEach as V } from "vitest";
2
2
  import { toSystemPathSeparators as L, isPosix as S } from "@arcgis/components-build-utils";
3
3
  import { p as T, i as h } from "../types-C3YmWTVv.js";
4
- import { l as y } from "../logger-KpGU2b3R.js";
4
+ import { l as y } from "../logger-hJvg0JOj.js";
5
5
  async function D(s) {
6
6
  await s.exposeFunction("puppeteerOnEvent", (e, t) => {
7
7
  j(s._e2eEvents, e, t);
@@ -1,17 +1,17 @@
1
1
  export declare const expectExtend: {
2
- toEqualAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
3
- toEqualAttributes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
4
- toEqualText: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
5
- toHaveAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
6
- toHaveClass: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
2
+ toEqualAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
3
+ toEqualAttributes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
4
+ toEqualText: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
5
+ toHaveAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
6
+ toHaveClass: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
7
7
  toHaveClasses: (element: unknown, expectClassNames: string[]) => import('@vitest/expect').SyncExpectationResult;
8
- toMatchClasses: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
9
- toHaveReceivedEvent: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
10
- toHaveReceivedEventTimes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
11
- toHaveReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
12
- toHaveFirstReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
13
- toHaveLastReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
14
- toHaveNthReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
8
+ toMatchClasses: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
9
+ toHaveReceivedEvent: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
10
+ toHaveReceivedEventTimes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
11
+ toHaveReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
12
+ toHaveFirstReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
13
+ toHaveLastReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
14
+ toHaveNthReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState, any[]>;
15
15
  };
16
16
  export interface PuppeteerMatchers<R = unknown> {
17
17
  toEqualAttribute: (expectedAttribute: string, expectedValue: unknown) => R;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Based on https://github.com/thomasbrodusch/vitest-fail-on-console/, but
3
+ * simplified and with our fixes applied:
4
+ * https://github.com/thomasbrodusch/vitest-fail-on-console/issues/61
5
+ */
6
+ export declare function failOnConsole(): void;