@gtkx/cli 1.3.0 → 1.5.0
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/README.md +5 -4
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +6 -6
- package/dist/builder.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +3 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +41 -12
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/build.d.ts +0 -4
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +0 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +2 -4
- package/dist/commands/codegen.js.map +1 -1
- package/dist/deploy/depends.d.ts +2 -2
- package/dist/deploy/depends.d.ts.map +1 -1
- package/dist/deploy/depends.js +30 -15
- package/dist/deploy/depends.js.map +1 -1
- package/dist/deploy/freedesktop/localize.d.ts +6 -0
- package/dist/deploy/freedesktop/localize.d.ts.map +1 -0
- package/dist/deploy/freedesktop/localize.js +107 -0
- package/dist/deploy/freedesktop/localize.js.map +1 -0
- package/dist/deploy/install-hints.d.ts.map +1 -1
- package/dist/deploy/install-hints.js +5 -0
- package/dist/deploy/install-hints.js.map +1 -1
- package/dist/deploy/nfpm/config.js +1 -1
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +1 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +2 -2
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.js +2 -2
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/notices/collect.d.ts +3 -1
- package/dist/deploy/notices/collect.d.ts.map +1 -1
- package/dist/deploy/notices/collect.js +2 -2
- package/dist/deploy/notices/collect.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts +2 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +4 -27
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/icons.d.ts +7 -3
- package/dist/deploy/payload/icons.d.ts.map +1 -1
- package/dist/deploy/payload/icons.js +46 -28
- package/dist/deploy/payload/icons.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +2 -0
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +23 -13
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +149 -25
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +9 -0
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -0
- package/dist/deploy/settings/build-manifest.js +80 -0
- package/dist/deploy/settings/build-manifest.js.map +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +9 -3
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts +8 -0
- package/dist/deploy/settings/libraries.d.ts.map +1 -0
- package/dist/deploy/settings/libraries.js +39 -0
- package/dist/deploy/settings/libraries.js.map +1 -0
- package/dist/deploy/settings/paths.d.ts +3 -0
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +6 -32
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/targets/appimage.d.ts.map +1 -1
- package/dist/deploy/targets/appimage.js +19 -13
- package/dist/deploy/targets/appimage.js.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts +2 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.js +5 -1
- package/dist/deploy/targets/flatpak-manifest.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +30 -16
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/tools.d.ts +6 -1
- package/dist/deploy/tools.d.ts.map +1 -1
- package/dist/deploy/tools.js +26 -1
- package/dist/deploy/tools.js.map +1 -1
- package/dist/deploy/types.d.ts +4 -4
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/icon-dir.d.ts +1 -1
- package/dist/dev/icon-dir.d.ts.map +1 -1
- package/dist/dev/icon-dir.js +20 -7
- package/dist/dev/icon-dir.js.map +1 -1
- package/dist/dev/locale-dir.d.ts +3 -0
- package/dist/dev/locale-dir.d.ts.map +1 -0
- package/dist/dev/locale-dir.js +17 -0
- package/dist/dev/locale-dir.js.map +1 -0
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +5 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +6 -4
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +7 -1
- package/dist/dev/runner.js.map +1 -1
- package/dist/dev/schema-dir.d.ts +1 -1
- package/dist/dev/schema-dir.d.ts.map +1 -1
- package/dist/dev/schema-dir.js +3 -1
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/dev/vite-dev-server.d.ts +1 -0
- package/dist/dev/vite-dev-server.d.ts.map +1 -1
- package/dist/dev/vite-dev-server.js.map +1 -1
- package/dist/i18n/binding-extractor.d.ts +30 -0
- package/dist/i18n/binding-extractor.d.ts.map +1 -0
- package/dist/i18n/binding-extractor.js +1324 -0
- package/dist/i18n/binding-extractor.js.map +1 -0
- package/dist/i18n/catalog-template.d.ts +3 -0
- package/dist/i18n/catalog-template.d.ts.map +1 -0
- package/dist/i18n/catalog-template.js +18 -0
- package/dist/i18n/catalog-template.js.map +1 -0
- package/dist/i18n/catalogs.d.ts +21 -0
- package/dist/i18n/catalogs.d.ts.map +1 -0
- package/dist/i18n/catalogs.js +139 -0
- package/dist/i18n/catalogs.js.map +1 -0
- package/dist/i18n/extractor-plugin.d.ts +8 -0
- package/dist/i18n/extractor-plugin.d.ts.map +1 -0
- package/dist/i18n/extractor-plugin.js +247 -0
- package/dist/i18n/extractor-plugin.js.map +1 -0
- package/dist/i18n/metadata-templates.d.ts +11 -0
- package/dist/i18n/metadata-templates.d.ts.map +1 -0
- package/dist/i18n/metadata-templates.js +11 -0
- package/dist/i18n/metadata-templates.js.map +1 -0
- package/dist/i18n/source-messages.d.ts +23 -0
- package/dist/i18n/source-messages.d.ts.map +1 -0
- package/dist/i18n/source-messages.js +403 -0
- package/dist/i18n/source-messages.js.map +1 -0
- package/dist/i18n/types.d.ts +10 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +108 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/internal/build-manifest.d.ts +20 -0
- package/dist/internal/build-manifest.d.ts.map +1 -0
- package/dist/internal/build-manifest.js +6 -0
- package/dist/internal/build-manifest.js.map +1 -0
- package/dist/internal/icon-path.d.ts +13 -0
- package/dist/internal/icon-path.d.ts.map +1 -0
- package/dist/internal/icon-path.js +86 -0
- package/dist/internal/icon-path.js.map +1 -0
- package/dist/internal/source-imports.d.ts +12 -0
- package/dist/internal/source-imports.d.ts.map +1 -0
- package/dist/internal/source-imports.js +123 -0
- package/dist/internal/source-imports.js.map +1 -0
- package/dist/mcp/client.d.ts +0 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +11 -39
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/handlers.d.ts +2 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/widget-properties.d.ts.map +1 -1
- package/dist/mcp/widget-properties.js +3 -12
- package/dist/mcp/widget-properties.js.map +1 -1
- package/dist/settings/render.d.ts +10 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +78 -20
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +4 -3
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +124 -15
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts.map +1 -1
- package/dist/vite-plugins/asset-emitter.js.map +1 -1
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
- package/dist/vite-plugins/asset-extensions.js +1 -0
- package/dist/vite-plugins/asset-extensions.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +2 -1
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +39 -28
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +13 -1
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +39 -1
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -0
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -0
- package/dist/vite-plugins/{bundled-packages.js → build-manifest.js} +20 -14
- package/dist/vite-plugins/build-manifest.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts +1 -1
- package/dist/vite-plugins/built-url.d.ts.map +1 -1
- package/dist/vite-plugins/built-url.js +37 -24
- package/dist/vite-plugins/built-url.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts +5 -0
- package/dist/vite-plugins/i18n.d.ts.map +1 -0
- package/dist/vite-plugins/i18n.js +88 -0
- package/dist/vite-plugins/i18n.js.map +1 -0
- package/dist/vite-plugins/icons.d.ts +2 -1
- package/dist/vite-plugins/icons.d.ts.map +1 -1
- package/dist/vite-plugins/icons.js +25 -12
- package/dist/vite-plugins/icons.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +2 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +9 -5
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/native.d.ts.map +1 -1
- package/dist/vite-plugins/native.js +23 -4
- package/dist/vite-plugins/native.js.map +1 -1
- package/dist/vite-plugins/resource-init-module.d.ts +7 -3
- package/dist/vite-plugins/resource-init-module.d.ts.map +1 -1
- package/dist/vite-plugins/resource-init-module.js +39 -14
- package/dist/vite-plugins/resource-init-module.js.map +1 -1
- package/dist/vite-plugins/resource-shared.d.ts +3 -1
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
- package/dist/vite-plugins/resource-shared.js +3 -1
- package/dist/vite-plugins/resource-shared.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +877 -86
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts.map +1 -1
- package/dist/vite-plugins/self-contained.js +128 -135
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +6 -3
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +3 -1
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +63 -23
- package/dist/vite-plugins/settings.js.map +1 -1
- package/env.d.ts +11 -192
- package/package.json +11 -10
- package/src/builder.ts +7 -7
- package/src/codegen/run-codegen.ts +64 -15
- package/src/commands/build.ts +0 -5
- package/src/commands/codegen.ts +2 -4
- package/src/deploy/depends.ts +47 -18
- package/src/deploy/freedesktop/localize.ts +144 -0
- package/src/deploy/install-hints.ts +5 -0
- package/src/deploy/nfpm/config.ts +1 -1
- package/src/deploy/node-runtime/elf.ts +3 -3
- package/src/deploy/node-runtime/index.ts +2 -2
- package/src/deploy/notices/collect.ts +4 -2
- package/src/deploy/notices/packages.ts +5 -43
- package/src/deploy/payload/icons.ts +64 -34
- package/src/deploy/payload/launcher.ts +2 -0
- package/src/deploy/payload/stage.ts +40 -12
- package/src/deploy/run-deploy.ts +214 -24
- package/src/deploy/settings/build-manifest.ts +122 -0
- package/src/deploy/settings/index.ts +9 -4
- package/src/deploy/settings/libraries.ts +57 -0
- package/src/deploy/settings/paths.ts +10 -47
- package/src/deploy/targets/appimage.ts +32 -15
- package/src/deploy/targets/flatpak-manifest.ts +7 -1
- package/src/deploy/targets/flatpak-source.ts +42 -20
- package/src/deploy/tools.ts +35 -0
- package/src/deploy/types.ts +4 -4
- package/src/dev/icon-dir.ts +31 -7
- package/src/dev/locale-dir.ts +22 -0
- package/src/dev/runner-deps.ts +5 -1
- package/src/dev/runner-main.ts +6 -4
- package/src/dev/runner.ts +10 -2
- package/src/dev/schema-dir.ts +3 -1
- package/src/dev/vite-dev-server.ts +1 -0
- package/src/i18n/binding-extractor.ts +1969 -0
- package/src/i18n/catalog-template.ts +24 -0
- package/src/i18n/catalogs.ts +216 -0
- package/src/i18n/extractor-plugin.ts +413 -0
- package/src/i18n/metadata-templates.ts +29 -0
- package/src/i18n/source-messages.ts +608 -0
- package/src/i18n/types.ts +154 -0
- package/src/internal/build-manifest.ts +32 -0
- package/src/internal/icon-path.ts +127 -0
- package/src/internal/source-imports.ts +171 -0
- package/src/mcp/client.ts +17 -44
- package/src/mcp/handlers.ts +7 -6
- package/src/mcp/widget-properties.ts +3 -14
- package/src/settings/render.ts +113 -21
- package/src/settings/schema.ts +192 -17
- package/src/vite-plugins/asset-emitter.ts +1 -1
- package/src/vite-plugins/asset-extensions.ts +1 -0
- package/src/vite-plugins/asset-imports.ts +62 -33
- package/src/vite-plugins/asset-specifier.ts +73 -1
- package/src/vite-plugins/{bundled-packages.ts → build-manifest.ts} +30 -19
- package/src/vite-plugins/built-url.ts +49 -28
- package/src/vite-plugins/i18n.ts +146 -0
- package/src/vite-plugins/icons.ts +33 -14
- package/src/vite-plugins/index.ts +15 -5
- package/src/vite-plugins/native.ts +31 -4
- package/src/vite-plugins/resource-init-module.ts +44 -15
- package/src/vite-plugins/resource-shared.ts +4 -0
- package/src/vite-plugins/resources.ts +1397 -100
- package/src/vite-plugins/self-contained.ts +150 -169
- package/src/vite-plugins/settings-worker-env.ts +7 -3
- package/src/vite-plugins/settings.ts +89 -21
- package/dist/vite-plugins/bundled-packages.d.ts +0 -5
- package/dist/vite-plugins/bundled-packages.d.ts.map +0 -1
- package/dist/vite-plugins/bundled-packages.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, ResolvedConfig, UserConfig, ViteDevServer } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { error, info, sortStrings } from \"@gtkx/utils\";\nimport { copyFileSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\nimport { loadModuleExclusively } from \"../internal/module-loads.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { ASSET_RE } from \"./asset-extensions.js\";\nimport { DATA_PREFIX, isDataAsset } from \"./asset-specifier.js\";\nimport { renderInitModule } from \"./resource-init-module.js\";\nimport {\n BUNDLE_FILENAME,\n escapeXml,\n fromVirtualId,\n isVirtual,\n REFRESH_EXPORT,\n REL_SEPARATOR,\n RESOURCE_PATH_EXPORT,\n toVirtualId,\n VIRTUAL_INIT,\n} from \"./resource-shared.js\";\n\ntype ResourceEntry = {\n sourcePath: string;\n stagedRelPath: string;\n resourcePath: string;\n};\n\ntype PluginState = {\n prefix: string;\n isBuild: boolean;\n entries: Map<string, ResourceEntry>;\n sourcePaths: Set<string>;\n stagingDir: RetainedStagingDir;\n devBundlePath: string;\n server: ViteDevServer | null;\n compiledSignature: string;\n dataDir: string | null;\n};\n\nconst RESOURCE_COMPILER = \"glib-compile-resources\";\nconst MANIFEST_PREFIX = \"/\";\nconst DEV_STAGING_PREFIX = \"resources-dev\";\n\nconst deriveResourcePrefix = (applicationId: string): string => `/${applicationId.replaceAll(\".\", \"/\")}`;\n\nconst compileBundle = (state: PluginState, outputPath: string): Buffer =>\n withStagingDir(\"resources\", (dir) => {\n const manifest = stageBundle(dir, state.entries);\n\n return runCompiler(dir, manifest, outputPath);\n });\n\nconst stageBundle = (dir: string, entries: Map<string, ResourceEntry>): string => {\n const fileNodes: string[] = [];\n\n for (const entry of entries.values()) {\n const targetPath = join(dir, entry.stagedRelPath);\n mkdirSync(dirname(targetPath), { recursive: true });\n copyFileSync(entry.sourcePath, targetPath);\n fileNodes.push(` <file>${escapeXml(entry.stagedRelPath)}</file>`);\n }\n\n const prefix = escapeXml(MANIFEST_PREFIX);\n const manifest = join(dir, \"gtkx.gresource.xml\");\n\n const xml = [\n \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\",\n \"<gresources>\",\n ` <gresource prefix=\"${prefix}\">`,\n ...fileNodes,\n \" </gresource>\",\n \"</gresources>\",\n \"\",\n ].join(\"\\n\");\n\n writeFileSync(manifest, xml);\n\n return manifest;\n};\n\nconst runCompiler = (sourceDir: string, manifest: string, outputPath: string): Buffer => {\n runCliTool({\n tool: RESOURCE_COMPILER,\n args: [`--sourcedir=${sourceDir}`, `--target=${outputPath}`, manifest],\n });\n\n return readFileSync(outputPath);\n};\n\nconst ensureStagingDir = (state: PluginState): void => {\n state.devBundlePath = join(state.stagingDir.retain(), BUNDLE_FILENAME);\n};\n\nconst releaseStagingDir = (state: PluginState): void => {\n state.stagingDir.release();\n state.devBundlePath = \"\";\n state.compiledSignature = \"\";\n};\n\nconst entriesSignature = (state: PluginState): string => sortStrings(state.entries.keys()).join(\"\\0\");\n\nconst compileDevBundle = (state: PluginState): void => {\n ensureStagingDir(state);\n\n if (state.entries.size === 0) {\n return;\n }\n\n compileBundle(state, state.devBundlePath);\n state.compiledSignature = entriesSignature(state);\n};\n\nconst isRefreshHook = (value: unknown): value is () => void => typeof value === \"function\";\n\nconst reregisterDevBundle = async (state: PluginState): Promise<void> => {\n const server = state.server;\n\n if (!server) {\n return;\n }\n\n const mod = await loadModuleExclusively(server, VIRTUAL_INIT);\n const refresh: unknown = mod[REFRESH_EXPORT];\n\n if (isRefreshHook(refresh)) {\n refresh();\n }\n};\n\nconst scanDataAssets = (dataDir: string): ListedFile[] => listFilesRecursive(dataDir, (name) => ASSET_RE.test(name));\n\nconst primeDevBundle = (state: PluginState): void => {\n if (state.dataDir === null) {\n return;\n }\n\n for (const { absPath, rel } of scanDataAssets(state.dataDir)) {\n registerEntry(state, absPath, rel);\n }\n\n compileDevBundle(state);\n};\n\nconst registerDevAsset = (state: PluginState): void => {\n if (entriesSignature(state) !== state.compiledSignature) {\n compileDevBundle(state);\n }\n};\n\nconst registerEntry = (state: PluginState, absPath: string, rel: string): ResourceEntry => {\n const existing = state.entries.get(absPath);\n\n if (existing) {\n return existing;\n }\n\n const resourcePath = `${state.prefix}/${rel}`;\n\n const entry: ResourceEntry = {\n sourcePath: absPath,\n stagedRelPath: resourcePath.replace(/^\\/+/, \"\"),\n resourcePath,\n };\n\n state.entries.set(absPath, entry);\n state.sourcePaths.add(absPath);\n\n return entry;\n};\n\nconst isTrackedSource = (state: PluginState, file: string): boolean => state.sourcePaths.has(file);\n\nconst resolvedAssetId = (\n resolved: { id: string; external: boolean | string } | null,\n source: string,\n): string | undefined => {\n if (!resolved || resolved.external) {\n return undefined;\n }\n\n return toVirtualId(resolved.id) + REL_SEPARATOR + source.slice(DATA_PREFIX.length);\n};\n\nconst loadInitModule = (state: PluginState): string => {\n if (!state.isBuild) {\n ensureStagingDir(state);\n }\n\n return renderInitModule({ isBuild: state.isBuild, devBundlePath: state.devBundlePath });\n};\n\nconst loadAssetModule = (state: PluginState, virtualId: string): string => {\n const rest = fromVirtualId(virtualId);\n const separatorIndex = rest.indexOf(REL_SEPARATOR);\n const absPath = rest.slice(0, separatorIndex);\n const rel = rest.slice(separatorIndex + REL_SEPARATOR.length);\n const entry = registerEntry(state, absPath, rel);\n const uri = `resource://${entry.resourcePath}`;\n\n if (!state.isBuild) {\n registerDevAsset(state);\n }\n\n return [\n `import { ensureRegistered } from ${JSON.stringify(VIRTUAL_INIT)};`,\n \"ensureRegistered();\",\n `export default ${JSON.stringify(uri)};`,\n `export const ${RESOURCE_PATH_EXPORT} = ${JSON.stringify(entry.resourcePath)};`,\n ].join(\"\\n\");\n};\n\nconst emitBuildBundle = (ctx: AssetEmitter, state: PluginState): void => {\n if (!state.isBuild || state.entries.size === 0) {\n return;\n }\n\n const compiled = withStagingDir(\"resources-out\", (outDir) => compileBundle(state, join(outDir, BUNDLE_FILENAME)));\n ctx.emitFile({ type: \"asset\", fileName: BUNDLE_FILENAME, source: compiled });\n info(`Compiled ${String(state.entries.size)} resource(s) into ${BUNDLE_FILENAME}`);\n};\n\nconst refreshDevRegistration = async (state: PluginState): Promise<void> => {\n compileDevBundle(state);\n\n try {\n await reregisterDevBundle(state);\n } catch (error_) {\n error(\"Failed to refresh GResource bundle:\", error_);\n }\n};\n\nconst resolveResourceConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader) => {\n const { applicationId } = await loadConfig.resolve(config.root ?? process.cwd());\n state.prefix = deriveResourcePrefix(applicationId);\n\n return {\n assetsInclude: [ASSET_RE],\n };\n};\n\nconst refreshTrackedSource = async (state: PluginState, file: string): Promise<void> => {\n if (!isTrackedSource(state, file)) {\n return;\n }\n\n try {\n await refreshDevRegistration(state);\n } catch (error_) {\n error(\"GResource refresh failed:\", error_);\n }\n};\n\nconst attachResourceWatcher = (state: PluginState, server: ViteDevServer): void => {\n state.server = server;\n\n const onFileEvent = (file: string): void => {\n void refreshTrackedSource(state, file);\n };\n\n const onClose = (): void => {\n releaseStagingDir(state);\n };\n\n server.httpServer?.once(\"close\", onClose);\n server.watcher.once(\"close\", onClose);\n server.watcher.on(\"change\", onFileEvent);\n server.watcher.on(\"add\", onFileEvent);\n};\n\nconst applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {\n state.isBuild = config.command === \"build\";\n\n if (state.isBuild) {\n return;\n }\n\n const relativeDataDir = resolveDataDir(config.root);\n state.dataDir = relativeDataDir === null ? null : join(config.root, relativeDataDir);\n};\n\nconst loadResourceModule = (state: PluginState, id: string): string | undefined => {\n if (id === VIRTUAL_INIT) {\n return loadInitModule(state);\n }\n\n if (!isVirtual(id)) {\n return undefined;\n }\n\n return loadAssetModule(state, id);\n};\n\nfunction gtkxResources(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: PluginState = {\n prefix: \"\",\n isBuild: false,\n entries: new Map(),\n sourcePaths: new Set(),\n stagingDir: createRetainedStagingDir(DEV_STAGING_PREFIX),\n devBundlePath: \"\",\n server: null,\n compiledSignature: \"\",\n dataDir: null,\n };\n\n return {\n name: \"gtkx:resources\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n return resolveResourceConfig(state, config, loadConfig);\n },\n\n configResolved(config: ResolvedConfig) {\n applyResolvedConfig(state, config);\n },\n\n configureServer(server) {\n attachResourceWatcher(state, server);\n primeDevBundle(state);\n },\n\n async resolveId(source, importer, opts) {\n if (source === VIRTUAL_INIT) {\n return VIRTUAL_INIT;\n }\n\n if (!isDataAsset(source)) {\n return;\n }\n\n const resolved = await this.resolve(source, importer, { ...opts, skipSelf: true });\n\n return resolvedAssetId(resolved, source);\n },\n\n load(id) {\n return loadResourceModule(state, id);\n },\n\n buildEnd() {\n emitBuildBundle(this, state);\n },\n\n closeBundle() {\n releaseStagingDir(state);\n },\n };\n}\n\nexport { gtkxResources };\n"]}
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { ModuleNode, Plugin, ResolvedConfig, Rolldown, UserConfig, ViteDevServer } from \"vite\";\nimport { createConfigLoader, resourceBasePath } from \"@gtkx/config/internal\";\nimport { error, info, isRecord, sortStrings } from \"@gtkx/utils\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, extname, isAbsolute, join, posix, relative, sep } from \"node:path\";\nimport { parseSync } from \"vite\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\nimport { parseRuntimeImportsIn, type SourceImport, sourceLanguage } from \"../internal/source-imports.js\";\nimport { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { ASSET_RE } from \"./asset-extensions.js\";\nimport {\n DATA_PREFIX,\n isBareRelativeAsset,\n isDataAsset,\n parseIconSpecifier,\n parseResourceSpecifier,\n} from \"./asset-specifier.js\";\nimport { renderInitModule } from \"./resource-init-module.js\";\nimport {\n BUNDLE_FILENAME,\n escapeXml,\n fromVirtualId,\n ICON_NAME_SEPARATOR,\n isVirtual,\n REFRESH_EXPORT,\n REGISTER_REFRESH_EXPORT,\n REL_SEPARATOR,\n RESOURCE_PATH_EXPORT,\n toVirtualId,\n VIRTUAL_INIT,\n} from \"./resource-shared.js\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype ResourceEntry = {\n sourcePath: string;\n stagedRelPath: string;\n resourcePath: string;\n};\n\ntype PluginState = {\n prefix: string;\n root: string;\n isBuild: boolean;\n isV2: boolean;\n entries: Map<string, ResourceEntry>;\n bundledSpecifiers: Map<string, Set<string>>;\n moduleDependencies: Map<string, Set<string>>;\n prunedDependencies: Map<string, Set<string>>;\n declaredEntries: Map<string, Map<string, ResourceEntry>>;\n declaredIcons: Map<string, Map<string, ResourceEntry>>;\n entryModule: string | null;\n sourcePaths: Set<string>;\n missingSourcePaths: Set<string>;\n stagingDir: RetainedStagingDir;\n devBundlePath: string;\n server: ViteDevServer | null;\n compiledSignature: string;\n dataDir: string | null;\n bundleReferenceId: string | null;\n iconOwners: Map<string, ResourceEntry>;\n};\n\ntype ResolveContext = {\n resolve: (\n source: string,\n importer?: string,\n options?: Record<string, unknown>,\n ) => Promise<{ id: string; external?: boolean | string } | null>;\n};\n\ntype PackageOwner = {\n dir: string;\n name: string;\n};\n\ntype AssetResolveRequest = {\n assetSource: string;\n importer: string | undefined;\n resourcePath: string | null;\n options: Record<string, unknown> | undefined;\n};\n\ntype IconResolveRequest = {\n assetSource: string;\n iconName: string | null;\n importer: string | undefined;\n options: Record<string, unknown> | undefined;\n};\n\ntype ResolvedIconEntry = {\n entry: ResourceEntry;\n iconName: string;\n};\n\ntype RetainedIconModuleId = {\n id: string;\n moduleSideEffects: true;\n};\n\ntype ResourceModuleId = string | RetainedIconModuleId;\n\ntype ImporterReconciliation = {\n currentBundled: Set<string>;\n currentDependencies: Set<string>;\n file: string;\n imports: SourceImport[];\n key: string;\n previousBundled: Set<string> | undefined;\n previousDependencies: Set<string> | undefined;\n};\n\ntype DerivedIconEntry = {\n iconIdentity: string;\n iconName: string;\n resourcePath: string;\n};\n\ntype LegacyResolveRequest = {\n source: string;\n importer: string | undefined;\n options: Record<string, unknown> | undefined;\n};\n\nconst RESOURCE_COMPILER = \"glib-compile-resources\";\nconst MANIFEST_PREFIX = \"/\";\nconst DEV_STAGING_PREFIX = \"resources-dev\";\nconst MANIFEST_FILENAME = \"package.json\";\nconst BUNDLED_QUERY_MENTION_RE = /[?&](?:icon|resource)(?:[=&]|$)/;\nconst ICON_EXTENSIONS: Set<string> = new Set([\".png\", \".svg\", \".xpm\"]);\n\nconst ICON_CONTEXTS: Set<string> = new Set([\n \"actions\",\n \"animations\",\n \"apps\",\n \"categories\",\n \"devices\",\n \"emblems\",\n \"emotes\",\n \"filesystems\",\n \"intl\",\n \"mimetypes\",\n \"places\",\n \"status\",\n]);\n\nconst STOCK_ICON_CONTEXTS: Set<string> = new Set([\n \"chart\",\n \"code\",\n \"data\",\n \"form\",\n \"image\",\n \"io\",\n \"media\",\n \"navigation\",\n \"net\",\n \"object\",\n \"table\",\n \"text\",\n]);\n\nconst ICON_SIZE_RE = /^([1-9]\\d*)x\\1(?:@[1-9]\\d*)?$/;\nconst RESERVED_ICON_NAMES: Set<string> = new Set([\"\", \".\", \"..\"]);\n\nconst toForwardSlashes = (value: string): string => value.replaceAll(/[/\\\\]/g, \"/\");\n\nconst isWithin = (root: string, path: string): boolean => {\n const rel = relative(root, path);\n\n return rel.length > 0 && !isAbsolute(rel) && rel !== \"..\" && !rel.startsWith(`..${sep}`);\n};\n\nconst isDependencyFile = (root: string, path: string): boolean =>\n isWithin(root, path) && relative(root, path).split(sep).includes(\"node_modules\");\n\nconst packageIdentityIn = (dir: string): string | null => {\n try {\n const manifest: unknown = JSON.parse(readFileSync(join(dir, MANIFEST_FILENAME), \"utf8\"));\n\n return isRecord(manifest) && typeof manifest.name === \"string\" ? manifest.name : null;\n } catch {\n return null;\n }\n};\n\nconst packageIn = (dir: string): PackageOwner | null => {\n const name = packageIdentityIn(dir);\n\n if (name !== null) {\n return { dir, name };\n }\n\n const parent = dirname(dir);\n\n return parent === dir ? null : packageIn(parent);\n};\n\nconst packageForFile = (file: string): PackageOwner | null => packageIn(dirname(file));\n\nconst validateResourcePath = (resourcePath: string): string => {\n if (\n resourcePath === \"/\" ||\n !resourcePath.startsWith(\"/\") ||\n resourcePath.endsWith(\"/\") ||\n resourcePath.includes(\"\\0\") ||\n posix.normalize(resourcePath) !== resourcePath\n ) {\n throw new Error(\n `${JSON.stringify(resourcePath)} is not a valid GResource path; use an absolute normalized path`,\n );\n }\n\n return resourcePath;\n};\n\nconst derivedResourcePath = (state: PluginState, sourcePath: string): string => {\n if (isWithin(state.root, sourcePath) && !isDependencyFile(state.root, sourcePath)) {\n return validateResourcePath(`${state.prefix}/${toForwardSlashes(relative(state.root, sourcePath))}`);\n }\n\n const owner = packageForFile(sourcePath);\n\n if (owner === null || !isWithin(owner.dir, sourcePath)) {\n throw new Error(`${sourcePath} is outside the application and does not belong to a named package`);\n }\n\n const packagePath = toForwardSlashes(relative(owner.dir, sourcePath));\n\n return validateResourcePath(`${state.prefix}/${owner.name}/${packagePath}`);\n};\n\nconst iconExtension = (sourcePath: string): string => {\n const extension = extname(sourcePath).toLowerCase();\n\n if (!ICON_EXTENSIONS.has(extension)) {\n throw new Error(`${sourcePath} is not a supported themed icon; use an SVG, PNG, or XPM file`);\n }\n\n return extension;\n};\n\nconst hasIconNamePathSeparator = (value: string): boolean =>\n value.includes(\"\\0\") || value.includes(\"/\") || value.includes(\"\\\\\");\n\nconst validateIconName = (value: string): string => {\n if (\n RESERVED_ICON_NAMES.has(value) ||\n hasIconNamePathSeparator(value) ||\n ICON_EXTENSIONS.has(extname(value).toLowerCase())\n ) {\n throw new Error(\n `${JSON.stringify(value)} is not a valid icon name; use an extensionless filename without slashes`,\n );\n }\n\n return value;\n};\n\nconst isIconContext = (parts: string[]): boolean => {\n const [first, second] = parts;\n\n if (parts.length === 1) {\n return first !== undefined && ICON_CONTEXTS.has(first);\n }\n\n return parts.length === 2 && first === \"stock\" && second !== undefined && STOCK_ICON_CONTEXTS.has(second);\n};\n\nconst isIconLayout = (parts: string[]): boolean => {\n const [size, ...context] = parts;\n\n if (size === \"symbolic\") {\n return context.length === 1 && context[0] === \"apps\";\n }\n\n return size !== undefined && (size === \"scalable\" || ICON_SIZE_RE.test(size)) && isIconContext(context);\n};\n\nconst iconLayoutInParts = (parts: string[], beforeIndex: number): string | null => {\n const index = parts.lastIndexOf(\"icons\", beforeIndex);\n\n if (index === -1) {\n return null;\n }\n\n const treePath = parts.slice(index + 1, -1);\n const layout = treePath[0] === \"hicolor\" ? treePath.slice(1) : treePath;\n\n return isIconLayout(layout) ? layout.join(\"/\") : iconLayoutInParts(parts, index - 1);\n};\n\nconst iconLayoutFromTree = (sourcePath: string): string | null => {\n const parts = toForwardSlashes(sourcePath).split(\"/\");\n\n return iconLayoutInParts(parts, parts.length - 2);\n};\n\nconst derivedIconEntry = (\n state: PluginState,\n sourcePath: string,\n requestedName: string | null,\n): DerivedIconEntry => {\n const extension = iconExtension(sourcePath);\n const sourceName = basename(sourcePath, extname(sourcePath));\n const iconName = validateIconName(requestedName ?? sourceName);\n const layout = iconLayoutFromTree(sourcePath);\n\n const iconIdentity = layout === null\n ? `${state.prefix}/icons/${iconName}`\n : `${state.prefix}/icons/${layout}/${iconName}`;\n\n const resourcePath = validateResourcePath(`${iconIdentity}${extension}`);\n\n return { iconIdentity, iconName, resourcePath };\n};\n\nconst hasSideEffectIconImport = (code: string, id: string): boolean => {\n const lang = sourceLanguage(stripQuery(id));\n\n if (lang === undefined || !code.includes(\"?icon\")) {\n return false;\n }\n\n const parsed = parseSync(id, code, { lang });\n\n if (parsed.errors.length > 0) {\n return false;\n }\n\n return parsed.module.staticImports.some(\n (statement) => statement.entries.length === 0 && parseIconSpecifier(statement.moduleRequest.value) !== null,\n );\n};\n\nconst retainSideEffectIconImport = (\n state: PluginState,\n code: string,\n id: string,\n): { code: string; moduleSideEffects: true } | null =>\n state.isV2 && hasSideEffectIconImport(code, id)\n ? { code, moduleSideEffects: true }\n : null;\n\nconst compileBundle = (state: PluginState, outputPath: string): Buffer =>\n withStagingDir(\"resources\", (dir) => {\n const manifest = stageBundle(dir, state.entries);\n\n return runCompiler(dir, manifest, outputPath);\n });\n\nconst stageBundle = (dir: string, entries: Map<string, ResourceEntry>): string => {\n const fileNodes: string[] = [];\n\n for (const entry of entries.values()) {\n const targetPath = join(dir, entry.stagedRelPath);\n mkdirSync(dirname(targetPath), { recursive: true });\n copyFileSync(entry.sourcePath, targetPath);\n fileNodes.push(` <file>${escapeXml(entry.stagedRelPath)}</file>`);\n }\n\n const prefix = escapeXml(MANIFEST_PREFIX);\n const manifest = join(dir, \"gtkx.gresource.xml\");\n\n const xml = [\n \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\",\n \"<gresources>\",\n ` <gresource prefix=\"${prefix}\">`,\n ...fileNodes,\n \" </gresource>\",\n \"</gresources>\",\n \"\",\n ].join(\"\\n\");\n\n writeFileSync(manifest, xml);\n\n return manifest;\n};\n\nconst runCompiler = (sourceDir: string, manifest: string, outputPath: string): Buffer => {\n runCliTool({\n tool: RESOURCE_COMPILER,\n args: [`--sourcedir=${sourceDir}`, `--target=${outputPath}`, manifest],\n });\n\n return readFileSync(outputPath);\n};\n\nconst ensureStagingDir = (state: PluginState): void => {\n state.devBundlePath = join(state.stagingDir.retain(), BUNDLE_FILENAME);\n};\n\nconst releaseStagingDir = (state: PluginState): void => {\n state.stagingDir.release();\n state.devBundlePath = \"\";\n state.compiledSignature = \"\";\n};\n\nconst entriesSignature = (state: PluginState): string =>\n sortStrings([...state.entries].map(([resourcePath, entry]) => `${resourcePath}\\0${entry.sourcePath}`)).join(\"\\0\");\n\nconst compileDevBundle = (state: PluginState): void => {\n ensureStagingDir(state);\n\n if (state.entries.size === 0) {\n rmSync(state.devBundlePath, { force: true });\n state.compiledSignature = \"\";\n\n return;\n }\n\n compileBundle(state, state.devBundlePath);\n state.compiledSignature = entriesSignature(state);\n};\n\nconst isRefreshHook = (value: unknown): value is () => void => typeof value === \"function\";\n\nconst refreshRegisteredDevBundle = (state: PluginState): void => {\n const server = state.server;\n\n if (!server) {\n return;\n }\n\n const refresh: unknown = server.moduleGraph.getModuleById(VIRTUAL_INIT)?.ssrModule?.[REFRESH_EXPORT];\n\n if (isRefreshHook(refresh)) {\n refresh();\n }\n};\n\nconst scanDataAssets = (dataDir: string): ListedFile[] => listFilesRecursive(dataDir, (name) => ASSET_RE.test(name));\n\nconst primeLegacyDevBundle = (state: PluginState): void => {\n if (state.dataDir === null) {\n return;\n }\n\n for (const { absPath, rel } of scanDataAssets(state.dataDir)) {\n registerEntry(state, absPath, rel);\n }\n\n compileDevBundle(state);\n};\n\nconst registerDevAsset = (state: PluginState): void => {\n if (entriesSignature(state) !== state.compiledSignature) {\n compileDevBundle(state);\n }\n};\n\nconst importerKey = (importer: string): string => stripQuery(importer);\n\nconst trackBundledSpecifier = (state: PluginState, importer: string | undefined, source: string): void => {\n if (importer === undefined) {\n return;\n }\n\n const key = importerKey(importer);\n const specifiers = state.bundledSpecifiers.get(key) ?? new Set<string>();\n specifiers.add(source);\n state.bundledSpecifiers.set(key, specifiers);\n};\n\nconst createResourceEntry = (sourcePath: string, resourcePath: string): ResourceEntry => ({\n sourcePath,\n stagedRelPath: resourcePath.replace(/^\\/+/, \"\"),\n resourcePath,\n});\n\nconst activateEntry = (state: PluginState, entry: ResourceEntry): ResourceEntry => {\n const existing = state.entries.get(entry.resourcePath);\n\n if (existing !== undefined) {\n if (existing.sourcePath !== entry.sourcePath) {\n throw new Error(\n `${existing.sourcePath} and ${entry.sourcePath} both resolve to the GResource path ` +\n entry.resourcePath,\n );\n }\n\n return existing;\n }\n\n state.entries.set(entry.resourcePath, entry);\n state.sourcePaths.add(entry.sourcePath);\n\n return entry;\n};\n\nconst isDeclarativeImporter = (state: PluginState, importer: string | undefined): importer is string =>\n !state.isBuild && state.isV2 && importer !== undefined;\n\nconst setSourceAvailability = (state: PluginState, file: string, isAvailable: boolean): void => {\n if (isAvailable) {\n state.missingSourcePaths.delete(file);\n\n return;\n }\n\n state.missingSourcePaths.add(file);\n};\n\nconst isDeclaredSourceAvailable = (state: PluginState, sourcePath: string): boolean => {\n const isAvailable = existsSync(sourcePath);\n setSourceAvailability(state, sourcePath, isAvailable);\n\n return isAvailable;\n};\n\nconst declareEntry = (state: PluginState, importer: string, entry: ResourceEntry): ResourceEntry => {\n const key = importerKey(importer);\n const declarations = state.declaredEntries.get(key) ?? new Map<string, ResourceEntry>();\n const existing = declarations.get(entry.resourcePath);\n\n if (existing !== undefined && existing.sourcePath !== entry.sourcePath) {\n throw new Error(\n `${existing.sourcePath} and ${entry.sourcePath} both resolve to the GResource path ` +\n entry.resourcePath,\n );\n }\n\n const declared = existing ?? entry;\n declarations.set(entry.resourcePath, declared);\n state.declaredEntries.set(key, declarations);\n state.server?.watcher.add(dirname(declared.sourcePath));\n\n return declared;\n};\n\nconst declareIcon = (\n state: PluginState,\n importer: string,\n iconIdentity: string,\n entry: ResourceEntry,\n): void => {\n const key = importerKey(importer);\n const declarations = state.declaredIcons.get(key) ?? new Map<string, ResourceEntry>();\n const existing = declarations.get(iconIdentity);\n\n if (existing !== undefined && existing.sourcePath !== entry.sourcePath) {\n throw new Error(\n `${existing.sourcePath} and ${entry.sourcePath} both claim the themed icon ${iconIdentity}`,\n );\n }\n\n declarations.set(iconIdentity, existing ?? entry);\n state.declaredIcons.set(key, declarations);\n};\n\nconst assertIconIdentityAvailable = (\n state: PluginState,\n iconIdentity: string,\n sourcePath: string,\n): void => {\n const existing = state.iconOwners.get(iconIdentity);\n\n if (existing !== undefined && existing.sourcePath !== sourcePath) {\n throw new Error(\n `${existing.sourcePath} and ${sourcePath} both claim the themed icon ${iconIdentity}`,\n );\n }\n};\n\nconst declareResolvedIcon = (\n state: PluginState,\n importer: string | undefined,\n iconIdentity: string,\n entry: ResourceEntry,\n): void => {\n if (isDeclarativeImporter(state, importer)) {\n declareIcon(state, importer, iconIdentity, entry);\n }\n};\n\nconst registerEntry = (\n state: PluginState,\n absPath: string,\n rel: string,\n importer?: string,\n): ResourceEntry => {\n const resourcePath = validateResourcePath(rel.startsWith(\"/\") ? rel : `${state.prefix}/${rel}`);\n let entry = createResourceEntry(absPath, resourcePath);\n\n if (isDeclarativeImporter(state, importer)) {\n entry = declareEntry(state, importer, entry);\n\n if (!isImporterActive(state, importer) || !isDeclaredSourceAvailable(state, absPath)) {\n return entry;\n }\n }\n\n return activateEntry(state, entry);\n};\n\nconst registerIconEntry = (\n state: PluginState,\n sourcePath: string,\n derived: DerivedIconEntry,\n importer: string | undefined,\n): ResourceEntry => {\n const shouldActivate = !isDeclarativeImporter(state, importer) ||\n (isImporterActive(state, importer) && isDeclaredSourceAvailable(state, sourcePath));\n\n if (shouldActivate) {\n assertIconIdentityAvailable(state, derived.iconIdentity, sourcePath);\n }\n\n const entry = registerEntry(state, sourcePath, derived.resourcePath, importer);\n declareResolvedIcon(state, importer, derived.iconIdentity, entry);\n\n if (shouldActivate) {\n state.iconOwners.set(derived.iconIdentity, entry);\n }\n\n return entry;\n};\n\nconst isTrackedSource = (state: PluginState, file: string): boolean => state.sourcePaths.has(file);\n\nconst hasSourceEntry = (entries: Map<string, ResourceEntry>, file: string): boolean => {\n for (const entry of entries.values()) {\n if (entry.sourcePath === file) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasDeclaredSource = (\n declarations: Map<string, Map<string, ResourceEntry>>,\n file: string,\n): boolean => {\n for (const entries of declarations.values()) {\n if (hasSourceEntry(entries, file)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isDeclaredSource = (state: PluginState, file: string): boolean =>\n hasDeclaredSource(state.declaredEntries, file) || hasDeclaredSource(state.declaredIcons, file);\n\nconst virtualAssetId = (entry: ResourceEntry): string =>\n toVirtualId(entry.sourcePath) + REL_SEPARATOR + entry.resourcePath;\n\nconst virtualIconId = ({ entry, iconName }: ResolvedIconEntry): string =>\n virtualAssetId(entry) + ICON_NAME_SEPARATOR + iconName;\n\nconst resolveAssetSource = async (\n ctx: ResolveContext,\n request: { assetSource: string; importer: string | undefined; options: Record<string, unknown> | undefined },\n): Promise<string | undefined> => {\n const resolved = await ctx.resolve(request.assetSource, request.importer, {\n ...request.options,\n skipSelf: true,\n });\n\n if (!resolved || resolved.external) {\n return undefined;\n }\n\n const sourcePath = stripQuery(resolved.id);\n\n if (!isAbsolute(sourcePath)) {\n throw new Error(`${JSON.stringify(request.assetSource)} did not resolve to a file-backed asset`);\n }\n\n return sourcePath;\n};\n\nconst resolveAssetEntry = async (\n ctx: ResolveContext,\n state: PluginState,\n request: AssetResolveRequest,\n): Promise<ResourceEntry | undefined> => {\n const sourcePath = await resolveAssetSource(ctx, request);\n\n if (sourcePath === undefined) {\n return undefined;\n }\n\n return registerEntry(\n state,\n sourcePath,\n request.resourcePath === null\n ? derivedResourcePath(state, sourcePath)\n : validateResourcePath(request.resourcePath),\n request.importer,\n );\n};\n\nconst resolveIconEntry = async (\n ctx: ResolveContext,\n state: PluginState,\n request: IconResolveRequest,\n): Promise<ResolvedIconEntry | undefined> => {\n const sourcePath = await resolveAssetSource(ctx, request);\n\n if (sourcePath === undefined) {\n return undefined;\n }\n\n const derived = derivedIconEntry(state, sourcePath, request.iconName);\n\n return {\n entry: registerIconEntry(state, sourcePath, derived, request.importer),\n iconName: derived.iconName,\n };\n};\n\nconst resolveLegacyAssetEntry = async (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<ResourceEntry | undefined> => {\n const resolved = await ctx.resolve(request.source, request.importer, { ...request.options, skipSelf: true });\n\n if (!resolved || resolved.external) {\n return undefined;\n }\n\n const sourcePath = stripQuery(resolved.id);\n\n if (!isAbsolute(sourcePath)) {\n return undefined;\n }\n\n return registerEntry(state, sourcePath, request.source.slice(DATA_PREFIX.length));\n};\n\nconst loadInitModule = (state: PluginState): string => {\n if (state.isBuild) {\n if (state.bundleReferenceId === null) {\n throw new Error(\"Cannot render the GResource loader before its bundle has been emitted\");\n }\n\n return renderInitModule({ isBuild: true, bundleReferenceId: state.bundleReferenceId });\n }\n\n ensureStagingDir(state);\n\n return renderInitModule({ isBuild: false, devBundlePath: state.devBundlePath });\n};\n\nconst virtualAssetMetadata = (virtualId: string): { absPath: string; iconName: string | null; rel: string } => {\n const rest = fromVirtualId(virtualId);\n const separatorIndex = rest.indexOf(REL_SEPARATOR);\n const relAndMetadata = rest.slice(separatorIndex + REL_SEPARATOR.length);\n const iconSeparatorIndex = relAndMetadata.indexOf(ICON_NAME_SEPARATOR);\n\n return {\n absPath: rest.slice(0, separatorIndex),\n iconName: iconSeparatorIndex === -1\n ? null\n : relAndMetadata.slice(iconSeparatorIndex + ICON_NAME_SEPARATOR.length),\n rel: iconSeparatorIndex === -1 ? relAndMetadata : relAndMetadata.slice(0, iconSeparatorIndex),\n };\n};\n\nconst resourcePathExport = (entry: ResourceEntry, iconName: string | null): string[] =>\n iconName === null ? [`export const ${RESOURCE_PATH_EXPORT} = ${JSON.stringify(entry.resourcePath)};`] : [];\n\nconst assetModuleImports = (iconName: string | null): string[] => {\n const initBindings = iconName === null\n ? \"ensureRegistered\"\n : `ensureRegistered, ${REGISTER_REFRESH_EXPORT}`;\n\n return [\n `import { ${initBindings} } from ${JSON.stringify(VIRTUAL_INIT)};`,\n ...(iconName === null\n ? []\n : [\n \"import { Display } from \\\"@gtkx/gi/gdk\\\";\",\n \"import { IconTheme } from \\\"@gtkx/gi/gtk\\\";\",\n ]),\n ];\n};\n\nconst iconThemeRegistration = (state: PluginState, iconName: string | null): string[] => {\n if (iconName === null) {\n return [];\n }\n\n const resourceIconPath = `${state.prefix}/icons`;\n\n return [\n `const resourceIconPath = ${JSON.stringify(resourceIconPath)};`,\n \"function refreshIconTheme() {\",\n \" const display = Display.getDefault();\",\n \" if (!display) return;\",\n \" const theme = IconTheme.getForDisplay(display);\",\n \" const paths = theme.getResourcePath() ?? [];\",\n \" theme.setResourcePath(paths.includes(resourceIconPath) ? [...paths] : [...paths, resourceIconPath]);\",\n \"}\",\n `${REGISTER_REFRESH_EXPORT}(resourceIconPath, refreshIconTheme);`,\n ];\n};\n\nconst loadedResourceEntry = (\n state: PluginState,\n sourcePath: string,\n resourcePath: string,\n): { entry: ResourceEntry; isRegistered: boolean } => {\n const registered = state.entries.get(resourcePath);\n\n if (registered === undefined) {\n return { entry: createResourceEntry(sourcePath, resourcePath), isRegistered: false };\n }\n\n if (registered.sourcePath !== sourcePath) {\n throw new Error(\n `${registered.sourcePath} and ${sourcePath} both resolve to the GResource path ${resourcePath}`,\n );\n }\n\n return { entry: registered, isRegistered: true };\n};\n\nconst compileLoadedDevAsset = (state: PluginState, isRegistered: boolean): void => {\n if (isRegistered && !state.isBuild) {\n registerDevAsset(state);\n }\n};\n\nconst loadAssetModule = (state: PluginState, virtualId: string): string => {\n const { absPath, iconName, rel } = virtualAssetMetadata(virtualId);\n const resourcePath = validateResourcePath(rel);\n const { entry, isRegistered } = loadedResourceEntry(state, absPath, resourcePath);\n const uri = `resource://${entry.resourcePath}`;\n const defaultValue = iconName ?? (state.isV2 ? entry.resourcePath : uri);\n compileLoadedDevAsset(state, isRegistered);\n\n return [\n ...assetModuleImports(iconName),\n \"ensureRegistered();\",\n ...iconThemeRegistration(state, iconName),\n `export default ${JSON.stringify(defaultValue)};`,\n ...resourcePathExport(entry, iconName),\n ].join(\"\\n\");\n};\n\nconst finalizeBuildBundle = (\n ctx: Pick<Rolldown.PluginContext, \"getFileName\">,\n bundle: Rolldown.OutputBundle,\n state: PluginState,\n): void => {\n if (!state.isBuild || state.bundleReferenceId === null) {\n return;\n }\n\n const fileName = ctx.getFileName(state.bundleReferenceId);\n const output = bundle[fileName];\n\n if (output?.type !== \"asset\") {\n throw new Error(`Cannot find the emitted ${BUNDLE_FILENAME} asset`);\n }\n\n if (state.entries.size === 0) {\n Reflect.deleteProperty(bundle, fileName);\n\n return;\n }\n\n const compiled = withStagingDir(\"resources-out\", (outDir) => compileBundle(state, join(outDir, BUNDLE_FILENAME)));\n output.source = compiled;\n info(`Compiled ${String(state.entries.size)} resource(s) into ${BUNDLE_FILENAME}`);\n};\n\nconst refreshDevRegistration = (state: PluginState): void => {\n compileDevBundle(state);\n\n try {\n refreshRegisteredDevBundle(state);\n } catch (error_) {\n error(\"Failed to refresh GResource bundle:\", error_);\n }\n};\n\nconst isSameSpecifiers = (left: Set<string> | undefined, right: Set<string>): boolean =>\n left === undefined\n ? right.size === 0\n : left.size === right.size && [...right].every((source) => left.has(source));\n\nconst bundledSpecifiersIn = (imports: SourceImport[]): Set<string> =>\n new Set(\n imports\n .filter((entry) =>\n parseResourceSpecifier(entry.source) !== null || parseIconSpecifier(entry.source) !== null)\n .map((entry) => entry.source),\n );\n\nconst isSourceModule = (file: string): boolean => sourceLanguage(file) !== undefined;\n\nconst isBundledSource = (source: string): boolean =>\n parseResourceSpecifier(source) !== null || parseIconSpecifier(source) !== null;\n\nconst validateUnbundledV2Source = (source: string): void => {\n if (isLegacyDataSpecifier(source)) {\n throw new Error(`${JSON.stringify(source)} uses the legacy #data asset form`);\n }\n\n rejectInvalidV2Specifier(source);\n};\n\nconst resolvedModuleDependency = async (\n ctx: ResolveContext,\n source: string,\n importer: string,\n): Promise<string | null> => {\n if (isBundledSource(source)) {\n return null;\n }\n\n validateUnbundledV2Source(source);\n const resolved = await ctx.resolve(source, importer, { skipSelf: true });\n\n if (resolved === null) {\n throw new Error(`${JSON.stringify(source)} could not be resolved from ${importer}`);\n }\n\n return resolved.external ? null : importerKey(resolved.id);\n};\n\nconst resolvedModuleDependencies = async (\n ctx: ResolveContext,\n imports: SourceImport[],\n importer: string,\n): Promise<Set<string>> => {\n const dependencies: Set<string> = new Set();\n\n for (const entry of imports) {\n const dependency = await resolvedModuleDependency(ctx, entry.source, importer);\n\n if (dependency !== null) {\n dependencies.add(dependency);\n }\n }\n\n return dependencies;\n};\n\nconst importerReconciliation = async (\n ctx: ResolveContext,\n state: PluginState,\n id: string,\n): Promise<ImporterReconciliation | null> => {\n const file = stripQuery(id);\n const key = importerKey(file);\n\n if (!state.isV2 || state.isBuild || !isSourceModule(file)) {\n return null;\n }\n\n const imports = parseRuntimeImportsIn(file);\n\n if (imports === null) {\n return null;\n }\n\n return {\n currentBundled: bundledSpecifiersIn(imports),\n currentDependencies: await resolvedModuleDependencies(ctx, imports, file),\n file,\n imports,\n key,\n previousBundled: state.bundledSpecifiers.get(key),\n previousDependencies: state.moduleDependencies.get(key),\n };\n};\n\nconst moduleNodeKey = (module: ModuleNode): string => importerKey(module.id ?? module.file ?? module.url);\n\nconst moduleNodeFor = (state: PluginState, id: string): ModuleNode | undefined => {\n const server = state.server;\n\n if (server === null) {\n return undefined;\n }\n\n return server.moduleGraph.getModuleById(id) ?? server.moduleGraph.getModuleById(importerKey(id));\n};\n\nconst restoreDependencies = (pruned: Set<string>, current: Set<string>): void => {\n for (const dependency of current) {\n pruned.delete(dependency);\n }\n};\n\nconst pruneRemovedDependencies = (\n pruned: Set<string>,\n previous: Set<string> | undefined,\n current: Set<string>,\n): void => {\n if (previous === undefined) {\n return;\n }\n\n for (const dependency of previous) {\n if (!current.has(dependency)) {\n pruned.add(dependency);\n }\n }\n};\n\nconst storePrunedDependencies = (state: PluginState, key: string, pruned: Set<string>): void => {\n if (pruned.size === 0) {\n state.prunedDependencies.delete(key);\n\n return;\n }\n\n state.prunedDependencies.set(key, pruned);\n};\n\nconst updatePrunedDependencies = (\n state: PluginState,\n key: string,\n previous: Set<string> | undefined,\n current: Set<string>,\n): void => {\n const pruned = state.prunedDependencies.get(key) ?? new Set<string>();\n restoreDependencies(pruned, current);\n pruneRemovedDependencies(pruned, previous, current);\n storePrunedDependencies(state, key, pruned);\n};\n\nconst isPrunedDependency = (state: PluginState, importer: ModuleNode, imported: ModuleNode): boolean =>\n state.prunedDependencies.get(moduleNodeKey(importer))?.has(moduleNodeKey(imported)) === true;\n\nconst fallbackRootModules = (state: PluginState): string[] => {\n const roots: string[] = [];\n\n for (const key of state.moduleDependencies.keys()) {\n if (moduleNodeFor(state, key)?.importers.size === 0) {\n roots.push(key);\n }\n }\n\n return roots;\n};\n\nconst enqueueCurrentDependencies = (state: PluginState, key: string, pending: string[]): void => {\n const dependencies = state.moduleDependencies.get(key) ?? [];\n\n for (const dependency of dependencies) {\n pending.push(dependency);\n }\n};\n\nconst enqueueGraphDependencies = (state: PluginState, key: string, pending: string[]): void => {\n const module = moduleNodeFor(state, key);\n\n if (module === undefined) {\n return;\n }\n\n for (const imported of module.importedModules) {\n if (!isPrunedDependency(state, module, imported)) {\n pending.push(moduleNodeKey(imported));\n }\n }\n};\n\nconst visitActiveImporter = (\n state: PluginState,\n active: Set<string>,\n pending: string[],\n key: string,\n): void => {\n if (active.has(key)) {\n return;\n }\n\n active.add(key);\n enqueueCurrentDependencies(state, key, pending);\n enqueueGraphDependencies(state, key, pending);\n};\n\nconst activeImporterKeys = (state: PluginState): Set<string> => {\n const active: Set<string> = new Set();\n const roots = state.entryModule === null ? fallbackRootModules(state) : [state.entryModule];\n const pending = [...roots];\n\n while (pending.length > 0) {\n const key = pending.pop();\n\n if (key === undefined || active.has(key)) {\n continue;\n }\n\n visitActiveImporter(state, active, pending, key);\n }\n\n return active;\n};\n\nconst isImporterActive = (state: PluginState, importer: string): boolean =>\n activeImporterKeys(state).has(importerKey(importer));\n\nconst activateDeclaredIcon = (\n state: PluginState,\n iconIdentity: string,\n entry: ResourceEntry,\n): void => {\n const existing = state.iconOwners.get(iconIdentity);\n\n if (existing !== undefined && existing.sourcePath !== entry.sourcePath) {\n throw new Error(\n `${existing.sourcePath} and ${entry.sourcePath} both claim the themed icon ${iconIdentity}`,\n );\n }\n\n state.iconOwners.set(iconIdentity, activateEntry(state, entry));\n};\n\nconst activateDeclaredEntries = (state: PluginState, importer: string): void => {\n const entries = state.declaredEntries.get(importer)?.values() ?? [];\n\n for (const entry of entries) {\n if (isDeclaredSourceAvailable(state, entry.sourcePath)) {\n activateEntry(state, entry);\n }\n }\n};\n\nconst activateDeclaredIcons = (state: PluginState, importer: string): void => {\n const icons = state.declaredIcons.get(importer) ?? [];\n\n for (const [iconIdentity, entry] of icons) {\n if (isDeclaredSourceAvailable(state, entry.sourcePath)) {\n activateDeclaredIcon(state, iconIdentity, entry);\n }\n }\n};\n\nconst activateDeclaredClaims = (state: PluginState, active: Set<string>): void => {\n for (const importer of sortStrings(active)) {\n activateDeclaredEntries(state, importer);\n activateDeclaredIcons(state, importer);\n }\n};\n\nconst rebuildActiveClaims = (state: PluginState): void => {\n const previous = {\n entries: state.entries,\n iconOwners: state.iconOwners,\n sourcePaths: state.sourcePaths,\n };\n\n state.entries = new Map();\n state.iconOwners = new Map();\n state.sourcePaths = new Set();\n\n try {\n activateDeclaredClaims(state, activeImporterKeys(state));\n } catch (error_) {\n state.entries = previous.entries;\n state.iconOwners = previous.iconOwners;\n state.sourcePaths = previous.sourcePaths;\n throw error_;\n }\n};\n\nconst forgetImporterDeclarations = (state: PluginState, importer: string): void => {\n state.declaredEntries.delete(importer);\n state.declaredIcons.delete(importer);\n};\n\nconst cloneStringSetMap = (source: Map<string, Set<string>>): Map<string, Set<string>> => {\n const clone: Map<string, Set<string>> = new Map();\n\n for (const [key, values] of source) {\n clone.set(key, new Set(values));\n }\n\n return clone;\n};\n\nconst cloneDeclarationMap = (\n source: Map<string, Map<string, ResourceEntry>>,\n): Map<string, Map<string, ResourceEntry>> => {\n const clone: Map<string, Map<string, ResourceEntry>> = new Map();\n\n for (const [key, declarations] of source) {\n clone.set(key, new Map(declarations));\n }\n\n return clone;\n};\n\nconst reconciliationCandidate = (state: PluginState): PluginState => ({\n ...state,\n bundledSpecifiers: cloneStringSetMap(state.bundledSpecifiers),\n moduleDependencies: cloneStringSetMap(state.moduleDependencies),\n prunedDependencies: cloneStringSetMap(state.prunedDependencies),\n declaredEntries: cloneDeclarationMap(state.declaredEntries),\n declaredIcons: cloneDeclarationMap(state.declaredIcons),\n missingSourcePaths: new Set(state.missingSourcePaths),\n});\n\nconst storeBundledSpecifiers = (state: PluginState, importer: string, specifiers: Set<string>): void => {\n if (specifiers.size === 0) {\n state.bundledSpecifiers.delete(importer);\n\n return;\n }\n\n state.bundledSpecifiers.set(importer, specifiers);\n};\n\nconst applyImporterGraph = (state: PluginState, reconciliation: ImporterReconciliation): void => {\n updatePrunedDependencies(\n state,\n reconciliation.key,\n reconciliation.previousDependencies,\n reconciliation.currentDependencies,\n );\n\n state.moduleDependencies.set(reconciliation.key, reconciliation.currentDependencies);\n storeBundledSpecifiers(state, reconciliation.key, reconciliation.currentBundled);\n};\n\nconst declareReconciledResource = async (\n ctx: ResolveContext,\n state: PluginState,\n importer: string,\n source: string,\n): Promise<void> => {\n const resourceSpecifier = parseResourceSpecifier(source);\n\n if (resourceSpecifier === null) {\n return;\n }\n\n const entry = await resolveAssetEntry(ctx, state, {\n assetSource: resourceSpecifier.assetSource,\n importer,\n resourcePath: resourceSpecifier.resourcePath,\n options: undefined,\n });\n\n if (entry === undefined || state.missingSourcePaths.has(entry.sourcePath)) {\n throw new Error(`${JSON.stringify(source)} did not resolve to a bundled resource`);\n }\n};\n\nconst declareReconciledIcon = async (\n ctx: ResolveContext,\n state: PluginState,\n importer: string,\n source: string,\n): Promise<void> => {\n const iconSpecifier = parseIconSpecifier(source);\n\n if (iconSpecifier === null) {\n return;\n }\n\n const entry = await resolveIconEntry(ctx, state, {\n assetSource: iconSpecifier.assetSource,\n iconName: iconSpecifier.iconName,\n importer,\n options: undefined,\n });\n\n if (entry === undefined || state.missingSourcePaths.has(entry.entry.sourcePath)) {\n throw new Error(`${JSON.stringify(source)} did not resolve to a bundled icon`);\n }\n};\n\nconst declareReconciledSource = async (\n ctx: ResolveContext,\n state: PluginState,\n importer: string,\n source: string,\n): Promise<void> => {\n await declareReconciledResource(ctx, state, importer, source);\n await declareReconciledIcon(ctx, state, importer, source);\n};\n\nconst declareReconciledImports = async (\n ctx: ResolveContext,\n state: PluginState,\n reconciliation: ImporterReconciliation,\n): Promise<void> => {\n for (const entry of reconciliation.imports) {\n if (isBundledSource(entry.source)) {\n await declareReconciledSource(ctx, state, reconciliation.file, entry.source);\n }\n }\n};\n\nconst prepareReconciliation = async (\n ctx: ResolveContext,\n state: PluginState,\n reconciliation: ImporterReconciliation,\n): Promise<PluginState> => {\n const candidate = reconciliationCandidate(state);\n\n const isBundledChanged = !isSameSpecifiers(\n reconciliation.previousBundled,\n reconciliation.currentBundled,\n );\n\n if (isBundledChanged) {\n forgetImporterDeclarations(candidate, reconciliation.key);\n }\n\n applyImporterGraph(candidate, reconciliation);\n rebuildActiveClaims(candidate);\n\n if (isBundledChanged) {\n await declareReconciledImports(ctx, candidate, reconciliation);\n }\n\n return candidate;\n};\n\nconst commitReconciliation = (state: PluginState, candidate: PluginState): void => {\n state.entries = candidate.entries;\n state.bundledSpecifiers = candidate.bundledSpecifiers;\n state.moduleDependencies = candidate.moduleDependencies;\n state.prunedDependencies = candidate.prunedDependencies;\n state.declaredEntries = candidate.declaredEntries;\n state.declaredIcons = candidate.declaredIcons;\n state.missingSourcePaths = candidate.missingSourcePaths;\n state.sourcePaths = candidate.sourcePaths;\n state.iconOwners = candidate.iconOwners;\n};\n\nconst reconcileV2Importer = async (ctx: ResolveContext, state: PluginState, id: string): Promise<void> => {\n const reconciliation = await importerReconciliation(ctx, state, id);\n\n if (reconciliation === null) {\n return;\n }\n\n const previousSignature = entriesSignature(state);\n const candidate = await prepareReconciliation(ctx, state, reconciliation);\n commitReconciliation(state, candidate);\n\n if (entriesSignature(state) !== previousSignature) {\n refreshDevRegistration(state);\n }\n};\n\nconst resolveResourceConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader) => {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n state.prefix = resourceBasePath(loaded.config.applicationId);\n state.root = loaded.root;\n state.isV2 = loaded.config.future?.v2ResourceImports === true;\n\n return {\n assetsInclude: [ASSET_RE],\n };\n};\n\nconst refreshTrackedSource = (state: PluginState, file: string): void => {\n if (!isTrackedSource(state, file)) {\n return;\n }\n\n try {\n refreshDevRegistration(state);\n } catch (error_) {\n error(\"GResource refresh failed:\", error_);\n }\n};\n\nconst rebuildForSourceAvailability = (state: PluginState, previousSignature: string): void => {\n try {\n rebuildActiveClaims(state);\n\n if (entriesSignature(state) !== previousSignature) {\n refreshDevRegistration(state);\n }\n } catch (error_) {\n error(\"GResource source update failed:\", error_);\n }\n};\n\nconst updateTrackedSourceAvailability = (state: PluginState, file: string, isAvailable: boolean): void => {\n if (!isTrackedSource(state, file) && !state.missingSourcePaths.has(file) && !isDeclaredSource(state, file)) {\n return;\n }\n\n const previousSignature = entriesSignature(state);\n setSourceAvailability(state, file, isAvailable);\n rebuildForSourceAvailability(state, previousSignature);\n};\n\nconst attachResourceWatcher = (state: PluginState, server: ViteDevServer): void => {\n state.server = server;\n\n const onChange = (file: string): void => {\n refreshTrackedSource(state, file);\n };\n\n const onAdd = (file: string): void => {\n updateTrackedSourceAvailability(state, file, true);\n };\n\n const onUnlink = (file: string): void => {\n updateTrackedSourceAvailability(state, file, false);\n };\n\n const onClose = (): void => {\n releaseStagingDir(state);\n };\n\n server.httpServer?.once(\"close\", onClose);\n server.watcher.once(\"close\", onClose);\n server.watcher.on(\"change\", onChange);\n server.watcher.on(\"add\", onAdd);\n server.watcher.on(\"unlink\", onUnlink);\n};\n\nconst applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {\n state.isBuild = config.command === \"build\";\n state.root = config.root;\n state.dataDir = null;\n\n if (state.isBuild || state.isV2) {\n return;\n }\n\n const relativeDataDir = resolveDataDir(config.root);\n state.dataDir = relativeDataDir === null ? null : join(config.root, relativeDataDir);\n};\n\nconst loadResourceModule = (state: PluginState, id: string): string | undefined => {\n if (id === VIRTUAL_INIT) {\n return loadInitModule(state);\n }\n\n if (!isVirtual(id)) {\n return undefined;\n }\n\n return loadAssetModule(state, id);\n};\n\nconst isLegacyDataSpecifier = (source: string): boolean =>\n source.startsWith(DATA_PREFIX) && ASSET_RE.test(stripQuery(source));\n\nconst rejectInvalidV2Specifier = (source: string): void => {\n if (BUNDLED_QUERY_MENTION_RE.test(source)) {\n throw new Error(\n `${JSON.stringify(source)} is not a valid bundled asset import; use ?resource, ` +\n \"?resource=/absolute/path, ?icon, or ?icon=name\",\n );\n }\n\n if (isBareRelativeAsset(source)) {\n throw new Error(\n `${JSON.stringify(source)} must choose ?resource for a GResource, ?icon for a themed icon, ` +\n \"or ?url for an emitted file\",\n );\n }\n};\n\nconst resolveExplicitResourceId = async (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<string | undefined> => {\n const specifier = parseResourceSpecifier(request.source);\n\n if (specifier === null) {\n return undefined;\n }\n\n const entry = await resolveAssetEntry(ctx, state, {\n assetSource: specifier.assetSource,\n importer: request.importer,\n resourcePath: specifier.resourcePath,\n options: request.options,\n });\n\n return entry === undefined ? undefined : virtualAssetId(entry);\n};\n\nconst resolveIconResourceId = async (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<RetainedIconModuleId | undefined> => {\n const specifier = parseIconSpecifier(request.source);\n\n if (specifier === null) {\n return undefined;\n }\n\n const resolved = await resolveIconEntry(ctx, state, {\n assetSource: specifier.assetSource,\n iconName: specifier.iconName,\n importer: request.importer,\n options: request.options,\n });\n\n return resolved === undefined\n ? undefined\n : { id: virtualIconId(resolved), moduleSideEffects: true };\n};\n\nconst resolveV2ResourceId = async (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<ResourceModuleId | undefined> => {\n if (isLegacyDataSpecifier(request.source)) {\n throw new Error(\n `${JSON.stringify(request.source)} uses the legacy #data asset form; import it relatively with ` +\n \"?resource or ?url\",\n );\n }\n\n if (parseResourceSpecifier(request.source) !== null) {\n const resolved = await resolveExplicitResourceId(ctx, state, request);\n trackBundledSpecifier(state, request.importer, request.source);\n\n return resolved;\n }\n\n if (parseIconSpecifier(request.source) !== null) {\n const resolved = await resolveIconResourceId(ctx, state, request);\n trackBundledSpecifier(state, request.importer, request.source);\n\n return resolved;\n }\n\n rejectInvalidV2Specifier(request.source);\n\n return undefined;\n};\n\nconst resolveLegacyResourceId = async (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<string | undefined> => {\n if (BUNDLED_QUERY_MENTION_RE.test(request.source)) {\n throw new Error(`${JSON.stringify(request.source)} requires future.v2ResourceImports`);\n }\n\n if (!isDataAsset(request.source)) {\n return undefined;\n }\n\n const entry = await resolveLegacyAssetEntry(ctx, state, request);\n\n return entry === undefined ? undefined : virtualAssetId(entry);\n};\n\nconst resolveResourceId = (\n ctx: ResolveContext,\n state: PluginState,\n request: LegacyResolveRequest,\n): Promise<ResourceModuleId | undefined> => {\n if (request.source === VIRTUAL_INIT) {\n return Promise.resolve(VIRTUAL_INIT);\n }\n\n return state.isV2\n ? resolveV2ResourceId(ctx, state, request)\n : resolveLegacyResourceId(ctx, state, request);\n};\n\nconst configureResourceServer = (state: PluginState, server: ViteDevServer): void => {\n attachResourceWatcher(state, server);\n primeLegacyDevBundle(state);\n};\n\nconst createResourcesPlugin = (state: PluginState, loadConfig: ConfigLoader): Plugin => ({\n name: \"gtkx:resources\",\n enforce: \"pre\",\n perEnvironmentStartEndDuringDev: true,\n\n config: (config: UserConfig) => resolveResourceConfig(state, config, loadConfig),\n\n configResolved: (config: ResolvedConfig) => {\n applyResolvedConfig(state, config);\n },\n\n configureServer: (server) => {\n configureResourceServer(state, server);\n },\n\n buildStart() {\n if (state.isBuild && state.bundleReferenceId === null) {\n state.bundleReferenceId = this.emitFile({\n type: \"asset\",\n fileName: BUNDLE_FILENAME,\n source: \"\",\n });\n }\n },\n\n resolveId(source, importer, options) {\n return resolveResourceId(this, state, { source, importer, options });\n },\n\n load(id) {\n return loadResourceModule(state, id);\n },\n\n async transform(code, id) {\n await reconcileV2Importer(this, state, id);\n\n return retainSideEffectIconImport(state, code, id);\n },\n\n generateBundle(_options, bundle) {\n finalizeBuildBundle(this, bundle, state);\n },\n\n closeBundle() {\n releaseStagingDir(state);\n },\n});\n\nfunction gtkxResources(loadConfig: ConfigLoader = createConfigLoader(), entryPath?: string): Plugin {\n const state: PluginState = {\n prefix: \"\",\n root: \"\",\n isBuild: false,\n isV2: false,\n entries: new Map(),\n bundledSpecifiers: new Map(),\n moduleDependencies: new Map(),\n prunedDependencies: new Map(),\n declaredEntries: new Map(),\n declaredIcons: new Map(),\n entryModule: entryPath === undefined ? null : importerKey(entryPath),\n sourcePaths: new Set(),\n missingSourcePaths: new Set(),\n stagingDir: createRetainedStagingDir(DEV_STAGING_PREFIX),\n devBundlePath: \"\",\n server: null,\n compiledSignature: \"\",\n dataDir: null,\n bundleReferenceId: null,\n iconOwners: new Map(),\n };\n\n return createResourcesPlugin(state, loadConfig);\n}\n\nexport { gtkxResources };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-contained.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"self-contained.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,MAAM,EAAiB,MAAM,MAAM,CAAC;AA2T1D,iBAAS,iBAAiB,IAAI,MAAM,CAenC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,198 +1,191 @@
|
|
|
1
|
-
import { isRecord } from "@gtkx/utils";
|
|
2
1
|
import { isBuiltin } from "node:module";
|
|
3
2
|
import { posix } from "node:path";
|
|
4
|
-
import { parseSync } from "vite";
|
|
3
|
+
import { parseSync, Visitor } from "vite";
|
|
5
4
|
const REQUIRE_FACTORY = "createRequire";
|
|
6
5
|
const REQUIRE_BINDING = "require";
|
|
7
6
|
const RESOLVE_PROPERTY = "resolve";
|
|
8
7
|
const MODULE_BUILTIN = "node:module";
|
|
9
8
|
const OUTPUT_DIRECTORY = ".";
|
|
10
9
|
const RELATIVE_SPECIFIER = /^\.\.?(?:\/|$)/;
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
"ExportNamedDeclaration",
|
|
15
|
-
"ImportDeclaration",
|
|
16
|
-
"ImportExpression",
|
|
17
|
-
]);
|
|
18
|
-
const isAstNode = (value) => isRecord(value) && typeof value.type === "string";
|
|
19
|
-
const nodeType = (node) => (typeof node.type === "string" ? node.type : "");
|
|
20
|
-
const nodeName = (node) => node !== null && typeof node.name === "string" ? node.name : null;
|
|
21
|
-
const childNode = (node, key) => {
|
|
22
|
-
const value = node[key];
|
|
23
|
-
return isAstNode(value) ? value : null;
|
|
24
|
-
};
|
|
25
|
-
const childNodes = (node, key) => {
|
|
26
|
-
const value = node[key];
|
|
27
|
-
if (!Array.isArray(value)) {
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
const entries = value;
|
|
31
|
-
return entries.filter(isAstNode);
|
|
32
|
-
};
|
|
33
|
-
const childValues = (value) => {
|
|
34
|
-
if (Array.isArray(value)) {
|
|
35
|
-
const entries = value;
|
|
36
|
-
return entries;
|
|
37
|
-
}
|
|
38
|
-
if (!isAstNode(value)) {
|
|
39
|
-
return [];
|
|
40
|
-
}
|
|
41
|
-
return Object.values(value).filter((child) => typeof child === "object" && child !== null);
|
|
42
|
-
};
|
|
43
|
-
const visitNode = (value, visit) => {
|
|
44
|
-
if (isAstNode(value)) {
|
|
45
|
-
visit(value);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
const walk = (root, visit) => {
|
|
49
|
-
const stack = [root];
|
|
50
|
-
while (stack.length > 0) {
|
|
51
|
-
const current = stack.pop();
|
|
52
|
-
visitNode(current, visit);
|
|
53
|
-
for (const value of childValues(current)) {
|
|
54
|
-
stack.push(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const countName = (declarations, node) => {
|
|
59
|
-
const name = nodeName(node);
|
|
10
|
+
const exportName = (name) => (name.type === "Identifier" ? name.name : null);
|
|
11
|
+
const referenceName = (node) => (node.type === "Identifier" ? node.name : null);
|
|
12
|
+
const countName = (declarations, name) => {
|
|
60
13
|
if (name !== null) {
|
|
61
14
|
declarations.set(name, (declarations.get(name) ?? 0) + 1);
|
|
62
15
|
}
|
|
63
16
|
};
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
17
|
+
const boundPattern = (item) => {
|
|
18
|
+
if (item === null) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (item.type === "Property") {
|
|
22
|
+
return item.value;
|
|
23
|
+
}
|
|
24
|
+
if (item.type === "RestElement") {
|
|
25
|
+
return item.argument;
|
|
26
|
+
}
|
|
27
|
+
return item.type === "TSParameterProperty" ? item.parameter : item;
|
|
28
|
+
};
|
|
29
|
+
const countPatterns = (declarations, items) => {
|
|
30
|
+
for (const item of items) {
|
|
31
|
+
countPattern(declarations, boundPattern(item));
|
|
69
32
|
}
|
|
70
33
|
};
|
|
34
|
+
const countPattern = (declarations, pattern) => {
|
|
35
|
+
if (pattern === null) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (pattern.type === "Identifier") {
|
|
39
|
+
countName(declarations, pattern.name);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (pattern.type === "AssignmentPattern") {
|
|
43
|
+
countPattern(declarations, pattern.left);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
countPatterns(declarations, pattern.type === "ObjectPattern" ? pattern.properties : pattern.elements);
|
|
47
|
+
};
|
|
48
|
+
const countFunction = (declarations, node) => {
|
|
49
|
+
countPattern(declarations, node.id);
|
|
50
|
+
countPatterns(declarations, node.params);
|
|
51
|
+
};
|
|
52
|
+
const declarationVisitor = (declarations) => ({
|
|
53
|
+
ArrowFunctionExpression: (node) => {
|
|
54
|
+
countFunction(declarations, node);
|
|
55
|
+
},
|
|
56
|
+
CatchClause: (node) => {
|
|
57
|
+
countPattern(declarations, node.param);
|
|
58
|
+
},
|
|
59
|
+
ClassDeclaration: (node) => {
|
|
60
|
+
countPattern(declarations, node.id);
|
|
61
|
+
},
|
|
62
|
+
ClassExpression: (node) => {
|
|
63
|
+
countPattern(declarations, node.id);
|
|
64
|
+
},
|
|
65
|
+
ExportSpecifier: (node) => {
|
|
66
|
+
countName(declarations, exportName(node.local));
|
|
67
|
+
},
|
|
68
|
+
FunctionDeclaration: (node) => {
|
|
69
|
+
countFunction(declarations, node);
|
|
70
|
+
},
|
|
71
|
+
FunctionExpression: (node) => {
|
|
72
|
+
countFunction(declarations, node);
|
|
73
|
+
},
|
|
74
|
+
ImportDefaultSpecifier: (node) => {
|
|
75
|
+
countPattern(declarations, node.local);
|
|
76
|
+
},
|
|
77
|
+
ImportNamespaceSpecifier: (node) => {
|
|
78
|
+
countPattern(declarations, node.local);
|
|
79
|
+
},
|
|
80
|
+
ImportSpecifier: (node) => {
|
|
81
|
+
countPattern(declarations, node.local);
|
|
82
|
+
},
|
|
83
|
+
VariableDeclarator: (node) => {
|
|
84
|
+
countPattern(declarations, node.id);
|
|
85
|
+
},
|
|
86
|
+
});
|
|
71
87
|
const isUnshadowed = (name, bindings) => (bindings.declarations.get(name) ?? 0) <= 1;
|
|
72
88
|
const templateString = (node) => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
const [quasi] = childNodes(node, "quasis");
|
|
77
|
-
const value = quasi === undefined ? null : quasi.value;
|
|
78
|
-
return isRecord(value) && typeof value.cooked === "string" ? value.cooked : null;
|
|
89
|
+
const [quasi] = node.quasis;
|
|
90
|
+
return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;
|
|
79
91
|
};
|
|
80
92
|
const literalString = (node) => {
|
|
81
|
-
if (node ===
|
|
82
|
-
return
|
|
83
|
-
}
|
|
84
|
-
if (nodeType(node) === "Literal") {
|
|
85
|
-
return typeof node.value === "string" ? node.value : null;
|
|
93
|
+
if (node?.type === "TemplateLiteral") {
|
|
94
|
+
return templateString(node);
|
|
86
95
|
}
|
|
87
|
-
return
|
|
96
|
+
return node?.type === "Literal" && typeof node.value === "string" ? node.value : null;
|
|
88
97
|
};
|
|
89
98
|
const isMetaUrl = (node, bindings) => {
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
return object !== null && nodeType(object) === "MetaProperty";
|
|
99
|
+
if (node.type === "MemberExpression") {
|
|
100
|
+
return node.object.type === "MetaProperty";
|
|
93
101
|
}
|
|
94
|
-
const name =
|
|
102
|
+
const name = referenceName(node);
|
|
95
103
|
return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);
|
|
96
104
|
};
|
|
97
|
-
const hasMetaUrl = (node, bindings) =>
|
|
105
|
+
const hasMetaUrl = (node, bindings) => node.arguments.some((argument) => isMetaUrl(argument, bindings));
|
|
98
106
|
const isRequireName = (name, bindings) => name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);
|
|
99
107
|
const isFactoryName = (name, bindings) => name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);
|
|
100
|
-
const isRequireFactory = (node, bindings) =>
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return isFactoryName(nodeName(childNode(node, "callee")), bindings) || hasMetaUrl(node, bindings);
|
|
105
|
-
};
|
|
106
|
-
const isResolveTarget = (object, bindings) => nodeType(object) === "MetaProperty" ||
|
|
107
|
-
isRequireName(nodeName(object), bindings) ||
|
|
108
|
+
const isRequireFactory = (node, bindings) => node.type === "CallExpression" &&
|
|
109
|
+
(isFactoryName(referenceName(node.callee), bindings) || hasMetaUrl(node, bindings));
|
|
110
|
+
const isResolveTarget = (object, bindings) => object.type === "MetaProperty" ||
|
|
111
|
+
isRequireName(referenceName(object), bindings) ||
|
|
108
112
|
isRequireFactory(object, bindings);
|
|
109
|
-
const isResolveMember = (callee, bindings) =>
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
119
|
-
const isResolvingCall = (call, bindings) => {
|
|
120
|
-
if (hasMetaUrl(call, bindings)) {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
const callee = childNode(call, "callee");
|
|
124
|
-
if (callee === null) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
return (isRequireName(nodeName(callee), bindings) ||
|
|
128
|
-
isRequireFactory(callee, bindings) ||
|
|
129
|
-
isResolveMember(callee, bindings));
|
|
130
|
-
};
|
|
113
|
+
const isResolveMember = (callee, bindings) => callee.type === "MemberExpression" &&
|
|
114
|
+
!callee.computed &&
|
|
115
|
+
callee.property.type === "Identifier" &&
|
|
116
|
+
callee.property.name === RESOLVE_PROPERTY &&
|
|
117
|
+
isResolveTarget(callee.object, bindings);
|
|
118
|
+
const isResolvingCall = (call, bindings) => hasMetaUrl(call, bindings) ||
|
|
119
|
+
isRequireName(referenceName(call.callee), bindings) ||
|
|
120
|
+
isRequireFactory(call.callee, bindings) ||
|
|
121
|
+
isResolveMember(call.callee, bindings);
|
|
131
122
|
const collectFactories = (node, bindings) => {
|
|
132
|
-
if (
|
|
123
|
+
if (node.source.value !== MODULE_BUILTIN) {
|
|
133
124
|
return;
|
|
134
125
|
}
|
|
135
|
-
for (const specifier of
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
bindings.factories.add(local);
|
|
126
|
+
for (const specifier of node.specifiers) {
|
|
127
|
+
if (specifier.type === "ImportSpecifier" && exportName(specifier.imported) === REQUIRE_FACTORY) {
|
|
128
|
+
bindings.factories.add(specifier.local.name);
|
|
139
129
|
}
|
|
140
130
|
}
|
|
141
131
|
};
|
|
142
132
|
const collectBinding = (node, bindings) => {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
if (name === null || init === null) {
|
|
133
|
+
const { id, init } = node;
|
|
134
|
+
if (init === null || id.type !== "Identifier") {
|
|
146
135
|
return;
|
|
147
136
|
}
|
|
148
137
|
if (isMetaUrl(init, bindings)) {
|
|
149
|
-
bindings.urls.add(name);
|
|
138
|
+
bindings.urls.add(id.name);
|
|
150
139
|
}
|
|
151
140
|
if (isRequireFactory(init, bindings)) {
|
|
152
|
-
bindings.requires.add(name);
|
|
141
|
+
bindings.requires.add(id.name);
|
|
153
142
|
}
|
|
154
143
|
};
|
|
155
|
-
const
|
|
156
|
-
const collectSource = (scan, node, type) => {
|
|
157
|
-
if (!SOURCE_STATEMENTS.has(type)) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const source = literalString(childNode(node, "source"));
|
|
144
|
+
const collectSource = (scan, source) => {
|
|
161
145
|
if (source !== null) {
|
|
162
146
|
scan.sources.push(source);
|
|
163
147
|
}
|
|
164
148
|
};
|
|
165
|
-
const collectCall = (scan, node
|
|
166
|
-
if (
|
|
149
|
+
const collectCall = (scan, node) => {
|
|
150
|
+
if (node.arguments.some((argument) => literalString(argument) !== null)) {
|
|
167
151
|
scan.calls.push(node);
|
|
168
152
|
}
|
|
169
153
|
};
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
154
|
+
const scanVisitor = (scan) => ({
|
|
155
|
+
CallExpression: (node) => {
|
|
156
|
+
collectCall(scan, node);
|
|
157
|
+
},
|
|
158
|
+
ExportAllDeclaration: (node) => {
|
|
159
|
+
collectSource(scan, node.source.value);
|
|
160
|
+
},
|
|
161
|
+
ExportNamedDeclaration: (node) => {
|
|
162
|
+
collectSource(scan, node.source?.value ?? null);
|
|
163
|
+
},
|
|
164
|
+
ImportDeclaration: (node) => {
|
|
174
165
|
collectFactories(node, scan.bindings);
|
|
175
|
-
|
|
176
|
-
|
|
166
|
+
collectSource(scan, node.source.value);
|
|
167
|
+
},
|
|
168
|
+
ImportExpression: (node) => {
|
|
169
|
+
collectSource(scan, literalString(node.source));
|
|
170
|
+
},
|
|
171
|
+
VariableDeclarator: (node) => {
|
|
177
172
|
collectBinding(node, scan.bindings);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
collectCall(scan, node, type);
|
|
181
|
-
};
|
|
173
|
+
},
|
|
174
|
+
});
|
|
182
175
|
const scanChunk = (chunk) => {
|
|
183
176
|
const scan = {
|
|
184
177
|
bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },
|
|
185
178
|
calls: [],
|
|
186
179
|
sources: [],
|
|
187
180
|
};
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
181
|
+
const { program } = parseSync(chunk.fileName, chunk.code);
|
|
182
|
+
new Visitor(declarationVisitor(scan.bindings.declarations)).visit(program);
|
|
183
|
+
new Visitor(scanVisitor(scan)).visit(program);
|
|
191
184
|
return scan;
|
|
192
185
|
};
|
|
193
186
|
const callSpecifiers = (scan) => scan.calls
|
|
194
187
|
.filter((call) => isResolvingCall(call, scan.bindings))
|
|
195
|
-
.flatMap((call) =>
|
|
188
|
+
.flatMap((call) => call.arguments)
|
|
196
189
|
.map((argument) => literalString(argument))
|
|
197
190
|
.filter((specifier) => specifier !== null);
|
|
198
191
|
const isReachable = (specifier, directory, emitted) => {
|