@analogjs/vite-plugin-angular 3.0.0-alpha.8 → 3.0.0-alpha.9
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/package.json +3 -7
- package/setup-vitest.js +154 -193
- package/setup-vitest.js.map +1 -1
- package/src/index.d.ts +1 -1
- package/src/index.js +6 -2
- package/src/index.js.map +1 -1
- package/src/lib/angular-build-optimizer-plugin.js +48 -63
- package/src/lib/angular-build-optimizer-plugin.js.map +1 -1
- package/src/lib/angular-jit-plugin.js +31 -37
- package/src/lib/angular-jit-plugin.js.map +1 -1
- package/src/lib/angular-pending-tasks.plugin.js +17 -18
- package/src/lib/angular-pending-tasks.plugin.js.map +1 -1
- package/src/lib/angular-vite-plugin.js +790 -1077
- package/src/lib/angular-vite-plugin.js.map +1 -1
- package/src/lib/angular-vitest-plugin.js +97 -135
- package/src/lib/angular-vitest-plugin.js.map +1 -1
- package/src/lib/compiler-plugin.js +40 -44
- package/src/lib/compiler-plugin.js.map +1 -1
- package/src/lib/component-resolvers.js +87 -120
- package/src/lib/component-resolvers.js.map +1 -1
- package/src/lib/host.js +69 -101
- package/src/lib/host.js.map +1 -1
- package/src/lib/live-reload-plugin.js +51 -63
- package/src/lib/live-reload-plugin.js.map +1 -1
- package/src/lib/nx-folder-plugin.js +18 -16
- package/src/lib/nx-folder-plugin.js.map +1 -1
- package/src/lib/plugins/file-replacements.plugin.js +35 -62
- package/src/lib/plugins/file-replacements.plugin.js.map +1 -1
- package/src/lib/router-plugin.js +23 -23
- package/src/lib/router-plugin.js.map +1 -1
- package/src/lib/tools/package.json +2 -5
- package/src/lib/tools/src/builders/vite/vite-build.impl.js +31 -38
- package/src/lib/tools/src/builders/vite/vite-build.impl.js.map +1 -1
- package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js +52 -60
- package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js.map +1 -1
- package/src/lib/tools/src/index.js +0 -2
- package/src/lib/utils/devkit.js +34 -38
- package/src/lib/utils/devkit.js.map +1 -1
- package/src/lib/utils/rolldown.js +9 -5
- package/src/lib/utils/rolldown.js.map +1 -1
- package/src/lib/utils/source-file-cache.js +35 -37
- package/src/lib/utils/source-file-cache.js.map +1 -1
- package/README.md +0 -91
- package/src/lib/models.js +0 -1
- package/src/lib/models.js.map +0 -1
- package/src/lib/tools/README.md +0 -3
- package/src/lib/tools/src/index.js.map +0 -1
- package/src/lib/utils/compiler-plugin-options.js +0 -1
- package/src/lib/utils/compiler-plugin-options.js.map +0 -1
- package/src/lib/utils/hmr-candidates.js +0 -272
- package/src/lib/utils/hmr-candidates.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-reload-plugin.js","
|
|
1
|
+
{"version":3,"file":"live-reload-plugin.js","names":[],"sources":["../../../../../packages/vite-plugin-angular/src/lib/live-reload-plugin.ts"],"sourcesContent":["import { resolve } from 'node:path';\nimport { ServerResponse } from 'node:http';\nimport { Connect, normalizePath, Plugin, ViteDevServer } from 'vite';\n\nimport { EmitFileResult } from './models.js';\n\nconst ANGULAR_COMPONENT_PREFIX = '/@ng/component';\nconst FILE_PREFIX = 'file:';\n\nexport function liveReloadPlugin({\n classNames,\n fileEmitter,\n}: {\n classNames: Map<string, string>;\n fileEmitter: (file: string) => EmitFileResult | undefined;\n}): Plugin {\n return {\n name: 'analogjs-live-reload-plugin',\n apply: 'serve',\n configureServer(server: ViteDevServer) {\n const angularComponentMiddleware: Connect.HandleFunction = async (\n req: Connect.IncomingMessage,\n res: ServerResponse<Connect.IncomingMessage>,\n next: Connect.NextFunction,\n ) => {\n if (req.url === undefined || res.writableEnded) {\n return;\n }\n\n if (!req.url.includes(ANGULAR_COMPONENT_PREFIX)) {\n next();\n\n return;\n }\n\n const requestUrl = new URL(req.url, 'http://localhost');\n const componentId = requestUrl.searchParams.get('c');\n\n if (!componentId) {\n res.statusCode = 400;\n res.end();\n\n return;\n }\n\n const [fileId] = decodeURIComponent(componentId).split('@');\n const resolvedId = normalizePath(resolve(process.cwd(), fileId));\n const invalidated =\n !!server.moduleGraph.getModuleById(resolvedId)\n ?.lastInvalidationTimestamp && classNames.get(resolvedId);\n\n // don't send an HMR update until the file has been invalidated\n if (!invalidated) {\n res.setHeader('Content-Type', 'text/javascript');\n res.setHeader('Cache-Control', 'no-cache');\n res.end('');\n return;\n }\n\n const result = fileEmitter(resolvedId);\n res.setHeader('Content-Type', 'text/javascript');\n res.setHeader('Cache-Control', 'no-cache');\n res.end(`${result?.hmrUpdateCode || ''}`);\n };\n\n server.middlewares.use(angularComponentMiddleware);\n },\n resolveId(id, _importer, options) {\n if (\n options?.ssr &&\n id.startsWith(FILE_PREFIX) &&\n id.includes(ANGULAR_COMPONENT_PREFIX)\n ) {\n return `\\0${id}`;\n }\n\n return undefined;\n },\n load(id, options) {\n if (options?.ssr && id.includes(ANGULAR_COMPONENT_PREFIX)) {\n const requestUrl = new URL(id.slice(1), 'http://localhost');\n const componentId = requestUrl.searchParams.get('c');\n\n if (!componentId) {\n return;\n }\n\n const result = fileEmitter(\n normalizePath(\n resolve(\n process.cwd(),\n decodeURIComponent(componentId).split('@')[0],\n ),\n ),\n );\n\n return result?.hmrUpdateCode || '';\n }\n\n return;\n },\n };\n}\n"],"mappings":";;;AAMA,IAAM,2BAA2B;AACjC,IAAM,cAAc;AAEpB,SAAgB,iBAAiB,EAC/B,YACA,eAIS;AACT,QAAO;EACL,MAAM;EACN,OAAO;EACP,gBAAgB,QAAuB;GACrC,MAAM,6BAAqD,OACzD,KACA,KACA,SACG;AACH,QAAI,IAAI,QAAQ,KAAA,KAAa,IAAI,cAC/B;AAGF,QAAI,CAAC,IAAI,IAAI,SAAS,yBAAyB,EAAE;AAC/C,WAAM;AAEN;;IAIF,MAAM,cADa,IAAI,IAAI,IAAI,KAAK,mBAAmB,CACxB,aAAa,IAAI,IAAI;AAEpD,QAAI,CAAC,aAAa;AAChB,SAAI,aAAa;AACjB,SAAI,KAAK;AAET;;IAGF,MAAM,CAAC,UAAU,mBAAmB,YAAY,CAAC,MAAM,IAAI;IAC3D,MAAM,aAAa,cAAc,QAAQ,QAAQ,KAAK,EAAE,OAAO,CAAC;AAMhE,QAAI,EAJF,CAAC,CAAC,OAAO,YAAY,cAAc,WAAW,EAC1C,6BAA6B,WAAW,IAAI,WAAW,GAG3C;AAChB,SAAI,UAAU,gBAAgB,kBAAkB;AAChD,SAAI,UAAU,iBAAiB,WAAW;AAC1C,SAAI,IAAI,GAAG;AACX;;IAGF,MAAM,SAAS,YAAY,WAAW;AACtC,QAAI,UAAU,gBAAgB,kBAAkB;AAChD,QAAI,UAAU,iBAAiB,WAAW;AAC1C,QAAI,IAAI,GAAG,QAAQ,iBAAiB,KAAK;;AAG3C,UAAO,YAAY,IAAI,2BAA2B;;EAEpD,UAAU,IAAI,WAAW,SAAS;AAChC,OACE,SAAS,OACT,GAAG,WAAW,YAAY,IAC1B,GAAG,SAAS,yBAAyB,CAErC,QAAO,KAAK;;EAKhB,KAAK,IAAI,SAAS;AAChB,OAAI,SAAS,OAAO,GAAG,SAAS,yBAAyB,EAAE;IAEzD,MAAM,cADa,IAAI,IAAI,GAAG,MAAM,EAAE,EAAE,mBAAmB,CAC5B,aAAa,IAAI,IAAI;AAEpD,QAAI,CAAC,YACH;AAYF,WATe,YACb,cACE,QACE,QAAQ,KAAK,EACb,mBAAmB,YAAY,CAAC,MAAM,IAAI,CAAC,GAC5C,CACF,CACF,EAEc,iBAAiB;;;EAKrC"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { normalizePath } from
|
|
1
|
+
import { normalizePath } from "vite";
|
|
2
|
+
//#region packages/vite-plugin-angular/src/lib/nx-folder-plugin.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
},
|
|
17
|
-
};
|
|
4
|
+
* Ignores anything in the .nx folder from triggering HMR
|
|
5
|
+
*
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
function nxFolderPlugin() {
|
|
9
|
+
return {
|
|
10
|
+
name: "analogjs-nx-folder-plugin",
|
|
11
|
+
apply: "serve",
|
|
12
|
+
handleHotUpdate(ctx) {
|
|
13
|
+
if (ctx.file.includes(normalizePath("/.nx/"))) return [];
|
|
14
|
+
return ctx.modules;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
18
17
|
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { nxFolderPlugin };
|
|
20
|
+
|
|
19
21
|
//# sourceMappingURL=nx-folder-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nx-folder-plugin.js","
|
|
1
|
+
{"version":3,"file":"nx-folder-plugin.js","names":[],"sources":["../../../../../packages/vite-plugin-angular/src/lib/nx-folder-plugin.ts"],"sourcesContent":["import { normalizePath, Plugin } from 'vite';\n\n/**\n * Ignores anything in the .nx folder from triggering HMR\n *\n * @returns\n */\nexport function nxFolderPlugin(): Plugin {\n return {\n name: 'analogjs-nx-folder-plugin',\n apply: 'serve',\n handleHotUpdate(ctx) {\n if (ctx.file.includes(normalizePath('/.nx/'))) {\n return [];\n }\n\n return ctx.modules;\n },\n };\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,iBAAyB;AACvC,QAAO;EACL,MAAM;EACN,OAAO;EACP,gBAAgB,KAAK;AACnB,OAAI,IAAI,KAAK,SAAS,cAAc,QAAQ,CAAC,CAC3C,QAAO,EAAE;AAGX,UAAO,IAAI;;EAEd"}
|
|
@@ -1,64 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
? frWith.with
|
|
34
|
-
: resolve(workspaceRoot, frWith.with)
|
|
35
|
-
: '',
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
const foundReplace = mappedReplacements.find((replacement) => resolved?.id?.endsWith(replacement.replace));
|
|
39
|
-
if (foundReplace) {
|
|
40
|
-
try {
|
|
41
|
-
if (this.environment.name === 'ssr' && foundReplace.ssr) {
|
|
42
|
-
// return new file id for ssr
|
|
43
|
-
return {
|
|
44
|
-
id: foundReplace.ssr,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
else if (foundReplace.ssr) {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
// return new file id
|
|
51
|
-
return {
|
|
52
|
-
id: foundReplace.with,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
console.error(err);
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return null;
|
|
61
|
-
},
|
|
62
|
-
};
|
|
1
|
+
import { isAbsolute, resolve } from "node:path";
|
|
2
|
+
//#region packages/vite-plugin-angular/src/lib/plugins/file-replacements.plugin.ts
|
|
3
|
+
function replaceFiles(replacements, workspaceRoot) {
|
|
4
|
+
if (!replacements?.length) return false;
|
|
5
|
+
return {
|
|
6
|
+
name: "rollup-plugin-replace-files",
|
|
7
|
+
enforce: "pre",
|
|
8
|
+
async resolveId(source, importer, options) {
|
|
9
|
+
const resolved = await this.resolve(source, importer, {
|
|
10
|
+
...options,
|
|
11
|
+
skipSelf: true
|
|
12
|
+
});
|
|
13
|
+
const foundReplace = replacements.map((fr) => {
|
|
14
|
+
const frSSR = fr;
|
|
15
|
+
const frWith = fr;
|
|
16
|
+
return {
|
|
17
|
+
...fr,
|
|
18
|
+
ssr: frSSR.ssr ? isAbsolute(frSSR.ssr) ? frSSR.ssr : resolve(workspaceRoot, frSSR.ssr) : "",
|
|
19
|
+
with: frWith.with ? isAbsolute(frWith.with) ? frWith.with : resolve(workspaceRoot, frWith.with) : ""
|
|
20
|
+
};
|
|
21
|
+
}).find((replacement) => resolved?.id?.endsWith(replacement.replace));
|
|
22
|
+
if (foundReplace) try {
|
|
23
|
+
if (this.environment.name === "ssr" && foundReplace.ssr) return { id: foundReplace.ssr };
|
|
24
|
+
else if (foundReplace.ssr) return null;
|
|
25
|
+
return { id: foundReplace.with };
|
|
26
|
+
} catch (err) {
|
|
27
|
+
console.error(err);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
63
33
|
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { replaceFiles };
|
|
36
|
+
|
|
64
37
|
//# sourceMappingURL=file-replacements.plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-replacements.plugin.js","
|
|
1
|
+
{"version":3,"file":"file-replacements.plugin.js","names":[],"sources":["../../../../../../packages/vite-plugin-angular/src/lib/plugins/file-replacements.plugin.ts"],"sourcesContent":["// source: https://github.com/Myrmod/vitejs-theming/blob/master/build-plugins/rollup/replace-files.js\nimport { isAbsolute, resolve } from 'node:path';\nimport { Plugin } from 'vite';\n\nexport function replaceFiles(\n replacements: FileReplacement[],\n workspaceRoot: string,\n): Plugin | false {\n if (!replacements?.length) {\n return false;\n }\n\n return {\n name: 'rollup-plugin-replace-files',\n enforce: 'pre',\n async resolveId(source, importer, options) {\n const resolved = await this.resolve(source, importer, {\n ...options,\n skipSelf: true,\n });\n /**\n * The reason we're using endsWith here is because the resolved id\n * will be the absolute path to the file. We want to check if the\n * file ends with the file we're trying to replace, which will be essentially\n * the path from the root of our workspace.\n */\n const mappedReplacements = replacements.map((fr: FileReplacement) => {\n const frSSR = fr as FileReplacementSSR;\n const frWith = fr as FileReplacementWith;\n\n return {\n ...fr,\n ssr: frSSR.ssr\n ? isAbsolute(frSSR.ssr)\n ? frSSR.ssr\n : resolve(workspaceRoot, frSSR.ssr)\n : '',\n with: frWith.with\n ? isAbsolute(frWith.with)\n ? frWith.with\n : resolve(workspaceRoot, frWith.with)\n : '',\n };\n });\n const foundReplace = mappedReplacements.find((replacement) =>\n resolved?.id?.endsWith(replacement.replace),\n );\n if (foundReplace) {\n try {\n if (this.environment.name === 'ssr' && foundReplace.ssr) {\n // return new file id for ssr\n return {\n id: foundReplace.ssr,\n };\n } else if (foundReplace.ssr) {\n return null;\n }\n\n // return new file id\n return {\n id: foundReplace.with,\n };\n } catch (err) {\n console.error(err);\n return null;\n }\n }\n return null;\n },\n };\n}\n\nexport type FileReplacement = FileReplacementWith | FileReplacementSSR;\n\nexport interface FileReplacementBase {\n replace: string;\n}\nexport interface FileReplacementWith extends FileReplacementBase {\n with: string;\n}\n\nexport interface FileReplacementSSR extends FileReplacementBase {\n ssr: string;\n}\n"],"mappings":";;AAIA,SAAgB,aACd,cACA,eACgB;AAChB,KAAI,CAAC,cAAc,OACjB,QAAO;AAGT,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,UAAU,QAAQ,UAAU,SAAS;GACzC,MAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,UAAU;IACpD,GAAG;IACH,UAAU;IACX,CAAC;GAyBF,MAAM,eAlBqB,aAAa,KAAK,OAAwB;IACnE,MAAM,QAAQ;IACd,MAAM,SAAS;AAEf,WAAO;KACL,GAAG;KACH,KAAK,MAAM,MACP,WAAW,MAAM,IAAI,GACnB,MAAM,MACN,QAAQ,eAAe,MAAM,IAAI,GACnC;KACJ,MAAM,OAAO,OACT,WAAW,OAAO,KAAK,GACrB,OAAO,OACP,QAAQ,eAAe,OAAO,KAAK,GACrC;KACL;KACD,CACsC,MAAM,gBAC5C,UAAU,IAAI,SAAS,YAAY,QAAQ,CAC5C;AACD,OAAI,aACF,KAAI;AACF,QAAI,KAAK,YAAY,SAAS,SAAS,aAAa,IAElD,QAAO,EACL,IAAI,aAAa,KAClB;aACQ,aAAa,IACtB,QAAO;AAIT,WAAO,EACL,IAAI,aAAa,MAClB;YACM,KAAK;AACZ,YAAQ,MAAM,IAAI;AAClB,WAAO;;AAGX,UAAO;;EAEV"}
|
package/src/lib/router-plugin.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
};
|
|
1
|
+
import { jt } from "./utils/devkit.js";
|
|
2
|
+
//#region packages/vite-plugin-angular/src/lib/router-plugin.ts
|
|
3
|
+
function routerPlugin() {
|
|
4
|
+
const javascriptTransformer = new jt({ jit: true }, 1);
|
|
5
|
+
/**
|
|
6
|
+
* Transforms Angular packages the didn't get picked up by Vite's pre-optimization.
|
|
7
|
+
*/
|
|
8
|
+
return {
|
|
9
|
+
name: "analogjs-router-optimization",
|
|
10
|
+
enforce: "pre",
|
|
11
|
+
apply: "serve",
|
|
12
|
+
transform: {
|
|
13
|
+
filter: { id: /fesm(.*?)\.mjs/ },
|
|
14
|
+
async handler(_code, id) {
|
|
15
|
+
const path = id.split("?")[0];
|
|
16
|
+
const contents = await javascriptTransformer.transformFile(path);
|
|
17
|
+
return { code: Buffer.from(contents).toString("utf-8") };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
24
21
|
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { routerPlugin };
|
|
24
|
+
|
|
25
25
|
//# sourceMappingURL=router-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-plugin.js","
|
|
1
|
+
{"version":3,"file":"router-plugin.js","names":[],"sources":["../../../../../packages/vite-plugin-angular/src/lib/router-plugin.ts"],"sourcesContent":["import type { Plugin } from 'vite';\nimport { JavaScriptTransformer } from './utils/devkit.js';\n\nexport function routerPlugin(): Plugin {\n const javascriptTransformer = new JavaScriptTransformer({ jit: true }, 1);\n\n /**\n * Transforms Angular packages the didn't get picked up by Vite's pre-optimization.\n */\n return {\n name: 'analogjs-router-optimization',\n enforce: 'pre',\n apply: 'serve',\n transform: {\n filter: {\n id: /fesm(.*?)\\.mjs/,\n },\n async handler(_code: string, id: string) {\n const path = id.split('?')[0];\n const contents = await javascriptTransformer.transformFile(path);\n\n return {\n code: Buffer.from(contents).toString('utf-8'),\n };\n },\n },\n };\n}\n"],"mappings":";;AAGA,SAAgB,eAAuB;CACrC,MAAM,wBAAwB,IAAI,GAAsB,EAAE,KAAK,MAAM,EAAE,EAAE;;;;AAKzE,QAAO;EACL,MAAM;EACN,SAAS;EACT,OAAO;EACP,WAAW;GACT,QAAQ,EACN,IAAI,kBACL;GACD,MAAM,QAAQ,OAAe,IAAY;IACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;IAC3B,MAAM,WAAW,MAAM,sBAAsB,cAAc,KAAK;AAEhE,WAAO,EACL,MAAM,OAAO,KAAK,SAAS,CAAC,SAAS,QAAQ,EAC9C;;GAEJ;EACF"}
|
|
@@ -1,41 +1,34 @@
|
|
|
1
|
-
import { createBuilder, targetFromTargetString
|
|
1
|
+
import { createBuilder, targetFromTargetString } from "@angular-devkit/architect";
|
|
2
|
+
//#region packages/vite-plugin-angular-tools/src/builders/vite/vite-build.impl.ts
|
|
2
3
|
async function viteBuilder(options, context) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
await builder.buildApp();
|
|
29
|
-
return {
|
|
30
|
-
success: true,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
console.error(e);
|
|
35
|
-
return {
|
|
36
|
-
success: false,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
4
|
+
const { createBuilder } = await Function("return import(\"vite\")")();
|
|
5
|
+
if (!context.target) throw new Error("Builder must be executed with a target");
|
|
6
|
+
const projectConfig = await context.getProjectMetadata(context.target);
|
|
7
|
+
const projectName = context.target.project;
|
|
8
|
+
const configuration = context.target.configuration || "production";
|
|
9
|
+
const buildTarget = targetFromTargetString(`::${configuration}`, projectName, "build");
|
|
10
|
+
const browserBuilderName = await context.getBuilderNameForTarget(buildTarget);
|
|
11
|
+
const rawBuildOptions = await context.getTargetOptions(buildTarget);
|
|
12
|
+
const buildOptions = await context.validateOptions(rawBuildOptions, browserBuilderName);
|
|
13
|
+
const buildConfig = {
|
|
14
|
+
configFile: options.configFile,
|
|
15
|
+
root: projectConfig.root,
|
|
16
|
+
mode: process.env.NODE_ENV ?? buildOptions.mode ?? configuration,
|
|
17
|
+
build: {
|
|
18
|
+
outDir: options.outputPath,
|
|
19
|
+
sourcemap: !!buildOptions.sourcemap
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
try {
|
|
23
|
+
await (await createBuilder(buildConfig, false)).buildApp();
|
|
24
|
+
return { success: true };
|
|
25
|
+
} catch (e) {
|
|
26
|
+
console.error(e);
|
|
27
|
+
return { success: false };
|
|
28
|
+
}
|
|
39
29
|
}
|
|
40
|
-
|
|
30
|
+
var vite_build_impl_default = createBuilder(viteBuilder);
|
|
31
|
+
//#endregion
|
|
32
|
+
export { vite_build_impl_default as default };
|
|
33
|
+
|
|
41
34
|
//# sourceMappingURL=vite-build.impl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-build.impl.js","
|
|
1
|
+
{"version":3,"file":"vite-build.impl.js","names":[],"sources":["../../../../../../../../../packages/vite-plugin-angular-tools/src/builders/vite/vite-build.impl.ts"],"sourcesContent":["import {\n BuilderContext,\n BuilderOutput,\n createBuilder,\n targetFromTargetString,\n} from '@angular-devkit/architect';\nimport type { InlineConfig } from 'vite';\nimport { ViteBuildSchema } from './schema';\n\nasync function viteBuilder(\n options: ViteBuildSchema,\n context: BuilderContext,\n): Promise<BuilderOutput> {\n const { createBuilder } = await Function('return import(\"vite\")')();\n if (!context.target) {\n throw new Error('Builder must be executed with a target');\n }\n const projectConfig = await context.getProjectMetadata(context.target);\n const projectName = context.target.project;\n const configuration = context.target.configuration || 'production';\n const buildTargetSpecifier = `::${configuration}`;\n const buildTarget = targetFromTargetString(\n buildTargetSpecifier,\n projectName,\n 'build',\n );\n\n const browserBuilderName = await context.getBuilderNameForTarget(buildTarget);\n const rawBuildOptions = await context.getTargetOptions(buildTarget);\n const buildOptions = await context.validateOptions(\n rawBuildOptions,\n browserBuilderName,\n );\n\n const buildConfig: InlineConfig = {\n configFile: options.configFile,\n root: projectConfig.root as string,\n mode: (process.env.NODE_ENV ??\n buildOptions.mode ??\n configuration) as string,\n build: {\n outDir: options.outputPath,\n sourcemap: !!buildOptions.sourcemap,\n },\n };\n\n try {\n const builder = await createBuilder(buildConfig, false);\n await builder.buildApp();\n\n return {\n success: true,\n };\n } catch (e) {\n console.error(e);\n return {\n success: false,\n };\n }\n}\n\nexport default createBuilder(viteBuilder) as any;\n"],"mappings":";;AASA,eAAe,YACb,SACA,SACwB;CACxB,MAAM,EAAE,kBAAkB,MAAM,SAAS,0BAAwB,EAAE;AACnE,KAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MAAM,yCAAyC;CAE3D,MAAM,gBAAgB,MAAM,QAAQ,mBAAmB,QAAQ,OAAO;CACtE,MAAM,cAAc,QAAQ,OAAO;CACnC,MAAM,gBAAgB,QAAQ,OAAO,iBAAiB;CAEtD,MAAM,cAAc,uBADS,KAAK,iBAGhC,aACA,QACD;CAED,MAAM,qBAAqB,MAAM,QAAQ,wBAAwB,YAAY;CAC7E,MAAM,kBAAkB,MAAM,QAAQ,iBAAiB,YAAY;CACnE,MAAM,eAAe,MAAM,QAAQ,gBACjC,iBACA,mBACD;CAED,MAAM,cAA4B;EAChC,YAAY,QAAQ;EACpB,MAAM,cAAc;EACpB,MAAA,QAAA,IAAA,YACE,aAAa,QACb;EACF,OAAO;GACL,QAAQ,QAAQ;GAChB,WAAW,CAAC,CAAC,aAAa;GAC3B;EACF;AAED,KAAI;AAEF,SADgB,MAAM,cAAc,aAAa,MAAM,EACzC,UAAU;AAExB,SAAO,EACL,SAAS,MACV;UACM,GAAG;AACV,UAAQ,MAAM,EAAE;AAChB,SAAO,EACL,SAAS,OACV;;;AAIL,IAAA,0BAAe,cAAc,YAAY"}
|
|
@@ -1,65 +1,57 @@
|
|
|
1
|
-
import { createBuilder, targetFromTargetString
|
|
1
|
+
import { createBuilder, targetFromTargetString } from "@angular-devkit/architect";
|
|
2
|
+
//#region packages/vite-plugin-angular-tools/src/builders/vite-dev-server/dev-server.impl.ts
|
|
2
3
|
async function viteDevServerBuilder(options, context) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
success: true,
|
|
42
|
-
baseUrl: resolvedUrls[0] ?? '',
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
console.error(e);
|
|
47
|
-
return {
|
|
48
|
-
success: false,
|
|
49
|
-
baseUrl: '',
|
|
50
|
-
};
|
|
51
|
-
}
|
|
4
|
+
const { createServer } = await Function("return import(\"vite\")")();
|
|
5
|
+
if (!context.target) throw new Error("Builder must be executed with a target");
|
|
6
|
+
const projectConfig = await context.getProjectMetadata(context.target);
|
|
7
|
+
const projectName = context.target.project;
|
|
8
|
+
const buildTarget = targetFromTargetString(options.buildTarget ?? `::development`, projectName, "build");
|
|
9
|
+
const browserBuilderName = await context.getBuilderNameForTarget(buildTarget);
|
|
10
|
+
const rawBuildOptions = await context.getTargetOptions(buildTarget);
|
|
11
|
+
const buildOptions = await context.validateOptions(rawBuildOptions, browserBuilderName);
|
|
12
|
+
const serverConfig = {
|
|
13
|
+
configFile: buildOptions.configFile,
|
|
14
|
+
root: projectConfig.root,
|
|
15
|
+
mode: process.env.NODE_ENV ?? buildOptions.mode ?? "development",
|
|
16
|
+
build: { sourcemap: !!buildOptions.sourcemap },
|
|
17
|
+
server: {
|
|
18
|
+
hmr: options?.hmr,
|
|
19
|
+
port: options?.port
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
try {
|
|
23
|
+
const server = await createServer(serverConfig);
|
|
24
|
+
await runViteDevServer(server);
|
|
25
|
+
const resolvedUrls = [...server.resolvedUrls.local, ...server.resolvedUrls.network];
|
|
26
|
+
await new Promise((resolve) => {
|
|
27
|
+
process.once("SIGINT", () => resolve());
|
|
28
|
+
process.once("SIGTERM", () => resolve());
|
|
29
|
+
process.once("exit", () => resolve());
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
success: true,
|
|
33
|
+
baseUrl: resolvedUrls[0] ?? ""
|
|
34
|
+
};
|
|
35
|
+
} catch (e) {
|
|
36
|
+
console.error(e);
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
baseUrl: ""
|
|
40
|
+
};
|
|
41
|
+
}
|
|
52
42
|
}
|
|
53
|
-
// vite ViteDevServer
|
|
54
43
|
async function runViteDevServer(server) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
44
|
+
await server.listen();
|
|
45
|
+
server.printUrls();
|
|
46
|
+
const processOnExit = async () => {
|
|
47
|
+
await server.close();
|
|
48
|
+
};
|
|
49
|
+
process.once("SIGINT", processOnExit);
|
|
50
|
+
process.once("SIGTERM", processOnExit);
|
|
51
|
+
process.once("exit", processOnExit);
|
|
63
52
|
}
|
|
64
|
-
|
|
53
|
+
var dev_server_impl_default = createBuilder(viteDevServerBuilder);
|
|
54
|
+
//#endregion
|
|
55
|
+
export { dev_server_impl_default as default };
|
|
56
|
+
|
|
65
57
|
//# sourceMappingURL=dev-server.impl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server.impl.js","
|
|
1
|
+
{"version":3,"file":"dev-server.impl.js","names":[],"sources":["../../../../../../../../../packages/vite-plugin-angular-tools/src/builders/vite-dev-server/dev-server.impl.ts"],"sourcesContent":["import {\n BuilderContext,\n BuilderOutput,\n createBuilder,\n targetFromTargetString,\n} from '@angular-devkit/architect';\nimport type { InlineConfig } from 'vite';\nimport { ViteDevServerSchema } from './schema';\n\nasync function viteDevServerBuilder(\n options: ViteDevServerSchema,\n context: BuilderContext,\n): Promise<BuilderOutput> {\n const { createServer } = await Function('return import(\"vite\")')();\n if (!context.target) {\n throw new Error('Builder must be executed with a target');\n }\n const projectConfig = await context.getProjectMetadata(context.target);\n const projectName = context.target.project;\n const buildTargetSpecifier = options.buildTarget ?? `::development`;\n const buildTarget = targetFromTargetString(\n buildTargetSpecifier,\n projectName,\n 'build',\n );\n\n const browserBuilderName = await context.getBuilderNameForTarget(buildTarget);\n const rawBuildOptions = await context.getTargetOptions(buildTarget);\n const buildOptions = await context.validateOptions(\n rawBuildOptions,\n browserBuilderName,\n );\n\n const serverConfig: InlineConfig = {\n configFile: buildOptions.configFile as string,\n root: projectConfig.root as string,\n mode: (process.env.NODE_ENV ??\n buildOptions.mode ??\n 'development') as string,\n build: {\n sourcemap: !!buildOptions.sourcemap,\n },\n server: {\n hmr: options?.hmr,\n port: options?.port,\n },\n };\n\n try {\n const server = await createServer(serverConfig);\n await runViteDevServer(server);\n const resolvedUrls = [\n ...server.resolvedUrls.local,\n ...server.resolvedUrls.network,\n ];\n\n await new Promise<void>((resolve) => {\n process.once('SIGINT', () => resolve());\n process.once('SIGTERM', () => resolve());\n process.once('exit', () => resolve());\n });\n\n return {\n success: true,\n baseUrl: resolvedUrls[0] ?? '',\n };\n } catch (e) {\n console.error(e);\n return {\n success: false,\n baseUrl: '',\n };\n }\n}\n\n// vite ViteDevServer\nasync function runViteDevServer(server: Record<string, any>): Promise<void> {\n await server.listen();\n\n server.printUrls();\n\n const processOnExit = async () => {\n await server.close();\n };\n\n process.once('SIGINT', processOnExit);\n process.once('SIGTERM', processOnExit);\n process.once('exit', processOnExit);\n}\n\nexport default createBuilder(viteDevServerBuilder) as any;\n"],"mappings":";;AASA,eAAe,qBACb,SACA,SACwB;CACxB,MAAM,EAAE,iBAAiB,MAAM,SAAS,0BAAwB,EAAE;AAClE,KAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MAAM,yCAAyC;CAE3D,MAAM,gBAAgB,MAAM,QAAQ,mBAAmB,QAAQ,OAAO;CACtE,MAAM,cAAc,QAAQ,OAAO;CAEnC,MAAM,cAAc,uBADS,QAAQ,eAAe,iBAGlD,aACA,QACD;CAED,MAAM,qBAAqB,MAAM,QAAQ,wBAAwB,YAAY;CAC7E,MAAM,kBAAkB,MAAM,QAAQ,iBAAiB,YAAY;CACnE,MAAM,eAAe,MAAM,QAAQ,gBACjC,iBACA,mBACD;CAED,MAAM,eAA6B;EACjC,YAAY,aAAa;EACzB,MAAM,cAAc;EACpB,MAAA,QAAA,IAAA,YACE,aAAa,QACb;EACF,OAAO,EACL,WAAW,CAAC,CAAC,aAAa,WAC3B;EACD,QAAQ;GACN,KAAK,SAAS;GACd,MAAM,SAAS;GAChB;EACF;AAED,KAAI;EACF,MAAM,SAAS,MAAM,aAAa,aAAa;AAC/C,QAAM,iBAAiB,OAAO;EAC9B,MAAM,eAAe,CACnB,GAAG,OAAO,aAAa,OACvB,GAAG,OAAO,aAAa,QACxB;AAED,QAAM,IAAI,SAAe,YAAY;AACnC,WAAQ,KAAK,gBAAgB,SAAS,CAAC;AACvC,WAAQ,KAAK,iBAAiB,SAAS,CAAC;AACxC,WAAQ,KAAK,cAAc,SAAS,CAAC;IACrC;AAEF,SAAO;GACL,SAAS;GACT,SAAS,aAAa,MAAM;GAC7B;UACM,GAAG;AACV,UAAQ,MAAM,EAAE;AAChB,SAAO;GACL,SAAS;GACT,SAAS;GACV;;;AAKL,eAAe,iBAAiB,QAA4C;AAC1E,OAAM,OAAO,QAAQ;AAErB,QAAO,WAAW;CAElB,MAAM,gBAAgB,YAAY;AAChC,QAAM,OAAO,OAAO;;AAGtB,SAAQ,KAAK,UAAU,cAAc;AACrC,SAAQ,KAAK,WAAW,cAAc;AACtC,SAAQ,KAAK,QAAQ,cAAc;;AAGrC,IAAA,0BAAe,cAAc,qBAAqB"}
|
package/src/lib/utils/devkit.js
CHANGED
|
@@ -1,41 +1,37 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
import { SourceFileCache } from "./source-file-cache.js";
|
|
2
|
+
import { VERSION } from "@angular/compiler-cli";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
//#region packages/vite-plugin-angular/src/lib/utils/devkit.ts
|
|
5
|
+
var require = createRequire(import.meta.url);
|
|
6
|
+
var angularMajor = Number(VERSION.major);
|
|
7
|
+
var angularMinor = Number(VERSION.minor);
|
|
8
|
+
var angularPatch = Number(VERSION.patch);
|
|
9
|
+
var padVersion = (version) => String(version).padStart(2, "0");
|
|
10
|
+
var angularFullVersion = Number(`${angularMajor}${padVersion(angularMinor)}${padVersion(angularPatch)}`);
|
|
11
|
+
var sourceFileCache;
|
|
12
|
+
var cjt;
|
|
13
|
+
var jt;
|
|
14
|
+
var createAngularCompilation;
|
|
15
|
+
if (angularMajor < 17) throw new Error("AnalogJS is not compatible with Angular v16 and lower");
|
|
17
16
|
else if (angularMajor >= 17 && angularMajor < 18) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const { createJitResourceTransformer, JavaScriptTransformer, SourceFileCache, createAngularCompilation: createAngularCompilationFn, } = require('@angular/build/private');
|
|
35
|
-
sourceFileCache = SourceFileCache;
|
|
36
|
-
cjt = createJitResourceTransformer;
|
|
37
|
-
jt = JavaScriptTransformer;
|
|
38
|
-
createAngularCompilation = createAngularCompilationFn;
|
|
17
|
+
const cp = require("@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin.js");
|
|
18
|
+
const { createJitResourceTransformer } = require("@angular-devkit/build-angular/src/tools/esbuild/angular/jit-resource-transformer.js");
|
|
19
|
+
const { JavaScriptTransformer } = require("@angular-devkit/build-angular/src/tools/esbuild/javascript-transformer.js");
|
|
20
|
+
/**
|
|
21
|
+
* Workaround for compatibility with Angular 17.0+
|
|
22
|
+
*/
|
|
23
|
+
if (typeof cp["SourceFileCache"] !== "undefined") sourceFileCache = cp.SourceFileCache;
|
|
24
|
+
else sourceFileCache = SourceFileCache;
|
|
25
|
+
cjt = createJitResourceTransformer;
|
|
26
|
+
jt = JavaScriptTransformer;
|
|
27
|
+
} else {
|
|
28
|
+
const { createJitResourceTransformer, JavaScriptTransformer, SourceFileCache, createAngularCompilation: createAngularCompilationFn } = require("@angular/build/private");
|
|
29
|
+
sourceFileCache = SourceFileCache;
|
|
30
|
+
cjt = createJitResourceTransformer;
|
|
31
|
+
jt = JavaScriptTransformer;
|
|
32
|
+
createAngularCompilation = createAngularCompilationFn;
|
|
39
33
|
}
|
|
40
|
-
|
|
34
|
+
//#endregion
|
|
35
|
+
export { angularFullVersion, cjt, createAngularCompilation, jt, sourceFileCache };
|
|
36
|
+
|
|
41
37
|
//# sourceMappingURL=devkit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devkit.js","
|
|
1
|
+
{"version":3,"file":"devkit.js","names":[],"sources":["../../../../../../packages/vite-plugin-angular/src/lib/utils/devkit.ts"],"sourcesContent":["import { VERSION } from '@angular/compiler-cli';\nimport { createRequire } from 'node:module';\nimport type { CompilerPluginOptions } from './compiler-plugin-options.js';\nimport * as sfc from './source-file-cache.js';\n\nconst require = createRequire(import.meta.url);\n\nconst angularMajor: number = Number(VERSION.major);\nconst angularMinor: number = Number(VERSION.minor);\nconst angularPatch: number = Number(VERSION.patch);\nconst padVersion = (version: number) => String(version).padStart(2, '0');\nconst angularFullVersion: number = Number(\n `${angularMajor}${padVersion(angularMinor)}${padVersion(angularPatch)}`,\n);\nlet sourceFileCache: any;\nlet cjt: (...args: any[]) => any;\nlet jt: any;\nlet createAngularCompilation: (...args: any[]) => any;\n\nif (angularMajor < 17) {\n throw new Error('AnalogJS is not compatible with Angular v16 and lower');\n} else if (angularMajor >= 17 && angularMajor < 18) {\n const cp = require('@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin.js');\n const {\n createJitResourceTransformer,\n } = require('@angular-devkit/build-angular/src/tools/esbuild/angular/jit-resource-transformer.js');\n const {\n JavaScriptTransformer,\n } = require('@angular-devkit/build-angular/src/tools/esbuild/javascript-transformer.js');\n\n /**\n * Workaround for compatibility with Angular 17.0+\n */\n if (typeof cp['SourceFileCache'] !== 'undefined') {\n sourceFileCache = cp.SourceFileCache;\n } else {\n sourceFileCache = sfc.SourceFileCache;\n }\n\n cjt = createJitResourceTransformer;\n jt = JavaScriptTransformer;\n} else {\n const {\n createJitResourceTransformer,\n JavaScriptTransformer,\n SourceFileCache,\n createAngularCompilation: createAngularCompilationFn,\n } = require('@angular/build/private');\n\n sourceFileCache = SourceFileCache;\n cjt = createJitResourceTransformer;\n jt = JavaScriptTransformer;\n createAngularCompilation = createAngularCompilationFn;\n}\n\nexport {\n cjt as createJitResourceTransformer,\n jt as JavaScriptTransformer,\n sourceFileCache as SourceFileCache,\n CompilerPluginOptions,\n angularMajor,\n angularMinor,\n angularPatch,\n createAngularCompilation,\n angularFullVersion,\n};\n"],"mappings":";;;;AAKA,IAAM,UAAU,cAAc,OAAO,KAAK,IAAI;AAE9C,IAAM,eAAuB,OAAO,QAAQ,MAAM;AAClD,IAAM,eAAuB,OAAO,QAAQ,MAAM;AAClD,IAAM,eAAuB,OAAO,QAAQ,MAAM;AAClD,IAAM,cAAc,YAAoB,OAAO,QAAQ,CAAC,SAAS,GAAG,IAAI;AACxE,IAAM,qBAA6B,OACjC,GAAG,eAAe,WAAW,aAAa,GAAG,WAAW,aAAa,GACtE;AACD,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,IAAI,eAAe,GACjB,OAAM,IAAI,MAAM,wDAAwD;SAC/D,gBAAgB,MAAM,eAAe,IAAI;CAClD,MAAM,KAAK,QAAQ,6EAA6E;CAChG,MAAM,EACJ,iCACE,QAAQ,sFAAsF;CAClG,MAAM,EACJ,0BACE,QAAQ,4EAA4E;;;;AAKxF,KAAI,OAAO,GAAG,uBAAuB,YACnC,mBAAkB,GAAG;KAErB,mBAAkB;AAGpB,OAAM;AACN,MAAK;OACA;CACL,MAAM,EACJ,8BACA,uBACA,iBACA,0BAA0B,+BACxB,QAAQ,yBAAyB;AAErC,mBAAkB;AAClB,OAAM;AACN,MAAK;AACL,4BAA2B"}
|