@forgeax/engine-font 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/.tsbuildinfo CHANGED
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../types/dist/animation-target.d.ts","../../types/dist/asset-errors.d.ts","../../types/dist/result.d.ts","../../types/dist/asset-evidence.d.ts","../../types/dist/asset.d.ts","../../types/dist/material/color-space.d.ts","../../types/dist/material/asset.d.ts","../../types/dist/vfx.d.ts","../../types/dist/asset-runtime.d.ts","../../types/dist/handle.d.ts","../../types/dist/material/errors.d.ts","../../types/dist/material/resolve.d.ts","../../types/dist/material/index.d.ts","../../types/dist/asset-producer.d.ts","../../types/dist/catalog.d.ts","../../types/dist/runtime-scope.d.ts","../../types/dist/texture/asset.d.ts","../../types/dist/texture/errors.d.ts","../../types/dist/texture/layout.d.ts","../../types/dist/texture/index.d.ts","../../types/dist/derive-paramschema.d.ts","../../types/dist/import.d.ts","../../types/dist/index.d.ts","../src/node-worker-adapter.ts","../../../node_modules/.pnpm/@zappar+msdf-generator@1.2.4/node_modules/@zappar/msdf-generator/dist/index.d.ts","../src/cli-font.ts","../src/font-importer.ts","../../pack/dist/errors.d.ts","../../pack/dist/guid.d.ts","../src/runtime/font-decoder.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.11/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.11/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/index.d.ts","../src/__tests__/font-importer.test.ts","../src/__tests__/font-local-artifacts.test.ts","../../pack/dist/artifact-path.d.ts","../../pack/dist/scriptable-pack.d.ts","../../pack/dist/evidence/source-inventory.d.ts","../../pack/dist/scriptable-pack-node.d.ts","../../pack/dist/scanner.d.ts","../../pack/dist/catalog-builder.d.ts","../../pack/dist/catalog-delta.d.ts","../../pack/dist/catalog-projection.d.ts","../../pack/dist/config.d.ts","../../pack/dist/evidence/material-cook.d.ts","../../pack/dist/evidence/offline-evidence.d.ts","../../pack/dist/mesh-bin-contract.d.ts","../../pack/dist/package-finalizer.d.ts","../../pack/dist/producer-contract.d.ts","../../pack/dist/resolve-asset-source.d.ts","../../../node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/json-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/jtd-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.d.ts","../../pack/dist/schema-compiled.d.ts","../../pack/dist/runtime.d.ts","../../pack/dist/runtime-publication.d.ts","../../pack/dist/topology.d.ts","../../pack/dist/build.d.ts","../../pack/dist/native-cooker-registry.d.ts","../../pack/dist/native-cooker.d.ts","../../import/dist/import-product.d.ts","../../import/dist/importer-registry.d.ts","../../import/dist/import-runner.d.ts","../../import/dist/build-production.d.ts","../../import/dist/catalog-importer-policy.d.ts","../../import/dist/catalog-inventory.d.ts","../../import/dist/mesh-bin.d.ts","../../import/dist/pack-projection.d.ts","../../pack/dist/material/artifact-writer.d.ts","../../pack/dist/runtime-projection.d.ts","../../pack/dist/index.d.ts","../../import/dist/scriptable-pack.d.ts","../../import/dist/scriptable-source-package.d.ts","../../import/dist/scriptable-pack-host.d.ts","../../import/dist/scriptable-pack-output-producers.d.ts","../../import/dist/scriptable-pack-staged-snapshot.d.ts","../../import/dist/source-package.d.ts","../../import/dist/source-package-errors.d.ts","../../ddc/dist/build-cache.d.ts","../../ddc/dist/errors.d.ts","../../ddc/dist/entry-store.d.ts","../../ddc/dist/gc.d.ts","../../ddc/dist/key.d.ts","../../ddc/dist/layout.d.ts","../../ddc/dist/lifecycle.d.ts","../../ddc/dist/publication.d.ts","../../ddc/dist/runtime-scope.d.ts","../../ddc/dist/session.d.ts","../../ddc/dist/status.d.ts","../../ddc/dist/index.d.ts","../../import/dist/source-package-publication.d.ts","../../import/dist/source-path.d.ts","../../import/dist/index.d.ts","../src/__tests__/font.unit.test.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/index.d.ts"],"fileIdsList":[[248,294],[119,120,248,294],[248,291,294],[248,293,294],[294],[248,294,299,327],[248,294,295,300,305,313,324,335],[248,294,295,296,305,313],[243,244,245,248,294],[248,294,297,336],[248,294,298,299,306,314],[248,294,299,324,332],[248,294,300,302,305,313],[248,293,294,301],[248,294,302,303],[248,294,304,305],[248,293,294,305],[248,294,305,306,307,324,335],[248,294,305,306,307,320,324,327],[248,294,302,305,308,313,324,335],[248,294,305,306,308,309,313,324,332,335],[248,294,308,310,324,332,335],[246,247,248,249,250,251,252,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341],[248,294,305,311],[248,294,312,335,340],[248,294,302,305,313,324],[248,294,314],[248,294,315],[248,293,294,316],[248,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341],[248,294,318],[248,294,319],[248,294,305,320,321],[248,294,320,322,336,338],[248,294,305,324,325,327],[248,294,326,327],[248,294,324,325],[248,294,327],[248,294,328],[248,291,294,324,329],[248,294,305,330,331],[248,294,330,331],[248,294,299,313,324,332],[248,294,333],[248,294,313,334],[248,294,308,319,335],[248,294,299,336],[248,294,324,337],[248,294,312,338],[248,294,339],[248,289,294],[248,289,294,305,307,316,324,327,335,338,340],[248,294,324,341],[92,98,116,117,118,121,248,294],[128,248,294],[128,129,248,294],[96,98,99,248,294],[96,98,248,294],[96,248,294],[91,96,107,108,248,294],[91,96,107,248,294],[115,248,294],[91,97,248,294],[91,248,294],[93,248,294],[91,92,93,94,95,248,294],[160,161,165,192,193,195,196,197,199,200,248,294],[158,159,248,294],[158,248,294],[160,200,248,294],[160,161,197,198,200,248,294],[200,248,294],[157,200,201,248,294],[160,161,199,200,248,294],[160,161,163,164,199,200,248,294],[160,161,162,199,200,248,294],[160,161,165,192,193,194,195,196,199,200,248,294],[157,160,161,165,197,199,248,294],[165,200,248,294],[167,168,169,170,171,172,173,174,175,176,200,248,294],[190,200,248,294],[166,177,185,186,187,188,189,191,248,294],[170,200,248,294],[178,179,180,181,182,183,184,200,248,294],[134,135,248,294],[134,135,136,137,248,294],[134,136,248,294],[134,248,294],[248,261,265,294,335],[248,261,294,324,335],[248,256,294],[248,258,261,294,332,335],[248,294,313,332],[248,294,342],[248,256,294,342],[248,258,261,294,313,335],[248,253,254,257,260,294,305,324,335],[248,261,268,294],[248,253,259,294],[248,261,282,283,294],[248,257,261,294,327,335,342],[248,282,294,342],[248,255,256,294,342],[248,261,294],[248,255,256,257,258,259,260,261,262,263,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,283,284,285,286,287,288,294],[248,261,276,294],[248,261,268,269,294],[248,259,261,269,270,294],[248,260,294],[248,253,256,261,294],[248,261,265,269,270,294],[248,265,294],[248,259,261,264,294,335],[248,253,258,261,268,294],[248,294,324],[248,256,261,282,294,340,342],[102,248,294],[102,103,104,105,248,294],[104,248,294],[100,123,124,126,248,294],[100,101,113,126,248,294],[91,98,100,101,109,126,248,294],[106,248,294],[91,100,101,109,122,125,126,248,294],[100,101,106,109,126,248,294],[100,123,124,125,126,248,294],[100,106,110,111,112,126,248,294],[91,96,98,100,101,106,109,110,111,112,113,114,116,122,123,124,125,126,127,130,131,132,133,138,248,294],[91,98,100,101,109,110,123,124,125,126,131,248,294],[228,248,294],[227,228,229,230,231,232,233,234,235,236,237,248,294],[82,248,294],[229,233,248,294],[86,139,248,294,306],[82,85,86,139,248,294],[82,84,85,86,90,139,241,248,294,307,314,315,335],[82,83,84,248,294,307,315,335,336,341],[82,85,248,294],[89,248,294],[248,294,340],[82,88,248,294],[82,206,208,210,211,248,294],[206,248,294],[146,206,248,294],[82,209,210,248,294],[82,209,210,211,212,213,214,215,216,220,221,222,223,224,225,226,239,240,248,294],[82,153,248,294],[82,211,248,294],[82,143,146,206,208,210,211,220,221,248,294],[143,220,248,294],[82,143,220,248,294],[82,143,209,219,248,294],[82,226,238,248,294],[82,210,211,248,294],[146,248,294],[82,142,143,146,147,148,149,150,151,152,153,154,155,156,203,204,205,248,294],[82,146,248,294],[87,248,294],[82,142,143,151,152,153,155,202,205,217,218,248,294],[207,248,294],[82,87,248,294],[82,202,248,294],[82,87,143,145,248,294],[82,201,248,294],[82,143,144,248,294],[61,62,64,248,294],[61,62,64,82,248,294],[63,248,294],[62,64,73,248,294],[61,73,74,75,82,248,294],[60,61,62,64,66,67,68,69,72,73,74,75,76,79,80,81,248,294],[65,82,248,294],[66,248,294],[65,66,70,71,248,294],[62,66,70,248,294],[73,74,248,294],[62,76,248,294],[76,77,78,248,294],[62,76,77,248,294]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"89fe170d9a59f81cd9a9d95de3278f108ff91491810b2529cc0ffb502a57b6c0","0b4928041c807c01b33b1fa028236df635c52f7acff5a40f2c2d0d677b53428b","5ad2e5b8b17893d0eb1f11a1b6e8c03b17344be03a6a72a624cd38ab05fe4d5c","6a1e553079e654a1771463e9eeb98ea4f7bb4b6417a5237d4fdf9b546d49647f","7f11be86b9ac5c2cd5127cd9d40ccc7694c58868a3157692a153d452fc171525","6e3488ee1183ea915eb43f08aebc5f75e30be25aef1f678d1965324bdd7506e1","bc2f20caa6ccca429df0bf6a6f21506c4b00f9b171fdc3a4b6ada1775252db31","a318d8734523d9e750681e7b8e685ef817d4049c5612451f4e849da8b2b572a9","8b52dd8be86f44f871db89a6c1f77f7585688d53141ff55b6c5fac3eb67b1241","beae2d03867dde9fdf8da461c7e7e84da71612842422d4b482ab1c2a15fe6b12","2aa457dd6699d3015c3c98457ac72a2dd47349f75a1edddbace0ee86dd7177c9","51342c51a9090c0bc8bae60c5ec1a0f46d6d44db84392f12a8cd46e6d8a9f617","ae777307a0baeb9b5d7ba18e6a029a54eb0b612b1491591dcedb020cc8d36f97","d7ba738e316b7baed10ca49cc156b57b8c973b747bec6612e62a925e9f7f33a4","1d5292578fcf0329a43ef19fe2481d7d1cde75e75610019a7897c70dcfff0b31","459b3765e622008ed590474ae6b61ab55107a7b9529a28d05087a6fef51d7248","d4acac107ca8b949e32947d9b5afa27721584f4ffd7ad7a4008fae892a4ec913","b52569fa5c5793a182d033b2fc7443e27205625dc67782a03d2e2e972a2918f3","097ebdc98e0de1205b1104df5038026ca5830b80faee3707b78e7c28ce6dde55","1ae177260d032e05e62f0432227af19a857b327fa604a9b34baa535f44db130e","e1f11ad703121f97a74001059d054aba25c9c4662af44da05ead0a247fe18742","d9c64d02dfe3a9c74da35fdbcc645cf4e8d4ca0f4162ec312de51474103ac3a7","a16a95d9dce4750a2611fc21abd4fc2c68653f267b059e2e4cb41a4dcefa56ce",{"version":"4493d2894dcb8b801881abfb3db390e08cb7a9b8b903925b22b84d69a9c4e8bc","signature":"59f92f9e108d96769615954681a69616ce326bf886cf5cfe52dfc930af85f694"},{"version":"172e302c9dcadeaafab25681a84840b7f54bffa9b675acea9055386f4c580ff7","impliedFormat":99},{"version":"366f136192954609e5e72a6666dce47721318539ae6366225defdc1d6bf4a19b","signature":"883056085ac39026a2c57501d813b0897721808d7e01bd6703f2255394d9463e"},{"version":"610cdb8890f9117d7573d2140b11928c109968e263caf5d2d6ad791d82990414","signature":"73dd40f5c8d3df67c8539077a0398d010600e8fc7637d569ac4123bb8f32e189"},"0d0155d8b8d79857135f0656994ba844af7a37f9bb3c66e25ae277aeb3ae3f67","3a968d1febd0d96a2b22f74121794a33db334fd0e1cfe9251ce277de4b5714d4",{"version":"08f1cc1921ac57c27afddc2cae580223fde77fd128b22264e4cbc2a08a86371a","signature":"9b45145ad7ac14f5fef5975ac092c76e8bec96aaf86411da0b82e6066430c43a"},{"version":"4a75d8d055500db9cfe9bc1c35e6b4dce821cbcc0033f1f46077b3d10d852df6","signature":"574493101629d5d1b3dda80a0c433ba108787404c83adca164f824bfb3ebe432"},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"455918780669878dc7669c8edea0b07b4a1ae2451151b92bcfc52b6fe6052dd4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1a58950d6e0941a783f7e73befbf0c3f00431953cd5bb7d8df9a7f1c2a7f88b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"07aa99bc820ee254f53596d1db8f283ff2d4c48be213bc6157bfbb2649e4b1a0","970dc049529fb07b6657ab7ff17a603d4590b4b6f34ac53587c75ffeaacba114","b2a49f121155699a81727364697219bee65dff69129cd269f8e4e65a6f90bf0e","5dfccd6e5e676e0ee22ba702dcf9db213ef4f013c6593166a5101c6c64da24c6","e332a1689fdd5f6fbfbdd37d20b60e9ef5b87dc3afc1e789a89043985b032dea","1d1ce0aeefdf237abc168620a71f4b9cd081a2d21ca0398ad98cd715dde71bcb","2fa0b7f452a9efef199d759ce1f9ae0361215d5daf66b8dbea836ed238e8b5ae","f1782a17b8b8f8d7ea83e965a722851b54907d2945014bfffbad07819d806d03","d1bb335437a4d1b7d6a8d3be4ace7fac840b841ef9b0b09acbdd895f41804c56","0babc96339f3a6acbbae25798f086344fe559784780d3c7fc37a41c7d7ada503","db2dfbd2cba08da193f6a40c5e0acb1a1b88100bc6a9d25d7b032a0a4d397743","35480596a68b90153dc90439923b7e6aa980ed0c3c1ddd203fd2067e0a66e6ec","3fe0d716eb5217ccae5a435c9981bc64f9d053b976b0b170a97ff45682d7b94e","988d90349233a6e755ff7ef07995d0fdc791ecd9932b5aae67b5d6628d5e0785","e4184efbf576ede9db54b75a968faa8ba8aec0f282735f0212a1c2b4bd484e88",{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"4304f640f7cb4724ea82441accb7c7607fa7207541182470d625adda99b2900b","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},"05fd6dfdbff1e9350d6b28695d216375cbc1fbc9d071b8452793e97145efdbd2","52ec1aa6ed487b5ea5e7e20b6793ab1da2095e0d208d104705095c303ecc460e","48ad54425b0ee70655824ccc3e4b22d5aaad1d5bb2e227dc08bc94beb7df313b","805f87719ebf1d3f48eaad23c7cea5c3ecbcdd08d34d3825b1eafe3398d43bda","737441207c5cf5736d26e0b7fa9d6e1135046ade8fbcde9182e6e6a8c3be65ae","99afe943599bec620d28be7483daf9d7ad633f5843e5a5967e176e478965d332","88a639f45874bcd7110bdc692787328e4a5ac1083c80d350764d052270c25195","3abdcbb5ee503b89fbb9d2047a58b33c3e736b6eec5a28a9990ec5ebedb868e6","0e1caa1fae3b9cc0b9ce1c543583acb072b326e849cea553e68488cb5aba8b7e","df7c546c3bbda044659f938eb65a8d85f17eae98be9ba5fe6802a2c63c54697c","e314ebdd22846befec7b2be461b52c550e83fedbd76acb5d8a80c7aa40f1d342","5cf2ae99d6f151b6def775e36ec34017cc1277489a4391d6269b7e86d0debf3e","f414900c5e68ac2ad67b78db96d94b93a3a8761fcbf6a4cb5181832be5589301","e13fe0999c95a070072dec5a227e45e143b53945a220224948dc951a2e0cf9d5","d97c61db5f37d822049b893ee8e9966c2f7e75e93805e3776caa7a8347f87322","2dce0ec1be6c4852fa7ea58ef0888ce0c0f10f3f536c54b947bd0d32fb10d098","4ae924bd3c7ca5cd73ad1660372b03cb00126ae2fe77c463b204e2797f28d3c6","00889280212796c55bcba0b6d611947d7aa257ce6759fb85d435eb9cc5a34130","b42140a56b815be68f2aaee097fdcb7721dac965a08599354d694163f02b6a5b","efc37b34dd389289dd0c2766cd76ea8455288344b8f2c0462586e3231f2ee312","5a8bc3494dd78b3a77f699237a8c13c90b2e70c7f3cc9325d6db68ae9a4f1b29","a438d1b05c06ff504009b8b8d22c716793344e2f6d25b92f637a1b6ccee4958a","341c591278ac937655b0416b2c0a5d314ebc2004f33a1328c9f227d8f850d28b","8e13f99b3a9144196a544c5dccea2fee345c6abd264895ffbdf89d03b6154f72","24b665c2a2c2923c0e77cd4c938d8d1541426909c09ea11e5a855fd5967092c5","d24a344ad57ad53ccecd2fa188c4a4ab2243f5f7a9afb73a592040b512f067af","55b3b3d14e0017c5c534cbe93dbf665bb3c8a352b5f2f7c4b6fad0c7675fe1c8","74b6ebcac6e248128ac9b2972c9e50eb0ad48f76e4449dde5d012deedb9d0988","87089bbda669ffac032e83664b35a8c2e53dd87f127ee7a984920c3dd6823721","0d81076132183a97ec510145a0d60492031d7c617f2ff7fe8f35edea827ee0b3","564ca8274db5e72a7cdaafcee44ef593ab06be9237d00c463bd9c209b2d79100","bbd3b7572d17142589b7b86b093c2a7e3645bd3ffd2b08abe93ce32529ec0e1f","6c70d81036246c9137139acbf472b8d05f32abcc21fd203ea4ec837bd02c1723","5666abc02391a07d501c8c72b4110337702941ccdb567bd53cf49ec68a760879","640a7eef1b5d3d9c5b1ffce130344213cedb26f553155d0bb3a4e3743e1d49a3","dd261dd8d827f7e7f9e467e1281d5aee4b55727c1e6cca190f5f663eb28aa2e3","38496f4e66cde8ff0ad1245584947b21b8f2fb086c4d88158d4526ce15c03600","1c472b3555b9551b2d59d461ead635e4f05c2bc10943570c189ca767542bb242","1939d08e16fe972ff572085e25d7a5aea5a1620cc76e18d30f195772d1ea74c8","b3c3b1b015904fa6f1e3ae78347a2cc5a2ba283ffb60a91684a61a064f083e03",{"version":"8626f011d5061667687b9f8cc62598a5a6c9498def581ac7246cdd04cc53de8c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"092c1137e31de289f3cc6a57fdccb3cca298d8a680d1e367d206d3318f1394a1","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[83,85,86,89,90,140,141,242],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[118,1],[121,2],[119,1],[291,3],[292,3],[293,4],[248,5],[294,6],[295,7],[296,8],[243,1],[246,9],[244,1],[245,1],[297,10],[298,11],[299,12],[300,13],[301,14],[302,15],[303,15],[304,16],[305,17],[306,18],[307,19],[249,1],[247,1],[308,20],[309,21],[310,22],[342,23],[311,24],[312,25],[313,26],[314,27],[315,28],[316,29],[317,30],[318,31],[319,32],[320,33],[321,33],[322,34],[323,1],[324,35],[326,36],[325,37],[327,38],[328,39],[329,40],[330,41],[331,42],[332,43],[333,44],[334,45],[335,46],[336,47],[337,48],[338,49],[339,50],[250,1],[251,1],[252,1],[290,51],[340,52],[341,53],[122,54],[129,55],[130,56],[128,1],[91,1],[100,57],[99,58],[123,57],[107,59],[109,60],[108,61],[116,62],[115,1],[98,63],[92,64],[94,65],[96,66],[95,1],[97,64],[93,1],[84,1],[201,67],[158,1],[160,68],[159,69],[164,70],[199,71],[196,72],[198,73],[161,72],[162,74],[166,74],[165,75],[163,76],[197,77],[195,72],[200,78],[193,1],[194,1],[167,79],[172,72],[174,72],[169,72],[170,79],[176,72],[177,80],[168,72],[173,72],[175,72],[171,72],[191,81],[190,72],[192,82],[186,72],[188,72],[187,72],[183,72],[189,83],[184,72],[185,84],[178,72],[179,72],[180,72],[181,72],[182,72],[120,1],[136,85],[138,86],[137,87],[135,88],[134,1],[157,1],[124,1],[117,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[268,89],[278,90],[267,89],[288,91],[259,92],[258,93],[287,94],[281,95],[286,96],[261,97],[275,98],[260,99],[284,100],[256,101],[255,94],[285,102],[257,103],[262,104],[263,1],[266,104],[253,1],[289,105],[279,106],[270,107],[271,108],[273,109],[269,110],[272,111],[282,94],[264,112],[265,113],[274,114],[254,115],[277,106],[276,104],[280,1],[283,116],[103,117],[106,118],[104,117],[102,1],[105,119],[125,120],[114,121],[110,122],[111,59],[132,123],[126,124],[112,125],[131,126],[101,1],[113,127],[139,128],[133,129],[127,1],[227,1],[229,130],[228,1],[230,1],[238,131],[231,1],[232,1],[233,1],[234,132],[235,1],[236,133],[237,130],[140,134],[141,135],[242,136],[85,137],[86,138],[90,139],[83,140],[89,141],[212,142],[213,143],[214,144],[209,132],[211,145],[210,132],[241,146],[215,147],[216,148],[222,149],[223,150],[224,151],[220,152],[221,151],[226,1],[239,153],[225,154],[240,155],[142,132],[206,156],[147,157],[148,132],[149,132],[150,1],[87,132],[151,132],[152,132],[144,132],[88,158],[219,159],[217,1],[153,1],[207,132],[208,160],[154,132],[155,132],[156,161],[218,132],[204,132],[203,162],[146,163],[202,164],[145,165],[143,132],[205,132],[60,1],[61,1],[63,166],[73,1],[68,167],[64,168],[74,169],[80,132],[69,132],[81,170],[82,171],[66,172],[65,173],[70,1],[72,174],[71,175],[62,1],[75,176],[76,1],[77,177],[79,178],[78,179],[67,1]],"latestChangedDtsFile":"./__tests__/font.unit.test.d.ts","version":"6.0.3"}
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../types/dist/animation-target.d.ts","../../types/dist/asset-errors.d.ts","../../types/dist/result.d.ts","../../types/dist/asset-evidence.d.ts","../../types/dist/asset.d.ts","../../types/dist/material/color-space.d.ts","../../types/dist/material/asset.d.ts","../../types/dist/vfx.d.ts","../../types/dist/asset-runtime.d.ts","../../types/dist/handle.d.ts","../../types/dist/material/errors.d.ts","../../types/dist/material/resolve.d.ts","../../types/dist/material/index.d.ts","../../types/dist/asset-producer.d.ts","../../types/dist/catalog.d.ts","../../types/dist/runtime-scope.d.ts","../../types/dist/texture/asset.d.ts","../../types/dist/texture/errors.d.ts","../../types/dist/texture/layout.d.ts","../../types/dist/texture/index.d.ts","../../types/dist/derive-paramschema.d.ts","../../types/dist/import.d.ts","../../types/dist/index.d.ts","../src/node-worker-adapter.ts","../../../node_modules/.pnpm/@zappar+msdf-generator@1.2.4/node_modules/@zappar/msdf-generator/dist/index.d.ts","../src/cli-font.ts","../src/font-importer.ts","../../pack/dist/errors.d.ts","../../pack/dist/guid.d.ts","../src/runtime/font-decoder.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.11/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.11/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/index.d.ts","../src/__tests__/font-importer.test.ts","../src/__tests__/font-local-artifacts.test.ts","../../pack/dist/artifact-path.d.ts","../../pack/dist/scriptable-pack.d.ts","../../pack/dist/evidence/source-inventory.d.ts","../../pack/dist/scriptable-pack-node.d.ts","../../pack/dist/scanner.d.ts","../../pack/dist/catalog-builder.d.ts","../../pack/dist/catalog-delta.d.ts","../../pack/dist/catalog-projection.d.ts","../../pack/dist/config.d.ts","../../pack/dist/evidence/material-cook.d.ts","../../pack/dist/evidence/offline-evidence.d.ts","../../pack/dist/mesh-bin-contract.d.ts","../../pack/dist/package-finalizer.d.ts","../../pack/dist/producer-contract.d.ts","../../pack/dist/resolve-asset-source.d.ts","../../../node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/json-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/jtd-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.d.ts","../../pack/dist/schema-compiled.d.ts","../../pack/dist/runtime.d.ts","../../pack/dist/runtime-publication.d.ts","../../pack/dist/topology.d.ts","../../pack/dist/build.d.ts","../../pack/dist/native-cooker-registry.d.ts","../../pack/dist/native-cooker.d.ts","../../import/dist/import-product.d.ts","../../import/dist/importer-registry.d.ts","../../import/dist/import-runner.d.ts","../../import/dist/build-production.d.ts","../../import/dist/catalog-importer-policy.d.ts","../../import/dist/catalog-inventory.d.ts","../../import/dist/mesh-bin.d.ts","../../import/dist/pack-projection.d.ts","../../pack/dist/material/artifact-writer.d.ts","../../pack/dist/runtime-projection.d.ts","../../pack/dist/index.d.ts","../../import/dist/scriptable-pack.d.ts","../../import/dist/scriptable-source-package.d.ts","../../import/dist/scriptable-pack-host.d.ts","../../import/dist/scriptable-pack-output-producers.d.ts","../../import/dist/scriptable-pack-staged-snapshot.d.ts","../../import/dist/source-package.d.ts","../../import/dist/source-package-errors.d.ts","../../ddc/dist/build-cache.d.ts","../../ddc/dist/errors.d.ts","../../ddc/dist/entry-store.d.ts","../../ddc/dist/gc.d.ts","../../ddc/dist/key.d.ts","../../ddc/dist/layout.d.ts","../../ddc/dist/lifecycle.d.ts","../../ddc/dist/publication.d.ts","../../ddc/dist/runtime-scope.d.ts","../../ddc/dist/session.d.ts","../../ddc/dist/status.d.ts","../../ddc/dist/index.d.ts","../../import/dist/source-package-publication.d.ts","../../import/dist/source-path.d.ts","../../import/dist/index.d.ts","../src/__tests__/font.unit.test.ts","../src/__tests__/node-worker-adapter.test.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/index.d.ts"],"fileIdsList":[[249,295],[119,120,249,295],[249,292,295],[249,294,295],[295],[249,295,300,328],[249,295,296,301,306,314,325,336],[249,295,296,297,306,314],[244,245,246,249,295],[249,295,298,337],[249,295,299,300,307,315],[249,295,300,325,333],[249,295,301,303,306,314],[249,294,295,302],[249,295,303,304],[249,295,305,306],[249,294,295,306],[249,295,306,307,308,325,336],[249,295,306,307,308,321,325,328],[249,295,303,306,309,314,325,336],[249,295,306,307,309,310,314,325,333,336],[249,295,309,311,325,333,336],[247,248,249,250,251,252,253,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342],[249,295,306,312],[249,295,313,336,341],[249,295,303,306,314,325],[249,295,315],[249,295,316],[249,294,295,317],[249,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342],[249,295,319],[249,295,320],[249,295,306,321,322],[249,295,321,323,337,339],[249,295,306,325,326,328],[249,295,327,328],[249,295,325,326],[249,295,328],[249,295,329],[249,292,295,325,330],[249,295,306,331,332],[249,295,331,332],[249,295,300,314,325,333],[249,295,334],[249,295,314,335],[249,295,309,320,336],[249,295,300,337],[249,295,325,338],[249,295,313,339],[249,295,340],[249,290,295],[249,290,295,306,308,317,325,328,336,339,341],[249,295,325,342],[92,98,116,117,118,121,249,295],[128,249,295],[128,129,249,295],[96,98,99,249,295],[96,98,249,295],[96,249,295],[91,96,107,108,249,295],[91,96,107,249,295],[115,249,295],[91,97,249,295],[91,249,295],[93,249,295],[91,92,93,94,95,249,295],[160,161,165,192,193,195,196,197,199,200,249,295],[158,159,249,295],[158,249,295],[160,200,249,295],[160,161,197,198,200,249,295],[200,249,295],[157,200,201,249,295],[160,161,199,200,249,295],[160,161,163,164,199,200,249,295],[160,161,162,199,200,249,295],[160,161,165,192,193,194,195,196,199,200,249,295],[157,160,161,165,197,199,249,295],[165,200,249,295],[167,168,169,170,171,172,173,174,175,176,200,249,295],[190,200,249,295],[166,177,185,186,187,188,189,191,249,295],[170,200,249,295],[178,179,180,181,182,183,184,200,249,295],[134,135,249,295],[134,135,136,137,249,295],[134,136,249,295],[134,249,295],[249,262,266,295,336],[249,262,295,325,336],[249,257,295],[249,259,262,295,333,336],[249,295,314,333],[249,295,343],[249,257,295,343],[249,259,262,295,314,336],[249,254,255,258,261,295,306,325,336],[249,262,269,295],[249,254,260,295],[249,262,283,284,295],[249,258,262,295,328,336,343],[249,283,295,343],[249,256,257,295,343],[249,262,295],[249,256,257,258,259,260,261,262,263,264,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,284,285,286,287,288,289,295],[249,262,277,295],[249,262,269,270,295],[249,260,262,270,271,295],[249,261,295],[249,254,257,262,295],[249,262,266,270,271,295],[249,266,295],[249,260,262,265,295,336],[249,254,259,262,269,295],[249,295,325],[249,257,262,283,295,341,343],[102,249,295],[102,103,104,105,249,295],[104,249,295],[100,123,124,126,249,295],[100,101,113,126,249,295],[91,98,100,101,109,126,249,295],[106,249,295],[91,100,101,109,122,125,126,249,295],[100,101,106,109,126,249,295],[100,123,124,125,126,249,295],[100,106,110,111,112,126,249,295],[91,96,98,100,101,106,109,110,111,112,113,114,116,122,123,124,125,126,127,130,131,132,133,138,249,295],[91,98,100,101,109,110,123,124,125,126,131,249,295],[228,249,295],[227,228,229,230,231,232,233,234,235,236,237,249,295],[82,249,295],[229,233,249,295],[86,139,249,295,307],[82,85,86,139,249,295],[82,84,85,86,90,139,241,249,295,308,315,316,336],[83,139,249,295],[82,83,84,249,295,308,316,336,337,342],[82,85,249,295],[89,249,295],[249,295,341],[82,88,249,295],[82,206,208,210,211,249,295],[206,249,295],[146,206,249,295],[82,209,210,249,295],[82,209,210,211,212,213,214,215,216,220,221,222,223,224,225,226,239,240,249,295],[82,153,249,295],[82,211,249,295],[82,143,146,206,208,210,211,220,221,249,295],[143,220,249,295],[82,143,220,249,295],[82,143,209,219,249,295],[82,226,238,249,295],[82,210,211,249,295],[146,249,295],[82,142,143,146,147,148,149,150,151,152,153,154,155,156,203,204,205,249,295],[82,146,249,295],[87,249,295],[82,142,143,151,152,153,155,202,205,217,218,249,295],[207,249,295],[82,87,249,295],[82,202,249,295],[82,87,143,145,249,295],[82,201,249,295],[82,143,144,249,295],[61,62,64,249,295],[61,62,64,82,249,295],[63,249,295],[62,64,73,249,295],[61,73,74,75,82,249,295],[60,61,62,64,66,67,68,69,72,73,74,75,76,79,80,81,249,295],[65,82,249,295],[66,249,295],[65,66,70,71,249,295],[62,66,70,249,295],[73,74,249,295],[62,76,249,295],[76,77,78,249,295],[62,76,77,249,295]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"89fe170d9a59f81cd9a9d95de3278f108ff91491810b2529cc0ffb502a57b6c0","0b4928041c807c01b33b1fa028236df635c52f7acff5a40f2c2d0d677b53428b","5ad2e5b8b17893d0eb1f11a1b6e8c03b17344be03a6a72a624cd38ab05fe4d5c","6a1e553079e654a1771463e9eeb98ea4f7bb4b6417a5237d4fdf9b546d49647f","7f11be86b9ac5c2cd5127cd9d40ccc7694c58868a3157692a153d452fc171525","6e3488ee1183ea915eb43f08aebc5f75e30be25aef1f678d1965324bdd7506e1","08b2edc86cfd71fe5a832912df79e79040c90c9df60ed2af1dc50f7baef36aeb","a318d8734523d9e750681e7b8e685ef817d4049c5612451f4e849da8b2b572a9","8b52dd8be86f44f871db89a6c1f77f7585688d53141ff55b6c5fac3eb67b1241","beae2d03867dde9fdf8da461c7e7e84da71612842422d4b482ab1c2a15fe6b12","2aa457dd6699d3015c3c98457ac72a2dd47349f75a1edddbace0ee86dd7177c9","51342c51a9090c0bc8bae60c5ec1a0f46d6d44db84392f12a8cd46e6d8a9f617","ae777307a0baeb9b5d7ba18e6a029a54eb0b612b1491591dcedb020cc8d36f97","d7ba738e316b7baed10ca49cc156b57b8c973b747bec6612e62a925e9f7f33a4","1d5292578fcf0329a43ef19fe2481d7d1cde75e75610019a7897c70dcfff0b31","459b3765e622008ed590474ae6b61ab55107a7b9529a28d05087a6fef51d7248","d4acac107ca8b949e32947d9b5afa27721584f4ffd7ad7a4008fae892a4ec913","b52569fa5c5793a182d033b2fc7443e27205625dc67782a03d2e2e972a2918f3","097ebdc98e0de1205b1104df5038026ca5830b80faee3707b78e7c28ce6dde55","1ae177260d032e05e62f0432227af19a857b327fa604a9b34baa535f44db130e","e1f11ad703121f97a74001059d054aba25c9c4662af44da05ead0a247fe18742","d9c64d02dfe3a9c74da35fdbcc645cf4e8d4ca0f4162ec312de51474103ac3a7","ef30959e03d8e4ede695c8b400a9b9004a49ed6448214f087271d4f1e56352ba",{"version":"3b0552530e837757a42efb66ed3a5e84b325f064a5f85eb4fe411daeb5d0b1d2","signature":"85f84a2a45a2aa07c7c47d465f1318769d6f5c646764dfa5f898bf26b40689a1"},{"version":"172e302c9dcadeaafab25681a84840b7f54bffa9b675acea9055386f4c580ff7","impliedFormat":99},{"version":"366f136192954609e5e72a6666dce47721318539ae6366225defdc1d6bf4a19b","signature":"883056085ac39026a2c57501d813b0897721808d7e01bd6703f2255394d9463e"},{"version":"610cdb8890f9117d7573d2140b11928c109968e263caf5d2d6ad791d82990414","signature":"73dd40f5c8d3df67c8539077a0398d010600e8fc7637d569ac4123bb8f32e189"},"0d0155d8b8d79857135f0656994ba844af7a37f9bb3c66e25ae277aeb3ae3f67","3a968d1febd0d96a2b22f74121794a33db334fd0e1cfe9251ce277de4b5714d4",{"version":"08f1cc1921ac57c27afddc2cae580223fde77fd128b22264e4cbc2a08a86371a","signature":"9b45145ad7ac14f5fef5975ac092c76e8bec96aaf86411da0b82e6066430c43a"},{"version":"4a75d8d055500db9cfe9bc1c35e6b4dce821cbcc0033f1f46077b3d10d852df6","signature":"574493101629d5d1b3dda80a0c433ba108787404c83adca164f824bfb3ebe432"},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"455918780669878dc7669c8edea0b07b4a1ae2451151b92bcfc52b6fe6052dd4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1a58950d6e0941a783f7e73befbf0c3f00431953cd5bb7d8df9a7f1c2a7f88b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"07aa99bc820ee254f53596d1db8f283ff2d4c48be213bc6157bfbb2649e4b1a0","970dc049529fb07b6657ab7ff17a603d4590b4b6f34ac53587c75ffeaacba114","b2a49f121155699a81727364697219bee65dff69129cd269f8e4e65a6f90bf0e","5dfccd6e5e676e0ee22ba702dcf9db213ef4f013c6593166a5101c6c64da24c6","e332a1689fdd5f6fbfbdd37d20b60e9ef5b87dc3afc1e789a89043985b032dea","1d1ce0aeefdf237abc168620a71f4b9cd081a2d21ca0398ad98cd715dde71bcb","2fa0b7f452a9efef199d759ce1f9ae0361215d5daf66b8dbea836ed238e8b5ae","f1782a17b8b8f8d7ea83e965a722851b54907d2945014bfffbad07819d806d03","d1bb335437a4d1b7d6a8d3be4ace7fac840b841ef9b0b09acbdd895f41804c56","0babc96339f3a6acbbae25798f086344fe559784780d3c7fc37a41c7d7ada503","db2dfbd2cba08da193f6a40c5e0acb1a1b88100bc6a9d25d7b032a0a4d397743","35480596a68b90153dc90439923b7e6aa980ed0c3c1ddd203fd2067e0a66e6ec","3fe0d716eb5217ccae5a435c9981bc64f9d053b976b0b170a97ff45682d7b94e","988d90349233a6e755ff7ef07995d0fdc791ecd9932b5aae67b5d6628d5e0785","e4184efbf576ede9db54b75a968faa8ba8aec0f282735f0212a1c2b4bd484e88",{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"4304f640f7cb4724ea82441accb7c7607fa7207541182470d625adda99b2900b","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},"05fd6dfdbff1e9350d6b28695d216375cbc1fbc9d071b8452793e97145efdbd2","52ec1aa6ed487b5ea5e7e20b6793ab1da2095e0d208d104705095c303ecc460e","48ad54425b0ee70655824ccc3e4b22d5aaad1d5bb2e227dc08bc94beb7df313b","805f87719ebf1d3f48eaad23c7cea5c3ecbcdd08d34d3825b1eafe3398d43bda","737441207c5cf5736d26e0b7fa9d6e1135046ade8fbcde9182e6e6a8c3be65ae","99afe943599bec620d28be7483daf9d7ad633f5843e5a5967e176e478965d332","88a639f45874bcd7110bdc692787328e4a5ac1083c80d350764d052270c25195","3abdcbb5ee503b89fbb9d2047a58b33c3e736b6eec5a28a9990ec5ebedb868e6","0e1caa1fae3b9cc0b9ce1c543583acb072b326e849cea553e68488cb5aba8b7e","df7c546c3bbda044659f938eb65a8d85f17eae98be9ba5fe6802a2c63c54697c","e314ebdd22846befec7b2be461b52c550e83fedbd76acb5d8a80c7aa40f1d342","5cf2ae99d6f151b6def775e36ec34017cc1277489a4391d6269b7e86d0debf3e","f414900c5e68ac2ad67b78db96d94b93a3a8761fcbf6a4cb5181832be5589301","e13fe0999c95a070072dec5a227e45e143b53945a220224948dc951a2e0cf9d5","d97c61db5f37d822049b893ee8e9966c2f7e75e93805e3776caa7a8347f87322","2dce0ec1be6c4852fa7ea58ef0888ce0c0f10f3f536c54b947bd0d32fb10d098","4ae924bd3c7ca5cd73ad1660372b03cb00126ae2fe77c463b204e2797f28d3c6","00889280212796c55bcba0b6d611947d7aa257ce6759fb85d435eb9cc5a34130","b42140a56b815be68f2aaee097fdcb7721dac965a08599354d694163f02b6a5b","efc37b34dd389289dd0c2766cd76ea8455288344b8f2c0462586e3231f2ee312","5a8bc3494dd78b3a77f699237a8c13c90b2e70c7f3cc9325d6db68ae9a4f1b29","a438d1b05c06ff504009b8b8d22c716793344e2f6d25b92f637a1b6ccee4958a","341c591278ac937655b0416b2c0a5d314ebc2004f33a1328c9f227d8f850d28b","8e13f99b3a9144196a544c5dccea2fee345c6abd264895ffbdf89d03b6154f72","24b665c2a2c2923c0e77cd4c938d8d1541426909c09ea11e5a855fd5967092c5","d24a344ad57ad53ccecd2fa188c4a4ab2243f5f7a9afb73a592040b512f067af","55b3b3d14e0017c5c534cbe93dbf665bb3c8a352b5f2f7c4b6fad0c7675fe1c8","74b6ebcac6e248128ac9b2972c9e50eb0ad48f76e4449dde5d012deedb9d0988","87089bbda669ffac032e83664b35a8c2e53dd87f127ee7a984920c3dd6823721","0d81076132183a97ec510145a0d60492031d7c617f2ff7fe8f35edea827ee0b3","564ca8274db5e72a7cdaafcee44ef593ab06be9237d00c463bd9c209b2d79100","bbd3b7572d17142589b7b86b093c2a7e3645bd3ffd2b08abe93ce32529ec0e1f","6c70d81036246c9137139acbf472b8d05f32abcc21fd203ea4ec837bd02c1723","5666abc02391a07d501c8c72b4110337702941ccdb567bd53cf49ec68a760879","640a7eef1b5d3d9c5b1ffce130344213cedb26f553155d0bb3a4e3743e1d49a3","dd261dd8d827f7e7f9e467e1281d5aee4b55727c1e6cca190f5f663eb28aa2e3","38496f4e66cde8ff0ad1245584947b21b8f2fb086c4d88158d4526ce15c03600","1c472b3555b9551b2d59d461ead635e4f05c2bc10943570c189ca767542bb242","1939d08e16fe972ff572085e25d7a5aea5a1620cc76e18d30f195772d1ea74c8","b3c3b1b015904fa6f1e3ae78347a2cc5a2ba283ffb60a91684a61a064f083e03",{"version":"8626f011d5061667687b9f8cc62598a5a6c9498def581ac7246cdd04cc53de8c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"685d91b1dfa9191fa7917347944b5247dff0b98435fa9bd493223a892cc4529f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"092c1137e31de289f3cc6a57fdccb3cca298d8a680d1e367d206d3318f1394a1","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[83,85,86,89,90,140,141,242,243],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[118,1],[121,2],[119,1],[292,3],[293,3],[294,4],[249,5],[295,6],[296,7],[297,8],[244,1],[247,9],[245,1],[246,1],[298,10],[299,11],[300,12],[301,13],[302,14],[303,15],[304,15],[305,16],[306,17],[307,18],[308,19],[250,1],[248,1],[309,20],[310,21],[311,22],[343,23],[312,24],[313,25],[314,26],[315,27],[316,28],[317,29],[318,30],[319,31],[320,32],[321,33],[322,33],[323,34],[324,1],[325,35],[327,36],[326,37],[328,38],[329,39],[330,40],[331,41],[332,42],[333,43],[334,44],[335,45],[336,46],[337,47],[338,48],[339,49],[340,50],[251,1],[252,1],[253,1],[291,51],[341,52],[342,53],[122,54],[129,55],[130,56],[128,1],[91,1],[100,57],[99,58],[123,57],[107,59],[109,60],[108,61],[116,62],[115,1],[98,63],[92,64],[94,65],[96,66],[95,1],[97,64],[93,1],[84,1],[201,67],[158,1],[160,68],[159,69],[164,70],[199,71],[196,72],[198,73],[161,72],[162,74],[166,74],[165,75],[163,76],[197,77],[195,72],[200,78],[193,1],[194,1],[167,79],[172,72],[174,72],[169,72],[170,79],[176,72],[177,80],[168,72],[173,72],[175,72],[171,72],[191,81],[190,72],[192,82],[186,72],[188,72],[187,72],[183,72],[189,83],[184,72],[185,84],[178,72],[179,72],[180,72],[181,72],[182,72],[120,1],[136,85],[138,86],[137,87],[135,88],[134,1],[157,1],[124,1],[117,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[269,89],[279,90],[268,89],[289,91],[260,92],[259,93],[288,94],[282,95],[287,96],[262,97],[276,98],[261,99],[285,100],[257,101],[256,94],[286,102],[258,103],[263,104],[264,1],[267,104],[254,1],[290,105],[280,106],[271,107],[272,108],[274,109],[270,110],[273,111],[283,94],[265,112],[266,113],[275,114],[255,115],[278,106],[277,104],[281,1],[284,116],[103,117],[106,118],[104,117],[102,1],[105,119],[125,120],[114,121],[110,122],[111,59],[132,123],[126,124],[112,125],[131,126],[101,1],[113,127],[139,128],[133,129],[127,1],[227,1],[229,130],[228,1],[230,1],[238,131],[231,1],[232,1],[233,1],[234,132],[235,1],[236,133],[237,130],[140,134],[141,135],[242,136],[243,137],[85,138],[86,139],[90,140],[83,141],[89,142],[212,143],[213,144],[214,145],[209,132],[211,146],[210,132],[241,147],[215,148],[216,149],[222,150],[223,151],[224,152],[220,153],[221,152],[226,1],[239,154],[225,155],[240,156],[142,132],[206,157],[147,158],[148,132],[149,132],[150,1],[87,132],[151,132],[152,132],[144,132],[88,159],[219,160],[217,1],[153,1],[207,132],[208,161],[154,132],[155,132],[156,162],[218,132],[204,132],[203,163],[146,164],[202,165],[145,166],[143,132],[205,132],[60,1],[61,1],[63,167],[73,1],[68,168],[64,169],[74,170],[80,132],[69,132],[81,171],[82,172],[66,173],[65,174],[70,1],[72,175],[71,176],[62,1],[75,177],[76,1],[77,178],[79,179],[78,180],[67,1]],"latestChangedDtsFile":"./__tests__/node-worker-adapter.test.d.ts","version":"6.0.3"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-worker-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-worker-adapter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/node-worker-adapter.test.ts"],"names":[],"mappings":""}
package/dist/cli-font.mjs CHANGED
@@ -11,10 +11,14 @@ import { Worker } from 'worker_threads';
11
11
  var NodeWorkerAdapter = class {
12
12
  worker;
13
13
  listeners = /* @__PURE__ */ new Map();
14
+ terminationPromise;
14
15
  constructor(url) {
15
16
  this.worker = new Worker(url);
16
17
  }
17
18
  postMessage(message, transferList = []) {
19
+ if (this.terminationPromise !== void 0) {
20
+ return;
21
+ }
18
22
  this.worker.postMessage(message, [...transferList]);
19
23
  }
20
24
  addEventListener(type, listener) {
@@ -31,7 +35,10 @@ var NodeWorkerAdapter = class {
31
35
  this.worker.off("message", handler);
32
36
  }
33
37
  terminate() {
34
- return this.worker.terminate();
38
+ if (this.terminationPromise === void 0) {
39
+ this.terminationPromise = this.worker.terminate();
40
+ }
41
+ return this.terminationPromise;
35
42
  }
36
43
  };
37
44
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node-worker-adapter.ts","../src/cli-font.ts"],"names":[],"mappings":"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","file":"cli-font.mjs","sourcesContent":["import { Worker } from 'node:worker_threads';\n\ninterface MessageEventLike {\n readonly data: unknown;\n readonly origin: string;\n}\n\ntype MessageListener = (event: MessageEventLike) => void;\n\n/** Comlink's browser Worker-shaped endpoint backed by a Node worker thread. */\nexport class NodeWorkerAdapter {\n private readonly worker: Worker;\n private readonly listeners = new Map<MessageListener, (data: unknown) => void>();\n\n public constructor(url: string | URL) {\n this.worker = new Worker(url);\n }\n\n public postMessage(message: unknown, transferList: readonly ArrayBuffer[] = []): void {\n this.worker.postMessage(message, [...transferList]);\n }\n\n public addEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = (data: unknown) => listener({ data, origin: '*' });\n this.listeners.set(listener, handler);\n this.worker.on('message', handler);\n }\n\n public removeEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = this.listeners.get(listener);\n if (handler === undefined) return;\n this.listeners.delete(listener);\n this.worker.off('message', handler);\n }\n\n public terminate(): Promise<number> {\n return this.worker.terminate();\n }\n}\n","#!/usr/bin/env node\n\n// @forgeax/engine-font/src/cli-font — `forgeax-engine-remote-font` plugin\n// bin. Discovered by the base bin via the kubectl 4th-path\n// `forgeax-engine-remote-` prefix scanner.\n//\n// `bake <ttf> <out>` reads a TrueType font and produces an MSDF atlas PNG +\n// a glyph-metrics sidecar JSON (importer: 'font'). The real bake calls\n// @zappar/msdf-generator (feat-20260531-world-space-msdf-text-rendering M5 /\n// w28 -- replaces the M1 placeholder).\n//\n// Error model (FontErrorCode, structured to stderr, exit code 1):\n// - non-TTF magic (not 0x00010000 / 'true' / 'OTTO') -> 'unsupported-font-format'\n// (AC-15 / plan-strategy D-11). The check runs BEFORE the generator so a\n// bad format never reaches the wasm path.\n// - @zappar/msdf-generator throws (wasm / Worker unavailable, internal error)\n// -> 'bake-failed' (charter P3: explicit failure, never a silent exit-0\n// no-atlas). In a plain Node CI without a Web Worker the generator throws\n// 'Worker is not defined' and the bake reports 'bake-failed' (exit 1) --\n// the best-effort real run requires a Worker + wasm host.\n\nimport { Buffer } from 'node:buffer';\nimport { mkdir, readFile, realpath, writeFile } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { deflateSync } from 'node:zlib';\nimport { FontError, type GlyphMetric } from '@forgeax/engine-types';\nimport { NodeWorkerAdapter } from './node-worker-adapter.js';\n\n/**\n * Minimal subset of the @zappar/msdf-generator glyph record consumed by the\n * bake. Mirrors the package's `GlyphInfo` (dist/index.d.ts) -- only the fields\n * the BMFont -> FontAsset mapping needs (toolchain wiki section 4).\n */\nexport interface BakeGlyph {\n readonly unicode: number;\n readonly advance: number;\n readonly xoffset: number;\n readonly yoffset: number;\n readonly atlasPosition: readonly [number, number];\n readonly atlasSize: readonly [number, number];\n}\n\n/**\n * Minimal subset of the @zappar/msdf-generator `MSDFAtlas` consumed by the\n * bake. `texture` carries the RGBA pixel buffer + dimensions (the package's\n * `ImageData`-shaped texture, but reduced to POD so the bake stays\n * environment-agnostic for testing).\n */\nexport interface BakeAtlas {\n readonly texture: { readonly width: number; readonly height: number; readonly data: Uint8Array };\n readonly glyphs: readonly BakeGlyph[];\n readonly metrics: { readonly lineHeight: number; readonly ascender: number };\n readonly textureSize: readonly [number, number];\n readonly fieldRange: number;\n}\n\n/**\n * The bake-time MSDF generator contract. Injected into {@link bakeFont} so\n * unit tests can supply a mock (real path: `@zappar/msdf-generator`'s `MSDF`).\n */\nexport interface MsdfGenerator {\n generateAtlas(ttf: Uint8Array): Promise<BakeAtlas>;\n dispose(): Promise<void>;\n}\n\n/** Default charset baked into the atlas (printable ASCII). */\nconst DEFAULT_CHARSET = (() => {\n let s = '';\n for (let c = 0x20; c <= 0x7e; c++) s += String.fromCharCode(c);\n return s;\n})();\n\nconst DEFAULT_TEXTURE_SIZE = 1024;\nconst DEFAULT_FIELD_RANGE = 4;\nconst DEFAULT_FONT_SIZE = 48;\n\n/**\n * Bake-time sidecar JSON shape (importer: 'font'). Carries the glyph metrics\n * (BMFont -> FontAsset mapping, toolchain wiki section 4) + the common block\n * (distanceRange / atlas dimensions). Parsed by the runtime font load path.\n */\nexport interface BakeSidecar {\n readonly schemaVersion: string;\n readonly kind: 'external-asset-package';\n readonly importer: 'font';\n readonly source: string;\n readonly importSettings: { readonly colorSpace: 'linear'; readonly mipmap: 'none' };\n readonly common: {\n readonly lineHeight: number;\n readonly base: number;\n readonly distanceRange: number;\n readonly pxRange: number;\n readonly atlasWidth: number;\n readonly atlasHeight: number;\n };\n readonly glyphs: Record<number, GlyphMetric>;\n}\n\n/** TTF / OTF magic numbers (first 4 bytes). Per the OpenType spec. */\nfunction isSupportedFontMagic(bytes: Uint8Array): boolean {\n if (bytes.length < 4) return false;\n const b0 = bytes[0] ?? 0;\n const b1 = bytes[1] ?? 0;\n const b2 = bytes[2] ?? 0;\n const b3 = bytes[3] ?? 0;\n // 0x00010000 = TrueType outlines; 'true' (0x74727565) = legacy Apple TTF;\n // 'OTTO' (0x4f54544f) = OpenType with CFF outlines. WOFF/WOFF2 ('wOFF' /\n // 'wOF2') are rejected as non-TTF per AC-15.\n const isTrueType = b0 === 0x00 && b1 === 0x01 && b2 === 0x00 && b3 === 0x00;\n const isTrue = b0 === 0x74 && b1 === 0x72 && b2 === 0x75 && b3 === 0x65;\n const isOtto = b0 === 0x4f && b1 === 0x54 && b2 === 0x54 && b3 === 0x4f;\n return isTrueType || isTrue || isOtto;\n}\n\n/** CRC-32 (PNG / zlib polynomial) over a byte slice. */\nfunction crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc ^= bytes[i] ?? 0;\n for (let k = 0; k < 8; k++) {\n crc = crc & 1 ? (crc >>> 1) ^ 0xedb88320 : crc >>> 1;\n }\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3),\n ]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, data.length);\n out.set(body, 4);\n dv.setUint32(4 + body.length, crc32(body));\n return out;\n}\n\n/**\n * Encode an RGBA pixel buffer into a PNG (zlib deflate, no external deps).\n * The atlas texture from @zappar is RGBA8; this writes a standard 8-bit\n * RGBA PNG so any consumer (engine image importer / browser) can decode it.\n */\nexport function encodePng(width: number, height: number, rgba: Uint8Array): Uint8Array {\n // Filter byte 0 (None) prefixes each scanline.\n const stride = width * 4;\n const raw = new Uint8Array((stride + 1) * height);\n for (let y = 0; y < height; y++) {\n raw[y * (stride + 1)] = 0;\n raw.set(rgba.subarray(y * stride, y * stride + stride), y * (stride + 1) + 1);\n }\n const idat = deflateSync(raw);\n const ihdr = new Uint8Array(13);\n const dv = new DataView(ihdr.buffer);\n dv.setUint32(0, width);\n dv.setUint32(4, height);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 6; // color type RGBA\n ihdr[10] = 0; // compression\n ihdr[11] = 0; // filter\n ihdr[12] = 0; // interlace\n const signature = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n const chunks = [\n signature,\n pngChunk('IHDR', ihdr),\n pngChunk('IDAT', new Uint8Array(idat)),\n pngChunk('IEND', new Uint8Array(0)),\n ];\n const total = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\n/** Map a @zappar atlas into the FontAsset glyph-metrics sidecar shape. */\nexport function atlasToSidecar(atlas: BakeAtlas, sourcePng: string): BakeSidecar {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'font',\n source: sourcePng,\n importSettings: { colorSpace: 'linear', mipmap: 'none' },\n common: {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n },\n glyphs,\n };\n}\n\n/** Result of a successful bake -- the written artefact paths. */\nexport interface BakeResult {\n readonly atlasPath: string;\n readonly sidecarPath: string;\n}\n\n/**\n * Bake an MSDF atlas + glyph-metrics sidecar from a TTF.\n *\n * @param ttfPath path to the TrueType source.\n * @param outDir output directory (created if missing).\n * @param generatorFactory yields the MSDF generator (real: @zappar; tests: mock).\n * @returns `Result`-style: throws a {@link FontError} on every failure mode\n * (unsupported-font-format before the generator runs; bake-failed when the\n * generator throws). The CLI layer maps the thrown FontError to a structured\n * stderr line + exit code 1 -- never a silent exit 0 without artefacts\n * (charter P3).\n */\nexport async function bakeFont(\n ttfPath: string,\n outDir: string,\n generatorFactory: () => Promise<MsdfGenerator>,\n): Promise<BakeResult> {\n const ttf = await readFile(ttfPath);\n const ttfBytes = new Uint8Array(ttf.buffer, ttf.byteOffset, ttf.byteLength);\n if (!isSupportedFontMagic(ttfBytes)) {\n throw new FontError({\n code: 'unsupported-font-format',\n expected: 'ttf',\n hint: 'bake accepts TrueType (.ttf / 0x00010000 / \"true\") or OpenType-TTF (\"OTTO\") sources; WOFF / WOFF2 / other formats are not supported -- convert to TTF first',\n detail: { path: ttfPath },\n });\n }\n\n let atlas: BakeAtlas;\n let generator: MsdfGenerator | undefined;\n try {\n generator = await generatorFactory();\n atlas = await generator.generateAtlas(ttfBytes);\n } catch (e) {\n throw new FontError({\n code: 'bake-failed',\n expected: '@zappar/msdf-generator to produce an MSDF atlas',\n hint: 'the MSDF generator threw -- a Web Worker + wasm host is required (a plain Node process reports \"Worker is not defined\"); run the bake in a Worker-capable environment',\n detail: { cause: e instanceof Error ? e.message : String(e) },\n });\n } finally {\n if (generator !== undefined) {\n await generator.dispose().catch(() => undefined);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n const base = basename(ttfPath, extname(ttfPath));\n const atlasName = `${base}.atlas.png`;\n const atlasPath = join(outDir, atlasName);\n const sidecarPath = join(outDir, `${base}.meta.json`);\n const png = encodePng(atlas.texture.width, atlas.texture.height, atlas.texture.data);\n await writeFile(atlasPath, png);\n const sidecar = atlasToSidecar(atlas, atlasName);\n await writeFile(sidecarPath, `${JSON.stringify(sidecar, null, 2)}\\n`);\n return { atlasPath, sidecarPath };\n}\n\n/**\n * Real @zappar/msdf-generator factory. Dynamically imported so a non-bake\n * subcommand (or a test that injects a mock) never pays the wasm load cost,\n * and so the package builds without the browser globals the generator needs.\n */\n/**\n * Shape of @zappar/msdf-generator's `MSDFAtlas` (dist/index.d.ts) that the\n * real factory adapts into the POD {@link BakeAtlas}. The package's `texture`\n * is an ImageData-shaped `{ width, height, data }`; we read those fields\n * structurally so the font package never needs the DOM `ImageData` type.\n */\ninterface ZapparAtlas {\n texture: { width: number; height: number; data: Uint8ClampedArray | Uint8Array };\n glyphs: ReadonlyArray<{\n unicode: number;\n advance: number;\n xoffset: number;\n yoffset: number;\n atlasPosition: [number, number];\n atlasSize: [number, number];\n }>;\n metrics: { lineHeight: number; ascender: number };\n textureSize: [number, number];\n fieldRange: number;\n}\n\nexport async function realGeneratorFactory(): Promise<MsdfGenerator> {\n const mod = (await import('@zappar/msdf-generator')) as unknown as {\n MSDF: new (config?: {\n workerUrl?: URL;\n wasmUrl?: string;\n }) => {\n initialize(): Promise<void>;\n generateAtlas(opts: {\n font: Uint8Array;\n charset: string;\n textureSize: [number, number];\n fieldRange: number;\n fontSize: number;\n }): Promise<ZapparAtlas>;\n dispose(): Promise<void>;\n };\n };\n\n const wasmModuleUrl = import.meta.resolve('@zappar/msdf-generator/msdfgen_wasm.wasm');\n const wasmBytes = await readFile(new URL(wasmModuleUrl));\n const wasmUrl = `data:application/octet-stream;base64,${Buffer.from(wasmBytes).toString('base64')}`;\n const nodeGlobal = globalThis as unknown as { Worker?: typeof NodeWorkerAdapter };\n const previousWorker = nodeGlobal.Worker;\n nodeGlobal.Worker = NodeWorkerAdapter;\n let msdf: InstanceType<typeof mod.MSDF> | undefined;\n try {\n msdf = new mod.MSDF({\n workerUrl: new URL('./node-msdf-worker.mjs', import.meta.url),\n wasmUrl,\n });\n await msdf.initialize();\n } finally {\n if (previousWorker === undefined) {\n delete nodeGlobal.Worker;\n } else {\n nodeGlobal.Worker = previousWorker;\n }\n }\n if (msdf === undefined) {\n throw new Error('the MSDF generator did not initialize');\n }\n return {\n async generateAtlas(ttf: Uint8Array): Promise<BakeAtlas> {\n const a = await msdf.generateAtlas({\n font: ttf,\n charset: DEFAULT_CHARSET,\n textureSize: [DEFAULT_TEXTURE_SIZE, DEFAULT_TEXTURE_SIZE],\n fieldRange: DEFAULT_FIELD_RANGE,\n fontSize: DEFAULT_FONT_SIZE,\n });\n return {\n texture: {\n width: a.texture.width,\n height: a.texture.height,\n data: new Uint8Array(a.texture.data),\n },\n glyphs: a.glyphs.map((g) => ({\n unicode: g.unicode,\n advance: g.advance,\n xoffset: g.xoffset,\n yoffset: g.yoffset,\n atlasPosition: [g.atlasPosition[0], g.atlasPosition[1]],\n atlasSize: [g.atlasSize[0], g.atlasSize[1]],\n })),\n metrics: { lineHeight: a.metrics.lineHeight, ascender: a.metrics.ascender },\n textureSize: [a.textureSize[0], a.textureSize[1]],\n fieldRange: a.fieldRange,\n };\n },\n async dispose(): Promise<void> {\n await msdf.dispose();\n },\n };\n}\n\nfunction bakeHelpBody(): string {\n return [\n 'forgeax-engine-remote-font bake — bake MSDF font atlas from TTF',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n 'Reads a TrueType font file and produces:',\n ` <out>/<basename>.atlas.png — ${DEFAULT_TEXTURE_SIZE}x${DEFAULT_TEXTURE_SIZE} MSDF atlas`,\n ' <out>/<basename>.meta.json — glyph metrics sidecar (importer: font)',\n '',\n ].join('\\n');\n}\n\nfunction helpBody(): string {\n return [\n 'forgeax-engine-remote-font — MSDF font atlas baking',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n ].join('\\n');\n}\n\nexport async function runCliFont(argv: string[]): Promise<number> {\n const [sub, ...rest] = argv;\n if (sub === undefined || sub === '--help' || sub === '-h') {\n process.stdout.write(`${helpBody()}\\n`);\n return 0;\n }\n if (sub !== 'bake') {\n process.stderr.write(`unknown subcommand: ${sub}\\n`);\n return 1;\n }\n return runBake(rest);\n}\n\nasync function runBake(rest: string[]): Promise<number> {\n if (rest[0] === '--help' || rest[0] === '-h') {\n process.stdout.write(`${bakeHelpBody()}\\n`);\n return 0;\n }\n let positionals: string[];\n try {\n const parsed = parseArgs({ args: rest, allowPositionals: true, strict: true });\n positionals = [...parsed.positionals];\n } catch {\n process.stderr.write('error parsing CLI args\\n');\n return 1;\n }\n const ttfPath = positionals[0];\n const outDir = positionals[1];\n if (ttfPath === undefined || outDir === undefined) {\n process.stderr.write('usage: forgeax-engine-remote-font bake <ttf> <out>\\n');\n return 1;\n }\n try {\n const result = await bakeFont(ttfPath, outDir, realGeneratorFactory);\n process.stdout.write(`baked ${result.atlasPath} + ${result.sidecarPath}\\n`);\n return 0;\n } catch (e) {\n if (e instanceof FontError) {\n process.stderr.write(\n `${JSON.stringify({ code: e.code, expected: e.expected, hint: e.hint, detail: e.detail })}\\n`,\n );\n return 1;\n }\n process.stderr.write(`bake failed: ${e instanceof Error ? e.message : String(e)}\\n`);\n return 1;\n }\n}\n\nconst isBinEntry = await (async (): Promise<boolean> => {\n const argv1 = process.argv[1];\n if (typeof argv1 !== 'string') return false;\n const argv1Real = await realpath(argv1).catch(() => argv1);\n const selfReal = await realpath(fileURLToPath(import.meta.url)).catch(() =>\n fileURLToPath(import.meta.url),\n );\n return argv1Real === selfReal;\n})();\n\nif (isBinEntry) {\n const exitCode = await runCliFont(process.argv.slice(2));\n process.exit(exitCode);\n}\n"]}
1
+ {"version":3,"sources":["../src/node-worker-adapter.ts","../src/cli-font.ts"],"names":[],"mappings":"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","file":"cli-font.mjs","sourcesContent":["import { Worker } from 'node:worker_threads';\n\ninterface MessageEventLike {\n readonly data: unknown;\n readonly origin: string;\n}\n\ntype MessageListener = (event: MessageEventLike) => void;\n\n/** Comlink's browser Worker-shaped endpoint backed by a Node worker thread. */\nexport class NodeWorkerAdapter {\n private readonly worker: Worker;\n private readonly listeners = new Map<MessageListener, (data: unknown) => void>();\n private terminationPromise?: Promise<number>;\n\n public constructor(url: string | URL) {\n this.worker = new Worker(url);\n }\n\n public postMessage(message: unknown, transferList: readonly ArrayBuffer[] = []): void {\n if (this.terminationPromise !== undefined) {\n return;\n }\n this.worker.postMessage(message, [...transferList]);\n }\n\n public addEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = (data: unknown) => listener({ data, origin: '*' });\n this.listeners.set(listener, handler);\n this.worker.on('message', handler);\n }\n\n public removeEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = this.listeners.get(listener);\n if (handler === undefined) return;\n this.listeners.delete(listener);\n this.worker.off('message', handler);\n }\n\n public terminate(): Promise<number> {\n if (this.terminationPromise === undefined) {\n this.terminationPromise = this.worker.terminate();\n }\n return this.terminationPromise;\n }\n}\n","#!/usr/bin/env node\n\n// @forgeax/engine-font/src/cli-font — `forgeax-engine-remote-font` plugin\n// bin. Discovered by the base bin via the kubectl 4th-path\n// `forgeax-engine-remote-` prefix scanner.\n//\n// `bake <ttf> <out>` reads a TrueType font and produces an MSDF atlas PNG +\n// a glyph-metrics sidecar JSON (importer: 'font'). The real bake calls\n// @zappar/msdf-generator (feat-20260531-world-space-msdf-text-rendering M5 /\n// w28 -- replaces the M1 placeholder).\n//\n// Error model (FontErrorCode, structured to stderr, exit code 1):\n// - non-TTF magic (not 0x00010000 / 'true' / 'OTTO') -> 'unsupported-font-format'\n// (AC-15 / plan-strategy D-11). The check runs BEFORE the generator so a\n// bad format never reaches the wasm path.\n// - @zappar/msdf-generator throws (wasm / Worker unavailable, internal error)\n// -> 'bake-failed' (charter P3: explicit failure, never a silent exit-0\n// no-atlas). In a plain Node CI without a Web Worker the generator throws\n// 'Worker is not defined' and the bake reports 'bake-failed' (exit 1) --\n// the best-effort real run requires a Worker + wasm host.\n\nimport { Buffer } from 'node:buffer';\nimport { mkdir, readFile, realpath, writeFile } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { deflateSync } from 'node:zlib';\nimport { FontError, type GlyphMetric } from '@forgeax/engine-types';\nimport { NodeWorkerAdapter } from './node-worker-adapter.js';\n\n/**\n * Minimal subset of the @zappar/msdf-generator glyph record consumed by the\n * bake. Mirrors the package's `GlyphInfo` (dist/index.d.ts) -- only the fields\n * the BMFont -> FontAsset mapping needs (toolchain wiki section 4).\n */\nexport interface BakeGlyph {\n readonly unicode: number;\n readonly advance: number;\n readonly xoffset: number;\n readonly yoffset: number;\n readonly atlasPosition: readonly [number, number];\n readonly atlasSize: readonly [number, number];\n}\n\n/**\n * Minimal subset of the @zappar/msdf-generator `MSDFAtlas` consumed by the\n * bake. `texture` carries the RGBA pixel buffer + dimensions (the package's\n * `ImageData`-shaped texture, but reduced to POD so the bake stays\n * environment-agnostic for testing).\n */\nexport interface BakeAtlas {\n readonly texture: { readonly width: number; readonly height: number; readonly data: Uint8Array };\n readonly glyphs: readonly BakeGlyph[];\n readonly metrics: { readonly lineHeight: number; readonly ascender: number };\n readonly textureSize: readonly [number, number];\n readonly fieldRange: number;\n}\n\n/**\n * The bake-time MSDF generator contract. Injected into {@link bakeFont} so\n * unit tests can supply a mock (real path: `@zappar/msdf-generator`'s `MSDF`).\n */\nexport interface MsdfGenerator {\n generateAtlas(ttf: Uint8Array): Promise<BakeAtlas>;\n dispose(): Promise<void>;\n}\n\n/** Default charset baked into the atlas (printable ASCII). */\nconst DEFAULT_CHARSET = (() => {\n let s = '';\n for (let c = 0x20; c <= 0x7e; c++) s += String.fromCharCode(c);\n return s;\n})();\n\nconst DEFAULT_TEXTURE_SIZE = 1024;\nconst DEFAULT_FIELD_RANGE = 4;\nconst DEFAULT_FONT_SIZE = 48;\n\n/**\n * Bake-time sidecar JSON shape (importer: 'font'). Carries the glyph metrics\n * (BMFont -> FontAsset mapping, toolchain wiki section 4) + the common block\n * (distanceRange / atlas dimensions). Parsed by the runtime font load path.\n */\nexport interface BakeSidecar {\n readonly schemaVersion: string;\n readonly kind: 'external-asset-package';\n readonly importer: 'font';\n readonly source: string;\n readonly importSettings: { readonly colorSpace: 'linear'; readonly mipmap: 'none' };\n readonly common: {\n readonly lineHeight: number;\n readonly base: number;\n readonly distanceRange: number;\n readonly pxRange: number;\n readonly atlasWidth: number;\n readonly atlasHeight: number;\n };\n readonly glyphs: Record<number, GlyphMetric>;\n}\n\n/** TTF / OTF magic numbers (first 4 bytes). Per the OpenType spec. */\nfunction isSupportedFontMagic(bytes: Uint8Array): boolean {\n if (bytes.length < 4) return false;\n const b0 = bytes[0] ?? 0;\n const b1 = bytes[1] ?? 0;\n const b2 = bytes[2] ?? 0;\n const b3 = bytes[3] ?? 0;\n // 0x00010000 = TrueType outlines; 'true' (0x74727565) = legacy Apple TTF;\n // 'OTTO' (0x4f54544f) = OpenType with CFF outlines. WOFF/WOFF2 ('wOFF' /\n // 'wOF2') are rejected as non-TTF per AC-15.\n const isTrueType = b0 === 0x00 && b1 === 0x01 && b2 === 0x00 && b3 === 0x00;\n const isTrue = b0 === 0x74 && b1 === 0x72 && b2 === 0x75 && b3 === 0x65;\n const isOtto = b0 === 0x4f && b1 === 0x54 && b2 === 0x54 && b3 === 0x4f;\n return isTrueType || isTrue || isOtto;\n}\n\n/** CRC-32 (PNG / zlib polynomial) over a byte slice. */\nfunction crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc ^= bytes[i] ?? 0;\n for (let k = 0; k < 8; k++) {\n crc = crc & 1 ? (crc >>> 1) ^ 0xedb88320 : crc >>> 1;\n }\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3),\n ]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, data.length);\n out.set(body, 4);\n dv.setUint32(4 + body.length, crc32(body));\n return out;\n}\n\n/**\n * Encode an RGBA pixel buffer into a PNG (zlib deflate, no external deps).\n * The atlas texture from @zappar is RGBA8; this writes a standard 8-bit\n * RGBA PNG so any consumer (engine image importer / browser) can decode it.\n */\nexport function encodePng(width: number, height: number, rgba: Uint8Array): Uint8Array {\n // Filter byte 0 (None) prefixes each scanline.\n const stride = width * 4;\n const raw = new Uint8Array((stride + 1) * height);\n for (let y = 0; y < height; y++) {\n raw[y * (stride + 1)] = 0;\n raw.set(rgba.subarray(y * stride, y * stride + stride), y * (stride + 1) + 1);\n }\n const idat = deflateSync(raw);\n const ihdr = new Uint8Array(13);\n const dv = new DataView(ihdr.buffer);\n dv.setUint32(0, width);\n dv.setUint32(4, height);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 6; // color type RGBA\n ihdr[10] = 0; // compression\n ihdr[11] = 0; // filter\n ihdr[12] = 0; // interlace\n const signature = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n const chunks = [\n signature,\n pngChunk('IHDR', ihdr),\n pngChunk('IDAT', new Uint8Array(idat)),\n pngChunk('IEND', new Uint8Array(0)),\n ];\n const total = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\n/** Map a @zappar atlas into the FontAsset glyph-metrics sidecar shape. */\nexport function atlasToSidecar(atlas: BakeAtlas, sourcePng: string): BakeSidecar {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'font',\n source: sourcePng,\n importSettings: { colorSpace: 'linear', mipmap: 'none' },\n common: {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n },\n glyphs,\n };\n}\n\n/** Result of a successful bake -- the written artefact paths. */\nexport interface BakeResult {\n readonly atlasPath: string;\n readonly sidecarPath: string;\n}\n\n/**\n * Bake an MSDF atlas + glyph-metrics sidecar from a TTF.\n *\n * @param ttfPath path to the TrueType source.\n * @param outDir output directory (created if missing).\n * @param generatorFactory yields the MSDF generator (real: @zappar; tests: mock).\n * @returns `Result`-style: throws a {@link FontError} on every failure mode\n * (unsupported-font-format before the generator runs; bake-failed when the\n * generator throws). The CLI layer maps the thrown FontError to a structured\n * stderr line + exit code 1 -- never a silent exit 0 without artefacts\n * (charter P3).\n */\nexport async function bakeFont(\n ttfPath: string,\n outDir: string,\n generatorFactory: () => Promise<MsdfGenerator>,\n): Promise<BakeResult> {\n const ttf = await readFile(ttfPath);\n const ttfBytes = new Uint8Array(ttf.buffer, ttf.byteOffset, ttf.byteLength);\n if (!isSupportedFontMagic(ttfBytes)) {\n throw new FontError({\n code: 'unsupported-font-format',\n expected: 'ttf',\n hint: 'bake accepts TrueType (.ttf / 0x00010000 / \"true\") or OpenType-TTF (\"OTTO\") sources; WOFF / WOFF2 / other formats are not supported -- convert to TTF first',\n detail: { path: ttfPath },\n });\n }\n\n let atlas: BakeAtlas;\n let generator: MsdfGenerator | undefined;\n try {\n generator = await generatorFactory();\n atlas = await generator.generateAtlas(ttfBytes);\n } catch (e) {\n throw new FontError({\n code: 'bake-failed',\n expected: '@zappar/msdf-generator to produce an MSDF atlas',\n hint: 'the MSDF generator threw -- a Web Worker + wasm host is required (a plain Node process reports \"Worker is not defined\"); run the bake in a Worker-capable environment',\n detail: { cause: e instanceof Error ? e.message : String(e) },\n });\n } finally {\n if (generator !== undefined) {\n await generator.dispose().catch(() => undefined);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n const base = basename(ttfPath, extname(ttfPath));\n const atlasName = `${base}.atlas.png`;\n const atlasPath = join(outDir, atlasName);\n const sidecarPath = join(outDir, `${base}.meta.json`);\n const png = encodePng(atlas.texture.width, atlas.texture.height, atlas.texture.data);\n await writeFile(atlasPath, png);\n const sidecar = atlasToSidecar(atlas, atlasName);\n await writeFile(sidecarPath, `${JSON.stringify(sidecar, null, 2)}\\n`);\n return { atlasPath, sidecarPath };\n}\n\n/**\n * Real @zappar/msdf-generator factory. Dynamically imported so a non-bake\n * subcommand (or a test that injects a mock) never pays the wasm load cost,\n * and so the package builds without the browser globals the generator needs.\n */\n/**\n * Shape of @zappar/msdf-generator's `MSDFAtlas` (dist/index.d.ts) that the\n * real factory adapts into the POD {@link BakeAtlas}. The package's `texture`\n * is an ImageData-shaped `{ width, height, data }`; we read those fields\n * structurally so the font package never needs the DOM `ImageData` type.\n */\ninterface ZapparAtlas {\n texture: { width: number; height: number; data: Uint8ClampedArray | Uint8Array };\n glyphs: ReadonlyArray<{\n unicode: number;\n advance: number;\n xoffset: number;\n yoffset: number;\n atlasPosition: [number, number];\n atlasSize: [number, number];\n }>;\n metrics: { lineHeight: number; ascender: number };\n textureSize: [number, number];\n fieldRange: number;\n}\n\nexport async function realGeneratorFactory(): Promise<MsdfGenerator> {\n const mod = (await import('@zappar/msdf-generator')) as unknown as {\n MSDF: new (config?: {\n workerUrl?: URL;\n wasmUrl?: string;\n }) => {\n initialize(): Promise<void>;\n generateAtlas(opts: {\n font: Uint8Array;\n charset: string;\n textureSize: [number, number];\n fieldRange: number;\n fontSize: number;\n }): Promise<ZapparAtlas>;\n dispose(): Promise<void>;\n };\n };\n\n const wasmModuleUrl = import.meta.resolve('@zappar/msdf-generator/msdfgen_wasm.wasm');\n const wasmBytes = await readFile(new URL(wasmModuleUrl));\n const wasmUrl = `data:application/octet-stream;base64,${Buffer.from(wasmBytes).toString('base64')}`;\n const nodeGlobal = globalThis as unknown as { Worker?: typeof NodeWorkerAdapter };\n const previousWorker = nodeGlobal.Worker;\n nodeGlobal.Worker = NodeWorkerAdapter;\n let msdf: InstanceType<typeof mod.MSDF> | undefined;\n try {\n msdf = new mod.MSDF({\n workerUrl: new URL('./node-msdf-worker.mjs', import.meta.url),\n wasmUrl,\n });\n await msdf.initialize();\n } finally {\n if (previousWorker === undefined) {\n delete nodeGlobal.Worker;\n } else {\n nodeGlobal.Worker = previousWorker;\n }\n }\n if (msdf === undefined) {\n throw new Error('the MSDF generator did not initialize');\n }\n return {\n async generateAtlas(ttf: Uint8Array): Promise<BakeAtlas> {\n const a = await msdf.generateAtlas({\n font: ttf,\n charset: DEFAULT_CHARSET,\n textureSize: [DEFAULT_TEXTURE_SIZE, DEFAULT_TEXTURE_SIZE],\n fieldRange: DEFAULT_FIELD_RANGE,\n fontSize: DEFAULT_FONT_SIZE,\n });\n return {\n texture: {\n width: a.texture.width,\n height: a.texture.height,\n data: new Uint8Array(a.texture.data),\n },\n glyphs: a.glyphs.map((g) => ({\n unicode: g.unicode,\n advance: g.advance,\n xoffset: g.xoffset,\n yoffset: g.yoffset,\n atlasPosition: [g.atlasPosition[0], g.atlasPosition[1]],\n atlasSize: [g.atlasSize[0], g.atlasSize[1]],\n })),\n metrics: { lineHeight: a.metrics.lineHeight, ascender: a.metrics.ascender },\n textureSize: [a.textureSize[0], a.textureSize[1]],\n fieldRange: a.fieldRange,\n };\n },\n async dispose(): Promise<void> {\n await msdf.dispose();\n },\n };\n}\n\nfunction bakeHelpBody(): string {\n return [\n 'forgeax-engine-remote-font bake — bake MSDF font atlas from TTF',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n 'Reads a TrueType font file and produces:',\n ` <out>/<basename>.atlas.png — ${DEFAULT_TEXTURE_SIZE}x${DEFAULT_TEXTURE_SIZE} MSDF atlas`,\n ' <out>/<basename>.meta.json — glyph metrics sidecar (importer: font)',\n '',\n ].join('\\n');\n}\n\nfunction helpBody(): string {\n return [\n 'forgeax-engine-remote-font — MSDF font atlas baking',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n ].join('\\n');\n}\n\nexport async function runCliFont(argv: string[]): Promise<number> {\n const [sub, ...rest] = argv;\n if (sub === undefined || sub === '--help' || sub === '-h') {\n process.stdout.write(`${helpBody()}\\n`);\n return 0;\n }\n if (sub !== 'bake') {\n process.stderr.write(`unknown subcommand: ${sub}\\n`);\n return 1;\n }\n return runBake(rest);\n}\n\nasync function runBake(rest: string[]): Promise<number> {\n if (rest[0] === '--help' || rest[0] === '-h') {\n process.stdout.write(`${bakeHelpBody()}\\n`);\n return 0;\n }\n let positionals: string[];\n try {\n const parsed = parseArgs({ args: rest, allowPositionals: true, strict: true });\n positionals = [...parsed.positionals];\n } catch {\n process.stderr.write('error parsing CLI args\\n');\n return 1;\n }\n const ttfPath = positionals[0];\n const outDir = positionals[1];\n if (ttfPath === undefined || outDir === undefined) {\n process.stderr.write('usage: forgeax-engine-remote-font bake <ttf> <out>\\n');\n return 1;\n }\n try {\n const result = await bakeFont(ttfPath, outDir, realGeneratorFactory);\n process.stdout.write(`baked ${result.atlasPath} + ${result.sidecarPath}\\n`);\n return 0;\n } catch (e) {\n if (e instanceof FontError) {\n process.stderr.write(\n `${JSON.stringify({ code: e.code, expected: e.expected, hint: e.hint, detail: e.detail })}\\n`,\n );\n return 1;\n }\n process.stderr.write(`bake failed: ${e instanceof Error ? e.message : String(e)}\\n`);\n return 1;\n }\n}\n\nconst isBinEntry = await (async (): Promise<boolean> => {\n const argv1 = process.argv[1];\n if (typeof argv1 !== 'string') return false;\n const argv1Real = await realpath(argv1).catch(() => argv1);\n const selfReal = await realpath(fileURLToPath(import.meta.url)).catch(() =>\n fileURLToPath(import.meta.url),\n );\n return argv1Real === selfReal;\n})();\n\nif (isBinEntry) {\n const exitCode = await runCliFont(process.argv.slice(2));\n process.exit(exitCode);\n}\n"]}
@@ -11,10 +11,14 @@ import { Worker } from 'worker_threads';
11
11
  var NodeWorkerAdapter = class {
12
12
  worker;
13
13
  listeners = /* @__PURE__ */ new Map();
14
+ terminationPromise;
14
15
  constructor(url) {
15
16
  this.worker = new Worker(url);
16
17
  }
17
18
  postMessage(message, transferList = []) {
19
+ if (this.terminationPromise !== void 0) {
20
+ return;
21
+ }
18
22
  this.worker.postMessage(message, [...transferList]);
19
23
  }
20
24
  addEventListener(type, listener) {
@@ -31,7 +35,10 @@ var NodeWorkerAdapter = class {
31
35
  this.worker.off("message", handler);
32
36
  }
33
37
  terminate() {
34
- return this.worker.terminate();
38
+ if (this.terminationPromise === void 0) {
39
+ this.terminationPromise = this.worker.terminate();
40
+ }
41
+ return this.terminationPromise;
35
42
  }
36
43
  };
37
44
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node-worker-adapter.ts","../src/cli-font.ts","../src/font-importer.ts"],"names":[],"mappings":"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","file":"font-importer.mjs","sourcesContent":["import { Worker } from 'node:worker_threads';\n\ninterface MessageEventLike {\n readonly data: unknown;\n readonly origin: string;\n}\n\ntype MessageListener = (event: MessageEventLike) => void;\n\n/** Comlink's browser Worker-shaped endpoint backed by a Node worker thread. */\nexport class NodeWorkerAdapter {\n private readonly worker: Worker;\n private readonly listeners = new Map<MessageListener, (data: unknown) => void>();\n\n public constructor(url: string | URL) {\n this.worker = new Worker(url);\n }\n\n public postMessage(message: unknown, transferList: readonly ArrayBuffer[] = []): void {\n this.worker.postMessage(message, [...transferList]);\n }\n\n public addEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = (data: unknown) => listener({ data, origin: '*' });\n this.listeners.set(listener, handler);\n this.worker.on('message', handler);\n }\n\n public removeEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = this.listeners.get(listener);\n if (handler === undefined) return;\n this.listeners.delete(listener);\n this.worker.off('message', handler);\n }\n\n public terminate(): Promise<number> {\n return this.worker.terminate();\n }\n}\n","#!/usr/bin/env node\n\n// @forgeax/engine-font/src/cli-font — `forgeax-engine-remote-font` plugin\n// bin. Discovered by the base bin via the kubectl 4th-path\n// `forgeax-engine-remote-` prefix scanner.\n//\n// `bake <ttf> <out>` reads a TrueType font and produces an MSDF atlas PNG +\n// a glyph-metrics sidecar JSON (importer: 'font'). The real bake calls\n// @zappar/msdf-generator (feat-20260531-world-space-msdf-text-rendering M5 /\n// w28 -- replaces the M1 placeholder).\n//\n// Error model (FontErrorCode, structured to stderr, exit code 1):\n// - non-TTF magic (not 0x00010000 / 'true' / 'OTTO') -> 'unsupported-font-format'\n// (AC-15 / plan-strategy D-11). The check runs BEFORE the generator so a\n// bad format never reaches the wasm path.\n// - @zappar/msdf-generator throws (wasm / Worker unavailable, internal error)\n// -> 'bake-failed' (charter P3: explicit failure, never a silent exit-0\n// no-atlas). In a plain Node CI without a Web Worker the generator throws\n// 'Worker is not defined' and the bake reports 'bake-failed' (exit 1) --\n// the best-effort real run requires a Worker + wasm host.\n\nimport { Buffer } from 'node:buffer';\nimport { mkdir, readFile, realpath, writeFile } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { deflateSync } from 'node:zlib';\nimport { FontError, type GlyphMetric } from '@forgeax/engine-types';\nimport { NodeWorkerAdapter } from './node-worker-adapter.js';\n\n/**\n * Minimal subset of the @zappar/msdf-generator glyph record consumed by the\n * bake. Mirrors the package's `GlyphInfo` (dist/index.d.ts) -- only the fields\n * the BMFont -> FontAsset mapping needs (toolchain wiki section 4).\n */\nexport interface BakeGlyph {\n readonly unicode: number;\n readonly advance: number;\n readonly xoffset: number;\n readonly yoffset: number;\n readonly atlasPosition: readonly [number, number];\n readonly atlasSize: readonly [number, number];\n}\n\n/**\n * Minimal subset of the @zappar/msdf-generator `MSDFAtlas` consumed by the\n * bake. `texture` carries the RGBA pixel buffer + dimensions (the package's\n * `ImageData`-shaped texture, but reduced to POD so the bake stays\n * environment-agnostic for testing).\n */\nexport interface BakeAtlas {\n readonly texture: { readonly width: number; readonly height: number; readonly data: Uint8Array };\n readonly glyphs: readonly BakeGlyph[];\n readonly metrics: { readonly lineHeight: number; readonly ascender: number };\n readonly textureSize: readonly [number, number];\n readonly fieldRange: number;\n}\n\n/**\n * The bake-time MSDF generator contract. Injected into {@link bakeFont} so\n * unit tests can supply a mock (real path: `@zappar/msdf-generator`'s `MSDF`).\n */\nexport interface MsdfGenerator {\n generateAtlas(ttf: Uint8Array): Promise<BakeAtlas>;\n dispose(): Promise<void>;\n}\n\n/** Default charset baked into the atlas (printable ASCII). */\nconst DEFAULT_CHARSET = (() => {\n let s = '';\n for (let c = 0x20; c <= 0x7e; c++) s += String.fromCharCode(c);\n return s;\n})();\n\nconst DEFAULT_TEXTURE_SIZE = 1024;\nconst DEFAULT_FIELD_RANGE = 4;\nconst DEFAULT_FONT_SIZE = 48;\n\n/**\n * Bake-time sidecar JSON shape (importer: 'font'). Carries the glyph metrics\n * (BMFont -> FontAsset mapping, toolchain wiki section 4) + the common block\n * (distanceRange / atlas dimensions). Parsed by the runtime font load path.\n */\nexport interface BakeSidecar {\n readonly schemaVersion: string;\n readonly kind: 'external-asset-package';\n readonly importer: 'font';\n readonly source: string;\n readonly importSettings: { readonly colorSpace: 'linear'; readonly mipmap: 'none' };\n readonly common: {\n readonly lineHeight: number;\n readonly base: number;\n readonly distanceRange: number;\n readonly pxRange: number;\n readonly atlasWidth: number;\n readonly atlasHeight: number;\n };\n readonly glyphs: Record<number, GlyphMetric>;\n}\n\n/** TTF / OTF magic numbers (first 4 bytes). Per the OpenType spec. */\nfunction isSupportedFontMagic(bytes: Uint8Array): boolean {\n if (bytes.length < 4) return false;\n const b0 = bytes[0] ?? 0;\n const b1 = bytes[1] ?? 0;\n const b2 = bytes[2] ?? 0;\n const b3 = bytes[3] ?? 0;\n // 0x00010000 = TrueType outlines; 'true' (0x74727565) = legacy Apple TTF;\n // 'OTTO' (0x4f54544f) = OpenType with CFF outlines. WOFF/WOFF2 ('wOFF' /\n // 'wOF2') are rejected as non-TTF per AC-15.\n const isTrueType = b0 === 0x00 && b1 === 0x01 && b2 === 0x00 && b3 === 0x00;\n const isTrue = b0 === 0x74 && b1 === 0x72 && b2 === 0x75 && b3 === 0x65;\n const isOtto = b0 === 0x4f && b1 === 0x54 && b2 === 0x54 && b3 === 0x4f;\n return isTrueType || isTrue || isOtto;\n}\n\n/** CRC-32 (PNG / zlib polynomial) over a byte slice. */\nfunction crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc ^= bytes[i] ?? 0;\n for (let k = 0; k < 8; k++) {\n crc = crc & 1 ? (crc >>> 1) ^ 0xedb88320 : crc >>> 1;\n }\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3),\n ]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, data.length);\n out.set(body, 4);\n dv.setUint32(4 + body.length, crc32(body));\n return out;\n}\n\n/**\n * Encode an RGBA pixel buffer into a PNG (zlib deflate, no external deps).\n * The atlas texture from @zappar is RGBA8; this writes a standard 8-bit\n * RGBA PNG so any consumer (engine image importer / browser) can decode it.\n */\nexport function encodePng(width: number, height: number, rgba: Uint8Array): Uint8Array {\n // Filter byte 0 (None) prefixes each scanline.\n const stride = width * 4;\n const raw = new Uint8Array((stride + 1) * height);\n for (let y = 0; y < height; y++) {\n raw[y * (stride + 1)] = 0;\n raw.set(rgba.subarray(y * stride, y * stride + stride), y * (stride + 1) + 1);\n }\n const idat = deflateSync(raw);\n const ihdr = new Uint8Array(13);\n const dv = new DataView(ihdr.buffer);\n dv.setUint32(0, width);\n dv.setUint32(4, height);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 6; // color type RGBA\n ihdr[10] = 0; // compression\n ihdr[11] = 0; // filter\n ihdr[12] = 0; // interlace\n const signature = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n const chunks = [\n signature,\n pngChunk('IHDR', ihdr),\n pngChunk('IDAT', new Uint8Array(idat)),\n pngChunk('IEND', new Uint8Array(0)),\n ];\n const total = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\n/** Map a @zappar atlas into the FontAsset glyph-metrics sidecar shape. */\nexport function atlasToSidecar(atlas: BakeAtlas, sourcePng: string): BakeSidecar {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'font',\n source: sourcePng,\n importSettings: { colorSpace: 'linear', mipmap: 'none' },\n common: {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n },\n glyphs,\n };\n}\n\n/** Result of a successful bake -- the written artefact paths. */\nexport interface BakeResult {\n readonly atlasPath: string;\n readonly sidecarPath: string;\n}\n\n/**\n * Bake an MSDF atlas + glyph-metrics sidecar from a TTF.\n *\n * @param ttfPath path to the TrueType source.\n * @param outDir output directory (created if missing).\n * @param generatorFactory yields the MSDF generator (real: @zappar; tests: mock).\n * @returns `Result`-style: throws a {@link FontError} on every failure mode\n * (unsupported-font-format before the generator runs; bake-failed when the\n * generator throws). The CLI layer maps the thrown FontError to a structured\n * stderr line + exit code 1 -- never a silent exit 0 without artefacts\n * (charter P3).\n */\nexport async function bakeFont(\n ttfPath: string,\n outDir: string,\n generatorFactory: () => Promise<MsdfGenerator>,\n): Promise<BakeResult> {\n const ttf = await readFile(ttfPath);\n const ttfBytes = new Uint8Array(ttf.buffer, ttf.byteOffset, ttf.byteLength);\n if (!isSupportedFontMagic(ttfBytes)) {\n throw new FontError({\n code: 'unsupported-font-format',\n expected: 'ttf',\n hint: 'bake accepts TrueType (.ttf / 0x00010000 / \"true\") or OpenType-TTF (\"OTTO\") sources; WOFF / WOFF2 / other formats are not supported -- convert to TTF first',\n detail: { path: ttfPath },\n });\n }\n\n let atlas: BakeAtlas;\n let generator: MsdfGenerator | undefined;\n try {\n generator = await generatorFactory();\n atlas = await generator.generateAtlas(ttfBytes);\n } catch (e) {\n throw new FontError({\n code: 'bake-failed',\n expected: '@zappar/msdf-generator to produce an MSDF atlas',\n hint: 'the MSDF generator threw -- a Web Worker + wasm host is required (a plain Node process reports \"Worker is not defined\"); run the bake in a Worker-capable environment',\n detail: { cause: e instanceof Error ? e.message : String(e) },\n });\n } finally {\n if (generator !== undefined) {\n await generator.dispose().catch(() => undefined);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n const base = basename(ttfPath, extname(ttfPath));\n const atlasName = `${base}.atlas.png`;\n const atlasPath = join(outDir, atlasName);\n const sidecarPath = join(outDir, `${base}.meta.json`);\n const png = encodePng(atlas.texture.width, atlas.texture.height, atlas.texture.data);\n await writeFile(atlasPath, png);\n const sidecar = atlasToSidecar(atlas, atlasName);\n await writeFile(sidecarPath, `${JSON.stringify(sidecar, null, 2)}\\n`);\n return { atlasPath, sidecarPath };\n}\n\n/**\n * Real @zappar/msdf-generator factory. Dynamically imported so a non-bake\n * subcommand (or a test that injects a mock) never pays the wasm load cost,\n * and so the package builds without the browser globals the generator needs.\n */\n/**\n * Shape of @zappar/msdf-generator's `MSDFAtlas` (dist/index.d.ts) that the\n * real factory adapts into the POD {@link BakeAtlas}. The package's `texture`\n * is an ImageData-shaped `{ width, height, data }`; we read those fields\n * structurally so the font package never needs the DOM `ImageData` type.\n */\ninterface ZapparAtlas {\n texture: { width: number; height: number; data: Uint8ClampedArray | Uint8Array };\n glyphs: ReadonlyArray<{\n unicode: number;\n advance: number;\n xoffset: number;\n yoffset: number;\n atlasPosition: [number, number];\n atlasSize: [number, number];\n }>;\n metrics: { lineHeight: number; ascender: number };\n textureSize: [number, number];\n fieldRange: number;\n}\n\nexport async function realGeneratorFactory(): Promise<MsdfGenerator> {\n const mod = (await import('@zappar/msdf-generator')) as unknown as {\n MSDF: new (config?: {\n workerUrl?: URL;\n wasmUrl?: string;\n }) => {\n initialize(): Promise<void>;\n generateAtlas(opts: {\n font: Uint8Array;\n charset: string;\n textureSize: [number, number];\n fieldRange: number;\n fontSize: number;\n }): Promise<ZapparAtlas>;\n dispose(): Promise<void>;\n };\n };\n\n const wasmModuleUrl = import.meta.resolve('@zappar/msdf-generator/msdfgen_wasm.wasm');\n const wasmBytes = await readFile(new URL(wasmModuleUrl));\n const wasmUrl = `data:application/octet-stream;base64,${Buffer.from(wasmBytes).toString('base64')}`;\n const nodeGlobal = globalThis as unknown as { Worker?: typeof NodeWorkerAdapter };\n const previousWorker = nodeGlobal.Worker;\n nodeGlobal.Worker = NodeWorkerAdapter;\n let msdf: InstanceType<typeof mod.MSDF> | undefined;\n try {\n msdf = new mod.MSDF({\n workerUrl: new URL('./node-msdf-worker.mjs', import.meta.url),\n wasmUrl,\n });\n await msdf.initialize();\n } finally {\n if (previousWorker === undefined) {\n delete nodeGlobal.Worker;\n } else {\n nodeGlobal.Worker = previousWorker;\n }\n }\n if (msdf === undefined) {\n throw new Error('the MSDF generator did not initialize');\n }\n return {\n async generateAtlas(ttf: Uint8Array): Promise<BakeAtlas> {\n const a = await msdf.generateAtlas({\n font: ttf,\n charset: DEFAULT_CHARSET,\n textureSize: [DEFAULT_TEXTURE_SIZE, DEFAULT_TEXTURE_SIZE],\n fieldRange: DEFAULT_FIELD_RANGE,\n fontSize: DEFAULT_FONT_SIZE,\n });\n return {\n texture: {\n width: a.texture.width,\n height: a.texture.height,\n data: new Uint8Array(a.texture.data),\n },\n glyphs: a.glyphs.map((g) => ({\n unicode: g.unicode,\n advance: g.advance,\n xoffset: g.xoffset,\n yoffset: g.yoffset,\n atlasPosition: [g.atlasPosition[0], g.atlasPosition[1]],\n atlasSize: [g.atlasSize[0], g.atlasSize[1]],\n })),\n metrics: { lineHeight: a.metrics.lineHeight, ascender: a.metrics.ascender },\n textureSize: [a.textureSize[0], a.textureSize[1]],\n fieldRange: a.fieldRange,\n };\n },\n async dispose(): Promise<void> {\n await msdf.dispose();\n },\n };\n}\n\nfunction bakeHelpBody(): string {\n return [\n 'forgeax-engine-remote-font bake — bake MSDF font atlas from TTF',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n 'Reads a TrueType font file and produces:',\n ` <out>/<basename>.atlas.png — ${DEFAULT_TEXTURE_SIZE}x${DEFAULT_TEXTURE_SIZE} MSDF atlas`,\n ' <out>/<basename>.meta.json — glyph metrics sidecar (importer: font)',\n '',\n ].join('\\n');\n}\n\nfunction helpBody(): string {\n return [\n 'forgeax-engine-remote-font — MSDF font atlas baking',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n ].join('\\n');\n}\n\nexport async function runCliFont(argv: string[]): Promise<number> {\n const [sub, ...rest] = argv;\n if (sub === undefined || sub === '--help' || sub === '-h') {\n process.stdout.write(`${helpBody()}\\n`);\n return 0;\n }\n if (sub !== 'bake') {\n process.stderr.write(`unknown subcommand: ${sub}\\n`);\n return 1;\n }\n return runBake(rest);\n}\n\nasync function runBake(rest: string[]): Promise<number> {\n if (rest[0] === '--help' || rest[0] === '-h') {\n process.stdout.write(`${bakeHelpBody()}\\n`);\n return 0;\n }\n let positionals: string[];\n try {\n const parsed = parseArgs({ args: rest, allowPositionals: true, strict: true });\n positionals = [...parsed.positionals];\n } catch {\n process.stderr.write('error parsing CLI args\\n');\n return 1;\n }\n const ttfPath = positionals[0];\n const outDir = positionals[1];\n if (ttfPath === undefined || outDir === undefined) {\n process.stderr.write('usage: forgeax-engine-remote-font bake <ttf> <out>\\n');\n return 1;\n }\n try {\n const result = await bakeFont(ttfPath, outDir, realGeneratorFactory);\n process.stdout.write(`baked ${result.atlasPath} + ${result.sidecarPath}\\n`);\n return 0;\n } catch (e) {\n if (e instanceof FontError) {\n process.stderr.write(\n `${JSON.stringify({ code: e.code, expected: e.expected, hint: e.hint, detail: e.detail })}\\n`,\n );\n return 1;\n }\n process.stderr.write(`bake failed: ${e instanceof Error ? e.message : String(e)}\\n`);\n return 1;\n }\n}\n\nconst isBinEntry = await (async (): Promise<boolean> => {\n const argv1 = process.argv[1];\n if (typeof argv1 !== 'string') return false;\n const argv1Real = await realpath(argv1).catch(() => argv1);\n const selfReal = await realpath(fileURLToPath(import.meta.url)).catch(() =>\n fileURLToPath(import.meta.url),\n );\n return argv1Real === selfReal;\n})();\n\nif (isBinEntry) {\n const exitCode = await runCliFont(process.argv.slice(2));\n process.exit(exitCode);\n}\n","// font-importer.ts - the build-time fontImporter (feat-20260603-asset-import-loader-injection M3 / w24).\n//\n// The `{ key: 'font', import }` Importer the @forgeax/engine-import runner\n// dispatches a `*.meta.json` with `importer: 'font'` to. It absorbs the MSDF\n// bake that previously lived only behind the `forgeax-engine-remote-font\n// bake` CLI: read the `.ttf` source -> @zappar/msdf-generator atlas ->\n// (a) one atlas `TextureAsset` ImportedAsset (the RGBA MSDF atlas, kind\n// 'texture') under the declared `kind: 'texture'` sub-asset GUID, (b) one\n// sampler ImportedAsset under the declared `kind: 'sampler'` sub-asset GUID,\n// and (c) one font glyph-metrics ImportedAsset (kind 'font') under the\n// declared `kind: 'font'` sub-asset GUID. The font carries the BMFont ->\n// FontAsset glyph map + the common block + atlas/sampler GUID refs.\n//\n// Build-time-only boundary (AC-18 / requirements callout): @zappar/msdf-generator\n// is a generator dependency that MUST stay out of the runtime bundle. The\n// runtime today statically imports ZERO @forgeax/engine-font and ZERO @zappar\n// symbols (research Finding 7); this importer keeps that invariant. fontImporter\n// is a NODE-ONLY sub-export (`@forgeax/engine-font/font-importer`,\n// `default: null` under browser conditions); the generator is dynamically\n// imported (cli-font realGeneratorFactory) so even the build-time graph only\n// pays the wasm load cost when a font is actually baked. The runtime fontLoader\n// (M1 w6) reads an already-baked atlas DDC and has no bake dependency.\n//\n// GUID import-stable iron law: produced GUIDs come from `ctx.subAssets[]`. The\n// font sidecar declares `texture`, `sampler`, and `font` sub-assets; this\n// importer maps the bake output onto those declared GUIDs and stamps nothing\n// of its own.\n//\n// `ctx.importSettings` may inject a test `generatorFactory` (an\n// `() => Promise<MsdfGenerator>`) so unit tests drive the bake with a mock\n// instead of the real wasm generator; production import calls fall through to\n// the real @zappar factory.\n\nimport type {\n FontAsset,\n GlyphMetric,\n ImportContext,\n ImportedAsset,\n Importer,\n ImportResult,\n SamplerAsset,\n TextureAsset,\n} from '@forgeax/engine-types';\nimport type { BakeAtlas, MsdfGenerator } from './cli-font.js';\nimport { realGeneratorFactory } from './cli-font.js';\n\n/** Stable semantic identities for the three writable font outputs. */\nexport function sourceKeyForFontOutput(kind: string): string | undefined {\n const normalizedKind = kind.trim();\n return normalizedKind.length === 0 ? undefined : `font:${normalizedKind}`;\n}\n\nexport function fontOutputSourceKeys(): readonly string[] {\n return ['texture', 'sampler', 'font'].map((kind) => sourceKeyForFontOutput(kind) as string);\n}\n\n/** Map the @zappar atlas glyphs into the FontAsset glyph-metrics record. */\nfunction atlasGlyphsToMetrics(atlas: BakeAtlas): Record<number, GlyphMetric> {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return glyphs;\n}\n\nfunction makeAtlasTexture(atlas: BakeAtlas): TextureAsset {\n return {\n kind: 'texture',\n shape: {\n viewDimension: '2d',\n extent: { width: atlas.texture.width, height: atlas.texture.height },\n },\n // MSDF atlas is linear-space RGBA8 (signed-distance channels, never gamma).\n format: 'rgba8unorm',\n data: atlas.texture.data,\n colorSpace: 'linear',\n mips: { kind: 'none' },\n };\n}\n\nfunction makeFontCommon(atlas: BakeAtlas): FontAsset['common'] {\n return {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n };\n}\n\nfunction makeAtlasSampler(): SamplerAsset {\n return {\n kind: 'sampler',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'clamp-to-edge',\n magFilter: 'linear',\n minFilter: 'linear',\n mipmapFilter: 'nearest',\n };\n}\n\nasync function importFont(ctx: ImportContext): Promise<ImportResult> {\n const read = await ctx.readSource();\n if (!read.ok) {\n throw new Error(\n `fontImporter: readSource failed: ${read.error instanceof Error ? read.error.message : String(read.error)}`,\n );\n }\n\n const factory =\n (ctx.importSettings.generatorFactory as (() => Promise<MsdfGenerator>) | undefined) ??\n realGeneratorFactory;\n const generator = await factory();\n let atlas: BakeAtlas;\n try {\n atlas = await generator.generateAtlas(read.value);\n } finally {\n await generator.dispose().catch(() => undefined);\n }\n\n const atlasSub = ctx.subAssets.find((s) => s.kind === 'texture');\n const samplerSub = ctx.subAssets.find((s) => s.kind === 'sampler');\n const fontSub = ctx.subAssets.find((s) => s.kind === 'font');\n const out: ImportedAsset[] = [];\n if (atlasSub !== undefined) {\n out.push({\n guid: atlasSub.guid,\n kind: 'texture',\n payload: makeAtlasTexture(atlas),\n refs: [],\n artifacts: {\n atlas: {\n // Pack v2's runtime texture loader consumes non-Basis artifacts as\n // raw pixels. Keep the baked RGBA8 MSDF atlas in that form here;\n // the CLI still emits a PNG for standalone bake output.\n mediaType: 'application/octet-stream',\n bytes: atlas.texture.data,\n },\n },\n });\n }\n if (samplerSub !== undefined) {\n out.push({\n guid: samplerSub.guid,\n kind: 'sampler',\n payload: makeAtlasSampler(),\n refs: [],\n artifacts: {},\n });\n }\n if (fontSub !== undefined) {\n // The runtime font loader reads atlasGuid / samplerGuid / glyphs / common\n // off the DDC payload (asset-registry loadFontAsset); the produced payload\n // mirrors that shape. atlas Handle / sampler Handle are runtime-resolved\n // from the GUID refs, so the build-time payload carries the GUID strings\n // (cast through FontAsset for the ImportedAsset.payload Asset slot, same\n // build-time POD-vs-Handle bridge the gltfImporter scene arm uses).\n const fontPayload = {\n kind: 'font',\n atlasGuid: atlasSub?.guid ?? '',\n samplerGuid: samplerSub?.guid ?? '',\n glyphs: atlasGlyphsToMetrics(atlas),\n common: makeFontCommon(atlas),\n } as unknown as FontAsset;\n out.push({\n guid: fontSub.guid,\n kind: 'font',\n payload: fontPayload,\n refs: [\n ...(atlasSub !== undefined ? [{ guid: atlasSub.guid }] : []),\n ...(samplerSub !== undefined ? [{ guid: samplerSub.guid }] : []),\n ],\n artifacts: {},\n });\n }\n return { ok: true, value: { assets: out, sourceDependencies: [] } };\n}\n\n/**\n * The font {@link Importer}. Register it into an `ImporterRegistry` so the\n * import runner dispatches `meta.importer === 'font'` sidecars here.\n *\n * @example\n * ```ts\n * import { ImporterRegistry } from '@forgeax/engine-import';\n * import { fontImporter } from '@forgeax/engine-font/font-importer';\n * const importers = new ImporterRegistry();\n * importers.register(fontImporter);\n * ```\n */\nexport const fontImporter: Importer = {\n key: 'font',\n import: importFont,\n};\n"]}
1
+ {"version":3,"sources":["../src/node-worker-adapter.ts","../src/cli-font.ts","../src/font-importer.ts"],"names":[],"mappings":"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","file":"font-importer.mjs","sourcesContent":["import { Worker } from 'node:worker_threads';\n\ninterface MessageEventLike {\n readonly data: unknown;\n readonly origin: string;\n}\n\ntype MessageListener = (event: MessageEventLike) => void;\n\n/** Comlink's browser Worker-shaped endpoint backed by a Node worker thread. */\nexport class NodeWorkerAdapter {\n private readonly worker: Worker;\n private readonly listeners = new Map<MessageListener, (data: unknown) => void>();\n private terminationPromise?: Promise<number>;\n\n public constructor(url: string | URL) {\n this.worker = new Worker(url);\n }\n\n public postMessage(message: unknown, transferList: readonly ArrayBuffer[] = []): void {\n if (this.terminationPromise !== undefined) {\n return;\n }\n this.worker.postMessage(message, [...transferList]);\n }\n\n public addEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = (data: unknown) => listener({ data, origin: '*' });\n this.listeners.set(listener, handler);\n this.worker.on('message', handler);\n }\n\n public removeEventListener(type: string, listener: MessageListener): void {\n if (type !== 'message') return;\n const handler = this.listeners.get(listener);\n if (handler === undefined) return;\n this.listeners.delete(listener);\n this.worker.off('message', handler);\n }\n\n public terminate(): Promise<number> {\n if (this.terminationPromise === undefined) {\n this.terminationPromise = this.worker.terminate();\n }\n return this.terminationPromise;\n }\n}\n","#!/usr/bin/env node\n\n// @forgeax/engine-font/src/cli-font — `forgeax-engine-remote-font` plugin\n// bin. Discovered by the base bin via the kubectl 4th-path\n// `forgeax-engine-remote-` prefix scanner.\n//\n// `bake <ttf> <out>` reads a TrueType font and produces an MSDF atlas PNG +\n// a glyph-metrics sidecar JSON (importer: 'font'). The real bake calls\n// @zappar/msdf-generator (feat-20260531-world-space-msdf-text-rendering M5 /\n// w28 -- replaces the M1 placeholder).\n//\n// Error model (FontErrorCode, structured to stderr, exit code 1):\n// - non-TTF magic (not 0x00010000 / 'true' / 'OTTO') -> 'unsupported-font-format'\n// (AC-15 / plan-strategy D-11). The check runs BEFORE the generator so a\n// bad format never reaches the wasm path.\n// - @zappar/msdf-generator throws (wasm / Worker unavailable, internal error)\n// -> 'bake-failed' (charter P3: explicit failure, never a silent exit-0\n// no-atlas). In a plain Node CI without a Web Worker the generator throws\n// 'Worker is not defined' and the bake reports 'bake-failed' (exit 1) --\n// the best-effort real run requires a Worker + wasm host.\n\nimport { Buffer } from 'node:buffer';\nimport { mkdir, readFile, realpath, writeFile } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { deflateSync } from 'node:zlib';\nimport { FontError, type GlyphMetric } from '@forgeax/engine-types';\nimport { NodeWorkerAdapter } from './node-worker-adapter.js';\n\n/**\n * Minimal subset of the @zappar/msdf-generator glyph record consumed by the\n * bake. Mirrors the package's `GlyphInfo` (dist/index.d.ts) -- only the fields\n * the BMFont -> FontAsset mapping needs (toolchain wiki section 4).\n */\nexport interface BakeGlyph {\n readonly unicode: number;\n readonly advance: number;\n readonly xoffset: number;\n readonly yoffset: number;\n readonly atlasPosition: readonly [number, number];\n readonly atlasSize: readonly [number, number];\n}\n\n/**\n * Minimal subset of the @zappar/msdf-generator `MSDFAtlas` consumed by the\n * bake. `texture` carries the RGBA pixel buffer + dimensions (the package's\n * `ImageData`-shaped texture, but reduced to POD so the bake stays\n * environment-agnostic for testing).\n */\nexport interface BakeAtlas {\n readonly texture: { readonly width: number; readonly height: number; readonly data: Uint8Array };\n readonly glyphs: readonly BakeGlyph[];\n readonly metrics: { readonly lineHeight: number; readonly ascender: number };\n readonly textureSize: readonly [number, number];\n readonly fieldRange: number;\n}\n\n/**\n * The bake-time MSDF generator contract. Injected into {@link bakeFont} so\n * unit tests can supply a mock (real path: `@zappar/msdf-generator`'s `MSDF`).\n */\nexport interface MsdfGenerator {\n generateAtlas(ttf: Uint8Array): Promise<BakeAtlas>;\n dispose(): Promise<void>;\n}\n\n/** Default charset baked into the atlas (printable ASCII). */\nconst DEFAULT_CHARSET = (() => {\n let s = '';\n for (let c = 0x20; c <= 0x7e; c++) s += String.fromCharCode(c);\n return s;\n})();\n\nconst DEFAULT_TEXTURE_SIZE = 1024;\nconst DEFAULT_FIELD_RANGE = 4;\nconst DEFAULT_FONT_SIZE = 48;\n\n/**\n * Bake-time sidecar JSON shape (importer: 'font'). Carries the glyph metrics\n * (BMFont -> FontAsset mapping, toolchain wiki section 4) + the common block\n * (distanceRange / atlas dimensions). Parsed by the runtime font load path.\n */\nexport interface BakeSidecar {\n readonly schemaVersion: string;\n readonly kind: 'external-asset-package';\n readonly importer: 'font';\n readonly source: string;\n readonly importSettings: { readonly colorSpace: 'linear'; readonly mipmap: 'none' };\n readonly common: {\n readonly lineHeight: number;\n readonly base: number;\n readonly distanceRange: number;\n readonly pxRange: number;\n readonly atlasWidth: number;\n readonly atlasHeight: number;\n };\n readonly glyphs: Record<number, GlyphMetric>;\n}\n\n/** TTF / OTF magic numbers (first 4 bytes). Per the OpenType spec. */\nfunction isSupportedFontMagic(bytes: Uint8Array): boolean {\n if (bytes.length < 4) return false;\n const b0 = bytes[0] ?? 0;\n const b1 = bytes[1] ?? 0;\n const b2 = bytes[2] ?? 0;\n const b3 = bytes[3] ?? 0;\n // 0x00010000 = TrueType outlines; 'true' (0x74727565) = legacy Apple TTF;\n // 'OTTO' (0x4f54544f) = OpenType with CFF outlines. WOFF/WOFF2 ('wOFF' /\n // 'wOF2') are rejected as non-TTF per AC-15.\n const isTrueType = b0 === 0x00 && b1 === 0x01 && b2 === 0x00 && b3 === 0x00;\n const isTrue = b0 === 0x74 && b1 === 0x72 && b2 === 0x75 && b3 === 0x65;\n const isOtto = b0 === 0x4f && b1 === 0x54 && b2 === 0x54 && b3 === 0x4f;\n return isTrueType || isTrue || isOtto;\n}\n\n/** CRC-32 (PNG / zlib polynomial) over a byte slice. */\nfunction crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc ^= bytes[i] ?? 0;\n for (let k = 0; k < 8; k++) {\n crc = crc & 1 ? (crc >>> 1) ^ 0xedb88320 : crc >>> 1;\n }\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3),\n ]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n const dv = new DataView(out.buffer);\n dv.setUint32(0, data.length);\n out.set(body, 4);\n dv.setUint32(4 + body.length, crc32(body));\n return out;\n}\n\n/**\n * Encode an RGBA pixel buffer into a PNG (zlib deflate, no external deps).\n * The atlas texture from @zappar is RGBA8; this writes a standard 8-bit\n * RGBA PNG so any consumer (engine image importer / browser) can decode it.\n */\nexport function encodePng(width: number, height: number, rgba: Uint8Array): Uint8Array {\n // Filter byte 0 (None) prefixes each scanline.\n const stride = width * 4;\n const raw = new Uint8Array((stride + 1) * height);\n for (let y = 0; y < height; y++) {\n raw[y * (stride + 1)] = 0;\n raw.set(rgba.subarray(y * stride, y * stride + stride), y * (stride + 1) + 1);\n }\n const idat = deflateSync(raw);\n const ihdr = new Uint8Array(13);\n const dv = new DataView(ihdr.buffer);\n dv.setUint32(0, width);\n dv.setUint32(4, height);\n ihdr[8] = 8; // bit depth\n ihdr[9] = 6; // color type RGBA\n ihdr[10] = 0; // compression\n ihdr[11] = 0; // filter\n ihdr[12] = 0; // interlace\n const signature = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n const chunks = [\n signature,\n pngChunk('IHDR', ihdr),\n pngChunk('IDAT', new Uint8Array(idat)),\n pngChunk('IEND', new Uint8Array(0)),\n ];\n const total = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n out.set(c, off);\n off += c.length;\n }\n return out;\n}\n\n/** Map a @zappar atlas into the FontAsset glyph-metrics sidecar shape. */\nexport function atlasToSidecar(atlas: BakeAtlas, sourcePng: string): BakeSidecar {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'font',\n source: sourcePng,\n importSettings: { colorSpace: 'linear', mipmap: 'none' },\n common: {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n },\n glyphs,\n };\n}\n\n/** Result of a successful bake -- the written artefact paths. */\nexport interface BakeResult {\n readonly atlasPath: string;\n readonly sidecarPath: string;\n}\n\n/**\n * Bake an MSDF atlas + glyph-metrics sidecar from a TTF.\n *\n * @param ttfPath path to the TrueType source.\n * @param outDir output directory (created if missing).\n * @param generatorFactory yields the MSDF generator (real: @zappar; tests: mock).\n * @returns `Result`-style: throws a {@link FontError} on every failure mode\n * (unsupported-font-format before the generator runs; bake-failed when the\n * generator throws). The CLI layer maps the thrown FontError to a structured\n * stderr line + exit code 1 -- never a silent exit 0 without artefacts\n * (charter P3).\n */\nexport async function bakeFont(\n ttfPath: string,\n outDir: string,\n generatorFactory: () => Promise<MsdfGenerator>,\n): Promise<BakeResult> {\n const ttf = await readFile(ttfPath);\n const ttfBytes = new Uint8Array(ttf.buffer, ttf.byteOffset, ttf.byteLength);\n if (!isSupportedFontMagic(ttfBytes)) {\n throw new FontError({\n code: 'unsupported-font-format',\n expected: 'ttf',\n hint: 'bake accepts TrueType (.ttf / 0x00010000 / \"true\") or OpenType-TTF (\"OTTO\") sources; WOFF / WOFF2 / other formats are not supported -- convert to TTF first',\n detail: { path: ttfPath },\n });\n }\n\n let atlas: BakeAtlas;\n let generator: MsdfGenerator | undefined;\n try {\n generator = await generatorFactory();\n atlas = await generator.generateAtlas(ttfBytes);\n } catch (e) {\n throw new FontError({\n code: 'bake-failed',\n expected: '@zappar/msdf-generator to produce an MSDF atlas',\n hint: 'the MSDF generator threw -- a Web Worker + wasm host is required (a plain Node process reports \"Worker is not defined\"); run the bake in a Worker-capable environment',\n detail: { cause: e instanceof Error ? e.message : String(e) },\n });\n } finally {\n if (generator !== undefined) {\n await generator.dispose().catch(() => undefined);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n const base = basename(ttfPath, extname(ttfPath));\n const atlasName = `${base}.atlas.png`;\n const atlasPath = join(outDir, atlasName);\n const sidecarPath = join(outDir, `${base}.meta.json`);\n const png = encodePng(atlas.texture.width, atlas.texture.height, atlas.texture.data);\n await writeFile(atlasPath, png);\n const sidecar = atlasToSidecar(atlas, atlasName);\n await writeFile(sidecarPath, `${JSON.stringify(sidecar, null, 2)}\\n`);\n return { atlasPath, sidecarPath };\n}\n\n/**\n * Real @zappar/msdf-generator factory. Dynamically imported so a non-bake\n * subcommand (or a test that injects a mock) never pays the wasm load cost,\n * and so the package builds without the browser globals the generator needs.\n */\n/**\n * Shape of @zappar/msdf-generator's `MSDFAtlas` (dist/index.d.ts) that the\n * real factory adapts into the POD {@link BakeAtlas}. The package's `texture`\n * is an ImageData-shaped `{ width, height, data }`; we read those fields\n * structurally so the font package never needs the DOM `ImageData` type.\n */\ninterface ZapparAtlas {\n texture: { width: number; height: number; data: Uint8ClampedArray | Uint8Array };\n glyphs: ReadonlyArray<{\n unicode: number;\n advance: number;\n xoffset: number;\n yoffset: number;\n atlasPosition: [number, number];\n atlasSize: [number, number];\n }>;\n metrics: { lineHeight: number; ascender: number };\n textureSize: [number, number];\n fieldRange: number;\n}\n\nexport async function realGeneratorFactory(): Promise<MsdfGenerator> {\n const mod = (await import('@zappar/msdf-generator')) as unknown as {\n MSDF: new (config?: {\n workerUrl?: URL;\n wasmUrl?: string;\n }) => {\n initialize(): Promise<void>;\n generateAtlas(opts: {\n font: Uint8Array;\n charset: string;\n textureSize: [number, number];\n fieldRange: number;\n fontSize: number;\n }): Promise<ZapparAtlas>;\n dispose(): Promise<void>;\n };\n };\n\n const wasmModuleUrl = import.meta.resolve('@zappar/msdf-generator/msdfgen_wasm.wasm');\n const wasmBytes = await readFile(new URL(wasmModuleUrl));\n const wasmUrl = `data:application/octet-stream;base64,${Buffer.from(wasmBytes).toString('base64')}`;\n const nodeGlobal = globalThis as unknown as { Worker?: typeof NodeWorkerAdapter };\n const previousWorker = nodeGlobal.Worker;\n nodeGlobal.Worker = NodeWorkerAdapter;\n let msdf: InstanceType<typeof mod.MSDF> | undefined;\n try {\n msdf = new mod.MSDF({\n workerUrl: new URL('./node-msdf-worker.mjs', import.meta.url),\n wasmUrl,\n });\n await msdf.initialize();\n } finally {\n if (previousWorker === undefined) {\n delete nodeGlobal.Worker;\n } else {\n nodeGlobal.Worker = previousWorker;\n }\n }\n if (msdf === undefined) {\n throw new Error('the MSDF generator did not initialize');\n }\n return {\n async generateAtlas(ttf: Uint8Array): Promise<BakeAtlas> {\n const a = await msdf.generateAtlas({\n font: ttf,\n charset: DEFAULT_CHARSET,\n textureSize: [DEFAULT_TEXTURE_SIZE, DEFAULT_TEXTURE_SIZE],\n fieldRange: DEFAULT_FIELD_RANGE,\n fontSize: DEFAULT_FONT_SIZE,\n });\n return {\n texture: {\n width: a.texture.width,\n height: a.texture.height,\n data: new Uint8Array(a.texture.data),\n },\n glyphs: a.glyphs.map((g) => ({\n unicode: g.unicode,\n advance: g.advance,\n xoffset: g.xoffset,\n yoffset: g.yoffset,\n atlasPosition: [g.atlasPosition[0], g.atlasPosition[1]],\n atlasSize: [g.atlasSize[0], g.atlasSize[1]],\n })),\n metrics: { lineHeight: a.metrics.lineHeight, ascender: a.metrics.ascender },\n textureSize: [a.textureSize[0], a.textureSize[1]],\n fieldRange: a.fieldRange,\n };\n },\n async dispose(): Promise<void> {\n await msdf.dispose();\n },\n };\n}\n\nfunction bakeHelpBody(): string {\n return [\n 'forgeax-engine-remote-font bake — bake MSDF font atlas from TTF',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n 'Reads a TrueType font file and produces:',\n ` <out>/<basename>.atlas.png — ${DEFAULT_TEXTURE_SIZE}x${DEFAULT_TEXTURE_SIZE} MSDF atlas`,\n ' <out>/<basename>.meta.json — glyph metrics sidecar (importer: font)',\n '',\n ].join('\\n');\n}\n\nfunction helpBody(): string {\n return [\n 'forgeax-engine-remote-font — MSDF font atlas baking',\n '',\n 'Usage:',\n ' forgeax-engine-remote-font bake <ttf> <out>',\n '',\n ].join('\\n');\n}\n\nexport async function runCliFont(argv: string[]): Promise<number> {\n const [sub, ...rest] = argv;\n if (sub === undefined || sub === '--help' || sub === '-h') {\n process.stdout.write(`${helpBody()}\\n`);\n return 0;\n }\n if (sub !== 'bake') {\n process.stderr.write(`unknown subcommand: ${sub}\\n`);\n return 1;\n }\n return runBake(rest);\n}\n\nasync function runBake(rest: string[]): Promise<number> {\n if (rest[0] === '--help' || rest[0] === '-h') {\n process.stdout.write(`${bakeHelpBody()}\\n`);\n return 0;\n }\n let positionals: string[];\n try {\n const parsed = parseArgs({ args: rest, allowPositionals: true, strict: true });\n positionals = [...parsed.positionals];\n } catch {\n process.stderr.write('error parsing CLI args\\n');\n return 1;\n }\n const ttfPath = positionals[0];\n const outDir = positionals[1];\n if (ttfPath === undefined || outDir === undefined) {\n process.stderr.write('usage: forgeax-engine-remote-font bake <ttf> <out>\\n');\n return 1;\n }\n try {\n const result = await bakeFont(ttfPath, outDir, realGeneratorFactory);\n process.stdout.write(`baked ${result.atlasPath} + ${result.sidecarPath}\\n`);\n return 0;\n } catch (e) {\n if (e instanceof FontError) {\n process.stderr.write(\n `${JSON.stringify({ code: e.code, expected: e.expected, hint: e.hint, detail: e.detail })}\\n`,\n );\n return 1;\n }\n process.stderr.write(`bake failed: ${e instanceof Error ? e.message : String(e)}\\n`);\n return 1;\n }\n}\n\nconst isBinEntry = await (async (): Promise<boolean> => {\n const argv1 = process.argv[1];\n if (typeof argv1 !== 'string') return false;\n const argv1Real = await realpath(argv1).catch(() => argv1);\n const selfReal = await realpath(fileURLToPath(import.meta.url)).catch(() =>\n fileURLToPath(import.meta.url),\n );\n return argv1Real === selfReal;\n})();\n\nif (isBinEntry) {\n const exitCode = await runCliFont(process.argv.slice(2));\n process.exit(exitCode);\n}\n","// font-importer.ts - the build-time fontImporter (feat-20260603-asset-import-loader-injection M3 / w24).\n//\n// The `{ key: 'font', import }` Importer the @forgeax/engine-import runner\n// dispatches a `*.meta.json` with `importer: 'font'` to. It absorbs the MSDF\n// bake that previously lived only behind the `forgeax-engine-remote-font\n// bake` CLI: read the `.ttf` source -> @zappar/msdf-generator atlas ->\n// (a) one atlas `TextureAsset` ImportedAsset (the RGBA MSDF atlas, kind\n// 'texture') under the declared `kind: 'texture'` sub-asset GUID, (b) one\n// sampler ImportedAsset under the declared `kind: 'sampler'` sub-asset GUID,\n// and (c) one font glyph-metrics ImportedAsset (kind 'font') under the\n// declared `kind: 'font'` sub-asset GUID. The font carries the BMFont ->\n// FontAsset glyph map + the common block + atlas/sampler GUID refs.\n//\n// Build-time-only boundary (AC-18 / requirements callout): @zappar/msdf-generator\n// is a generator dependency that MUST stay out of the runtime bundle. The\n// runtime today statically imports ZERO @forgeax/engine-font and ZERO @zappar\n// symbols (research Finding 7); this importer keeps that invariant. fontImporter\n// is a NODE-ONLY sub-export (`@forgeax/engine-font/font-importer`,\n// `default: null` under browser conditions); the generator is dynamically\n// imported (cli-font realGeneratorFactory) so even the build-time graph only\n// pays the wasm load cost when a font is actually baked. The runtime fontLoader\n// (M1 w6) reads an already-baked atlas DDC and has no bake dependency.\n//\n// GUID import-stable iron law: produced GUIDs come from `ctx.subAssets[]`. The\n// font sidecar declares `texture`, `sampler`, and `font` sub-assets; this\n// importer maps the bake output onto those declared GUIDs and stamps nothing\n// of its own.\n//\n// `ctx.importSettings` may inject a test `generatorFactory` (an\n// `() => Promise<MsdfGenerator>`) so unit tests drive the bake with a mock\n// instead of the real wasm generator; production import calls fall through to\n// the real @zappar factory.\n\nimport type {\n FontAsset,\n GlyphMetric,\n ImportContext,\n ImportedAsset,\n Importer,\n ImportResult,\n SamplerAsset,\n TextureAsset,\n} from '@forgeax/engine-types';\nimport type { BakeAtlas, MsdfGenerator } from './cli-font.js';\nimport { realGeneratorFactory } from './cli-font.js';\n\n/** Stable semantic identities for the three writable font outputs. */\nexport function sourceKeyForFontOutput(kind: string): string | undefined {\n const normalizedKind = kind.trim();\n return normalizedKind.length === 0 ? undefined : `font:${normalizedKind}`;\n}\n\nexport function fontOutputSourceKeys(): readonly string[] {\n return ['texture', 'sampler', 'font'].map((kind) => sourceKeyForFontOutput(kind) as string);\n}\n\n/** Map the @zappar atlas glyphs into the FontAsset glyph-metrics record. */\nfunction atlasGlyphsToMetrics(atlas: BakeAtlas): Record<number, GlyphMetric> {\n const glyphs: Record<number, GlyphMetric> = {};\n for (const g of atlas.glyphs) {\n glyphs[g.unicode] = {\n advance: g.advance,\n bearingX: g.xoffset,\n bearingY: g.yoffset,\n size: { w: g.atlasSize[0], h: g.atlasSize[1] },\n region: {\n x: g.atlasPosition[0],\n y: g.atlasPosition[1],\n w: g.atlasSize[0],\n h: g.atlasSize[1],\n },\n };\n }\n return glyphs;\n}\n\nfunction makeAtlasTexture(atlas: BakeAtlas): TextureAsset {\n return {\n kind: 'texture',\n shape: {\n viewDimension: '2d',\n extent: { width: atlas.texture.width, height: atlas.texture.height },\n },\n // MSDF atlas is linear-space RGBA8 (signed-distance channels, never gamma).\n format: 'rgba8unorm',\n data: atlas.texture.data,\n colorSpace: 'linear',\n mips: { kind: 'none' },\n };\n}\n\nfunction makeFontCommon(atlas: BakeAtlas): FontAsset['common'] {\n return {\n lineHeight: atlas.metrics.lineHeight,\n base: atlas.metrics.ascender,\n distanceRange: atlas.fieldRange,\n pxRange: atlas.fieldRange,\n atlasWidth: atlas.textureSize[0],\n atlasHeight: atlas.textureSize[1],\n };\n}\n\nfunction makeAtlasSampler(): SamplerAsset {\n return {\n kind: 'sampler',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'clamp-to-edge',\n magFilter: 'linear',\n minFilter: 'linear',\n mipmapFilter: 'nearest',\n };\n}\n\nasync function importFont(ctx: ImportContext): Promise<ImportResult> {\n const read = await ctx.readSource();\n if (!read.ok) {\n throw new Error(\n `fontImporter: readSource failed: ${read.error instanceof Error ? read.error.message : String(read.error)}`,\n );\n }\n\n const factory =\n (ctx.importSettings.generatorFactory as (() => Promise<MsdfGenerator>) | undefined) ??\n realGeneratorFactory;\n const generator = await factory();\n let atlas: BakeAtlas;\n try {\n atlas = await generator.generateAtlas(read.value);\n } finally {\n await generator.dispose().catch(() => undefined);\n }\n\n const atlasSub = ctx.subAssets.find((s) => s.kind === 'texture');\n const samplerSub = ctx.subAssets.find((s) => s.kind === 'sampler');\n const fontSub = ctx.subAssets.find((s) => s.kind === 'font');\n const out: ImportedAsset[] = [];\n if (atlasSub !== undefined) {\n out.push({\n guid: atlasSub.guid,\n kind: 'texture',\n payload: makeAtlasTexture(atlas),\n refs: [],\n artifacts: {\n atlas: {\n // Pack v2's runtime texture loader consumes non-Basis artifacts as\n // raw pixels. Keep the baked RGBA8 MSDF atlas in that form here;\n // the CLI still emits a PNG for standalone bake output.\n mediaType: 'application/octet-stream',\n bytes: atlas.texture.data,\n },\n },\n });\n }\n if (samplerSub !== undefined) {\n out.push({\n guid: samplerSub.guid,\n kind: 'sampler',\n payload: makeAtlasSampler(),\n refs: [],\n artifacts: {},\n });\n }\n if (fontSub !== undefined) {\n // The runtime font loader reads atlasGuid / samplerGuid / glyphs / common\n // off the DDC payload (asset-registry loadFontAsset); the produced payload\n // mirrors that shape. atlas Handle / sampler Handle are runtime-resolved\n // from the GUID refs, so the build-time payload carries the GUID strings\n // (cast through FontAsset for the ImportedAsset.payload Asset slot, same\n // build-time POD-vs-Handle bridge the gltfImporter scene arm uses).\n const fontPayload = {\n kind: 'font',\n atlasGuid: atlasSub?.guid ?? '',\n samplerGuid: samplerSub?.guid ?? '',\n glyphs: atlasGlyphsToMetrics(atlas),\n common: makeFontCommon(atlas),\n } as unknown as FontAsset;\n out.push({\n guid: fontSub.guid,\n kind: 'font',\n payload: fontPayload,\n refs: [\n ...(atlasSub !== undefined ? [{ guid: atlasSub.guid }] : []),\n ...(samplerSub !== undefined ? [{ guid: samplerSub.guid }] : []),\n ],\n artifacts: {},\n });\n }\n return { ok: true, value: { assets: out, sourceDependencies: [] } };\n}\n\n/**\n * The font {@link Importer}. Register it into an `ImporterRegistry` so the\n * import runner dispatches `meta.importer === 'font'` sidecars here.\n *\n * @example\n * ```ts\n * import { ImporterRegistry } from '@forgeax/engine-import';\n * import { fontImporter } from '@forgeax/engine-font/font-importer';\n * const importers = new ImporterRegistry();\n * importers.register(fontImporter);\n * ```\n */\nexport const fontImporter: Importer = {\n key: 'font',\n import: importFont,\n};\n"]}
@@ -7,6 +7,7 @@ type MessageListener = (event: MessageEventLike) => void;
7
7
  export declare class NodeWorkerAdapter {
8
8
  private readonly worker;
9
9
  private readonly listeners;
10
+ private terminationPromise?;
10
11
  constructor(url: string | URL);
11
12
  postMessage(message: unknown, transferList?: readonly ArrayBuffer[]): void;
12
13
  addEventListener(type: string, listener: MessageListener): void;
@@ -1 +1 @@
1
- {"version":3,"file":"node-worker-adapter.d.ts","sourceRoot":"","sources":["../src/node-worker-adapter.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEzD,+EAA+E;AAC/E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuD;gBAE9D,GAAG,EAAE,MAAM,GAAG,GAAG;IAI7B,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,WAAW,EAAO,GAAG,IAAI;IAI9E,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAO/D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQlE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAGpC"}
1
+ {"version":3,"file":"node-worker-adapter.d.ts","sourceRoot":"","sources":["../src/node-worker-adapter.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEzD,+EAA+E;AAC/E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuD;IACjF,OAAO,CAAC,kBAAkB,CAAC,CAAkB;gBAE1B,GAAG,EAAE,MAAM,GAAG,GAAG;IAI7B,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,WAAW,EAAO,GAAG,IAAI;IAO9E,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAO/D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQlE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAMpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-font",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -39,13 +39,13 @@
39
39
  "LICENSE"
40
40
  ],
41
41
  "dependencies": {
42
- "@forgeax/engine-pack": "0.1.20",
43
- "@forgeax/engine-types": "0.1.20",
42
+ "@forgeax/engine-pack": "0.1.21",
43
+ "@forgeax/engine-types": "0.1.21",
44
44
  "@zappar/msdf-generator": "1.2.4"
45
45
  },
46
46
  "devDependencies": {
47
- "@forgeax/engine-import": "0.1.20",
48
- "@forgeax/engine-remote": "0.1.20",
47
+ "@forgeax/engine-import": "0.1.21",
48
+ "@forgeax/engine-remote": "0.1.21",
49
49
  "@types/node": "^20.14.0"
50
50
  },
51
51
  "forgeax": {
@@ -0,0 +1,145 @@
1
+ import { beforeEach, describe, expect, it, type Mock, vi } from 'vitest';
2
+
3
+ interface WorkerRecord {
4
+ readonly postMessage: (message: unknown, transferList?: readonly ArrayBuffer[]) => void;
5
+ readonly on: (event: string, handler: (data: unknown) => void) => void;
6
+ readonly off: (event: string, handler: (data: unknown) => void) => void;
7
+ readonly terminate: () => Promise<number>;
8
+ }
9
+
10
+ const workerState = vi.hoisted(() => ({ current: undefined as WorkerRecord | undefined }));
11
+
12
+ vi.mock('node:worker_threads', () => ({
13
+ Worker: class {
14
+ private get current(): WorkerRecord {
15
+ if (workerState.current === undefined) throw new Error('fake worker is not configured');
16
+ return workerState.current;
17
+ }
18
+
19
+ postMessage(message: unknown, transferList?: readonly ArrayBuffer[]): void {
20
+ this.current.postMessage(message, transferList);
21
+ }
22
+
23
+ on(event: string, handler: (data: unknown) => void): void {
24
+ this.current.on(event, handler);
25
+ }
26
+
27
+ off(event: string, handler: (data: unknown) => void): void {
28
+ this.current.off(event, handler);
29
+ }
30
+
31
+ terminate(): Promise<number> {
32
+ return this.current.terminate();
33
+ }
34
+ },
35
+ }));
36
+
37
+ import { NodeWorkerAdapter } from '../node-worker-adapter.js';
38
+
39
+ interface Deferred<T> {
40
+ readonly promise: Promise<T>;
41
+ readonly resolve: (value: T) => void;
42
+ readonly reject: (reason: unknown) => void;
43
+ }
44
+
45
+ interface FakeWorker extends WorkerRecord {
46
+ readonly postMessage: Mock<WorkerRecord['postMessage']>;
47
+ readonly on: Mock<WorkerRecord['on']>;
48
+ readonly off: Mock<WorkerRecord['off']>;
49
+ readonly terminate: Mock<WorkerRecord['terminate']>;
50
+ }
51
+
52
+ function deferred<T>(): Deferred<T> {
53
+ let resolve!: (value: T) => void;
54
+ let reject!: (reason: unknown) => void;
55
+ const promise = new Promise<T>((resolvePromise, rejectPromise) => {
56
+ resolve = resolvePromise;
57
+ reject = rejectPromise;
58
+ });
59
+ return { promise, resolve, reject };
60
+ }
61
+
62
+ function fakeWorker(termination: Promise<number>): FakeWorker {
63
+ return {
64
+ postMessage: vi.fn<WorkerRecord['postMessage']>(),
65
+ on: vi.fn<WorkerRecord['on']>(),
66
+ off: vi.fn<WorkerRecord['off']>(),
67
+ terminate: vi.fn<WorkerRecord['terminate']>(() => termination),
68
+ };
69
+ }
70
+
71
+ function createAdapter(worker: FakeWorker): NodeWorkerAdapter {
72
+ workerState.current = worker;
73
+ return new NodeWorkerAdapter(new URL('file:///fake-font-worker.mjs'));
74
+ }
75
+
76
+ describe('NodeWorkerAdapter', () => {
77
+ beforeEach(() => {
78
+ workerState.current = undefined;
79
+ });
80
+
81
+ it('forwards messages and transfer lists before termination', () => {
82
+ const worker = fakeWorker(Promise.resolve(0));
83
+ const adapter = createAdapter(worker);
84
+ const message = { type: 'APPLY', value: 42 };
85
+ const transfer = new ArrayBuffer(8);
86
+
87
+ adapter.postMessage(message, [transfer]);
88
+
89
+ expect(worker.postMessage).toHaveBeenCalledOnce();
90
+ expect(worker.postMessage).toHaveBeenCalledWith(message, [transfer]);
91
+ });
92
+
93
+ it('shares the pending termination completion without terminating twice', async () => {
94
+ const termination = deferred<number>();
95
+ const worker = fakeWorker(termination.promise);
96
+ const adapter = createAdapter(worker);
97
+
98
+ const first = adapter.terminate();
99
+ const duplicate = adapter.terminate();
100
+ let duplicateSettled = false;
101
+ void duplicate.then(() => {
102
+ duplicateSettled = true;
103
+ });
104
+ await Promise.resolve();
105
+
106
+ expect(duplicate).toBe(first);
107
+ expect(worker.terminate).toHaveBeenCalledOnce();
108
+ expect(duplicateSettled).toBe(false);
109
+
110
+ termination.resolve(23);
111
+ await expect(first).resolves.toBe(23);
112
+ await expect(duplicate).resolves.toBe(23);
113
+ expect(adapter.terminate()).toBe(first);
114
+ expect(worker.terminate).toHaveBeenCalledOnce();
115
+ });
116
+
117
+ it('shares the first termination rejection', async () => {
118
+ const termination = deferred<number>();
119
+ const worker = fakeWorker(termination.promise);
120
+ const adapter = createAdapter(worker);
121
+ const failure = new Error('worker termination failed');
122
+
123
+ const first = adapter.terminate();
124
+ const duplicate = adapter.terminate();
125
+ const firstResult = expect(first).rejects.toBe(failure);
126
+ const duplicateResult = expect(duplicate).rejects.toBe(failure);
127
+ termination.reject(failure);
128
+
129
+ await Promise.all([firstResult, duplicateResult]);
130
+ expect(duplicate).toBe(first);
131
+ expect(adapter.terminate()).toBe(first);
132
+ expect(worker.terminate).toHaveBeenCalledOnce();
133
+ });
134
+
135
+ it('does not touch the worker after termination starts', () => {
136
+ const termination = deferred<number>();
137
+ const worker = fakeWorker(termination.promise);
138
+ const adapter = createAdapter(worker);
139
+
140
+ void adapter.terminate();
141
+ adapter.postMessage({ type: 'RELEASE' });
142
+
143
+ expect(worker.postMessage).not.toHaveBeenCalled();
144
+ });
145
+ });
@@ -11,12 +11,16 @@ type MessageListener = (event: MessageEventLike) => void;
11
11
  export class NodeWorkerAdapter {
12
12
  private readonly worker: Worker;
13
13
  private readonly listeners = new Map<MessageListener, (data: unknown) => void>();
14
+ private terminationPromise?: Promise<number>;
14
15
 
15
16
  public constructor(url: string | URL) {
16
17
  this.worker = new Worker(url);
17
18
  }
18
19
 
19
20
  public postMessage(message: unknown, transferList: readonly ArrayBuffer[] = []): void {
21
+ if (this.terminationPromise !== undefined) {
22
+ return;
23
+ }
20
24
  this.worker.postMessage(message, [...transferList]);
21
25
  }
22
26
 
@@ -36,6 +40,9 @@ export class NodeWorkerAdapter {
36
40
  }
37
41
 
38
42
  public terminate(): Promise<number> {
39
- return this.worker.terminate();
43
+ if (this.terminationPromise === undefined) {
44
+ this.terminationPromise = this.worker.terminate();
45
+ }
46
+ return this.terminationPromise;
40
47
  }
41
48
  }