@embroider/core 4.4.7 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/app-files.js +8 -0
- package/dist/src/app-files.js.map +1 -1
- package/dist/src/html-entrypoint.js +10 -5
- package/dist/src/html-entrypoint.js.map +1 -1
- package/dist/src/html-placeholder.js +4 -1
- package/dist/src/html-placeholder.js.map +1 -1
- package/dist/src/measure-concat.js +4 -1
- package/dist/src/measure-concat.js.map +1 -1
- package/dist/src/module-request.js +25 -38
- package/dist/src/module-request.js.map +1 -1
- package/dist/src/module-resolver-options.js +2 -3
- package/dist/src/module-resolver-options.js.map +1 -1
- package/dist/src/module-resolver.js +26 -32
- package/dist/src/module-resolver.js.map +1 -1
- package/dist/src/node-resolve.js +13 -12
- package/dist/src/node-resolve.js.map +1 -1
- package/dist/src/options.js +3 -3
- package/dist/src/options.js.map +1 -1
- package/dist/src/portable.js +1 -0
- package/dist/src/portable.js.map +1 -1
- package/dist/src/resolver-loader.js +15 -29
- package/dist/src/resolver-loader.js.map +1 -1
- package/dist/src/virtual-content.js +1 -1
- package/dist/src/virtual-content.js.map +1 -1
- package/dist/src/virtual-entrypoint.js +2 -3
- package/dist/src/virtual-entrypoint.js.map +1 -1
- package/dist/src/virtual-route-entrypoint.js +1 -1
- package/dist/src/virtual-route-entrypoint.js.map +1 -1
- package/dist/src/wait-for-trees.js +2 -0
- package/dist/src/wait-for-trees.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/dist/src/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":";;AA+DA,kDA8BC;AA9BD,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":";;AA+DA,kDA8BC;AA9BD,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,IAAK,OAAe,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,4HAA4H,CAC7H,CAAC;IACJ,CAAC;IAED,IAAK,OAAe,EAAE,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,+HAA+H,CAChI,CAAC;IACJ,CAAC;IAED,IAAK,OAAe,EAAE,eAAe,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,8HAA8H,CAC/H,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,GAAG;QACb,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,KAAc;KACjC,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["export default interface Options {\n /**\n * When true, we statically resolve all components, modifiers, and helpers (collectively\n * knows as Invokables) at build time. This causes any unused Invokables to be left out\n * of the build if they are unused i.e. \"tree shaking\".\n *\n * Defaults to false which gives you greater compatibility with classic Ember apps at the\n * cost of bigger builds.\n *\n * This setting takes over from `staticHelpers`, `staticModifiers`, and `staticComponents`\n * because the Developer Experience was less than ideal if any of these settings did not\n * agree i.e. they all needed to be true or they all needed to be false.\n *\n * Enabling this is a prerequisite for route splitting.\n */\n staticInvokables?: boolean;\n\n // Enables per-route code splitting. Any route names that match these patterns\n // will be split out of the initial app payload. If you use this, you must\n // also add @embroider/router to your app. See [@embroider/router's\n // README](https://github.com/embroider-build/embroider/blob/main/packages/router/README.md)\n splitAtRoutes?: (RegExp | string)[];\n\n // Every file within your application's `app` directory is categorized as a\n // component, helper, modifier, route, route template, controller, or \"other\".\n //\n // This option lets you decide which \"other\" files should be loaded\n // statically. By default, all \"other\" files will be included in the build and\n // registered with Ember's runtime loader, because we can't know if somebody\n // is going to try to access them dynamically via Ember's resolver or AMD\n // runtime `require`.\n //\n // If you know that your files are only ever imported, you can list them here\n // and then they will only be included exactly where they're needed.\n //\n // Provide a list of directories or files relative to `/app`. For example\n //\n // staticAppPaths: ['lib']\n //\n // means that everything under your-project/app/lib will be loaded statically.\n //\n // This option has no effect on components (which are governed by\n // staticComponents), helpers (which are governed by staticHelpers), modifiers\n // (which are governed by staticModifiers) or the route-specific files (routes,\n // route templates, and controllers which are governed by splitAtRoutes).\n staticAppPaths?: string[];\n\n // This is a performance optimization that can help you avoid the \"Your build\n // is slower because some babel plugins are non-serializable\" penalty. If you\n // provide the locations of known non-serializable objects, we can discover\n // them and make them serializable.\n //\n // resolve is a list of paths to resolve, in a chain. This lets you resolve\n // your dependencies' dependencies, like: resolve: ['your-dependency',\n // 'inner-dependency/lib/transform']\n //\n // useMethod optionally lets you pick which property within the module to use.\n // If not provided, we use the module.exports itself.\n pluginHints?: { resolve: string[]; useMethod?: string }[];\n}\n\nexport type CoreOptionsType = Required<Options>;\n\nexport function optionsWithDefaults(options?: Options): CoreOptionsType {\n if ((options as any)?.staticHelpers !== undefined) {\n throw new Error(\n `You have set 'staticHelpers' on your Embroider options. This setting has been removed and replaced with 'staticInvokables'`\n );\n }\n\n if ((options as any)?.staticComponents !== undefined) {\n throw new Error(\n `You have set 'staticComponents' on your Embroider options. This setting has been removed and replaced with 'staticInvokables'`\n );\n }\n\n if ((options as any)?.staticModifiers !== undefined) {\n throw new Error(\n `You have set 'staticModifiers' on your Embroider options. This setting has been removed and replaced with 'staticInvokables'`\n );\n }\n\n let defaults = {\n staticInvokables: true,\n splitAtRoutes: [],\n staticAppPaths: [],\n pluginHints: [],\n amdCompatibility: 'cjs' as const,\n };\n if (options) {\n return Object.assign(defaults, options);\n }\n return defaults;\n}\n"]}
|
package/dist/src/portable.js
CHANGED
package/dist/src/portable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/portable.ts"],"names":[],"mappings":";;;;;;;;;;;;AAsBA,wDAQC;AA9BD,iEAAyC;AACzC,gEAAuC;AACvC,2DAA6C;AAC7C,gFAAsD;AAEzC,QAAA,QAAQ,GAAG,+BAA+B,CAAC;AACxD,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;AAc/C,MAAM,EAAE,iBAAiB,EAAE,GAAG,8BAAkB,CAAC;AAEjD,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,4DAA4D;IACnG,CAAC;AACH,CAAC;AAED,MAAa,QAAQ;IACnB,YACU,OAIJ,EAAE;QAJE,SAAI,GAAJ,IAAI,CAIN;IACL,CAAC;IAEJ,SAAS,CAAC,KAAU,EAAE,aAAuB,EAAE;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC9D,CAAC;QAED,IAAI,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvG,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAChC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;gBACpD,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;aAChD,CAAC;QACJ,CAAC;QAED,QAAQ,OAAO,KAAK,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACd,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC9D,KAAK,QAAQ;gBACX,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtD,IAAI,cAAc,GAAG,IAAI,CAAC;oBAC1B,IAAI,YAAY,GAAG,KAAK,CAAC;oBACzB,IAAI,MAAM,GAAG,IAAA,mBAAS,EAAC,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE;wBACnD,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;wBACnE,cAAc,GAAG,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC;wBACzD,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;wBACnD,OAAO,MAAM,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,CAAC;oBACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;gBACzD,CAAC;QACL,CAAC;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO;gBACL,KAAK,EAAE;oBACL,oBAAoB,EAAE,IAAI;oBAC1B,IAAI,EAAE,mBAAmB;oBACzB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,cAAc,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;oBACzD,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B;gBACD,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,IAAI;aACnB,CAAC;QACJ,CAAC;QAED,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,KAAU,EAAE,aAAuB,EAAE;QAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC7D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/B,IAAI,WAAW,GAAG,KAAoB,CAAC;gBACvC,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;oBACzB,KAAK,QAAQ;wBACX,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;4BAChC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;wBAC3F,CAAC;wBACD,OAAO,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACzC,KAAK,mBAAmB;wBACtB,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;oBACpC,KAAK,mBAAmB;wBACtB,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;oBACpC;wBACE,IAAA,sBAAW,EAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAA,mBAAS,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,UAAU;QACZ,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,iEAAiE;gBACjE,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5B,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA9HD,4BA8HC;AAdC;IADC,IAAA,4BAAO,GAAE;0CAcT;AA+BH,SAAS,YAAY;IACnB,IAAI,CAAC,GAAG,MAAuE,CAAC;IAChF,IAAI,CAAC,CAAC,CAAC,gBAAQ,CAAC,EAAE,CAAC;QACjB,CAAC,CAAC,gBAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,CAAC,gBAAQ,CAAC,CAAC;AACrB,CAAC;AAED,4CAA4C;AAE5C,SAAS,aAAa,CAAC,MAAW;IAChC,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC;IAC3B,MAAM,aAAa,GAAG,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC;IAEpF,IACE,aAAa;QACb,MAAM,CAAC,cAAc,KAAK,IAAI;QAC9B,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;QACzC,OAAO,MAAM,CAAC,cAAc,CAAC,WAAW,KAAK,QAAQ,EACrD,CAAC;QACD,OAAO;YACL,oBAAoB,EAAE,IAAI;YAC1B,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW;YAC9C,cAAc,EAAE,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;YACzE,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU;YAC5C,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,SAAS;YAC1C,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;SACrC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,eAA4C;IACjE,iEAAiE;IACjE,IAAI,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,UAAU,GAAG,eAAe,CAAC,SAAS,GAAG,2BAA2B,GAAG,eAAe,CAAC,WAAW,CACnG,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,OAAO,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,eAAe,CAAC,UAAU,GAAG,8BAA8B,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QACnH,CAAC;QACD,OAAO,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mDAAmD;AACnD,SAAS,aAAa,CAAC,MAAW;IAChC,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC;IAC3B,MAAM,aAAa,GAAG,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC;IAEpF,IACE,aAAa;QACb,MAAM,CAAC,aAAa,KAAK,IAAI;QAC7B,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;QACxC,OAAO,MAAM,CAAC,aAAa,CAAC,WAAW,KAAK,QAAQ,EACpD,CAAC;QACD,OAAO;YACL,oBAAoB,EAAE,IAAI;YAC1B,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW;YAC7C,cAAc,EAAE,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;YACxE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC;YACnD,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,eAA4C;IACjE,iEAAiE;IACjE,IAAI,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,OAAO,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,eAAe,CAAC,UAAU,GAAG,8BAA8B,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACnC,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;IAChC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO;QACL,KAAK,EAAE;YACL,oBAAoB,EAAE,IAAI;YAC1B,IAAI,EAAE,QAAQ;YACd,KAAK;YACL,KAAK;SACN;QACD,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import mapValues from 'lodash/mapValues';\nimport assertNever from 'assert-never';\nimport { Memoize } from 'typescript-memoize';\nimport resolvePackagePath from 'resolve-package-path';\n\nexport const protocol = '__embroider_portable_values__';\nconst { globalValues, nonce } = setupGlobals();\n\nexport interface PortableResult {\n value: any;\n isParallelSafe: boolean;\n needsHydrate: boolean;\n}\n\nexport interface PortableHint {\n requireFile: string;\n packageVersion: string | undefined;\n useMethod?: string;\n}\n\nconst { findUpPackagePath } = resolvePackagePath;\n\nexport function maybeNodeModuleVersion(path: string) {\n const packagePath = findUpPackagePath(path);\n\n if (packagePath === null) {\n throw new Error(`Could not find package.json for '${path}'`);\n } else {\n return require(packagePath).version; // eslint-disable-line @typescript-eslint/no-require-imports\n }\n}\n\nexport class Portable {\n constructor(\n private opts: {\n dehydrate?: (value: any, accessPath: string[]) => PortableResult | undefined;\n hydrate?: (value: any, accessPath: string[]) => { value: any } | undefined;\n hints?: PortableHint[];\n } = {}\n ) {}\n\n dehydrate(value: any, accessPath: string[] = []): PortableResult {\n if (this.opts.dehydrate) {\n let result = this.opts.dehydrate.call(this, value, accessPath);\n if (result) {\n return result;\n }\n }\n\n if (value === null) {\n return { value, isParallelSafe: true, needsHydrate: false };\n }\n\n let broccoli = maybeBroccoli(value);\n if (broccoli) {\n return { value: broccoli, isParallelSafe: true, needsHydrate: true };\n }\n\n let htmlbars = maybeHTMLBars(value);\n if (htmlbars) {\n return { value: htmlbars, isParallelSafe: true, needsHydrate: true };\n }\n\n if (Array.isArray(value)) {\n let results = value.map((element, index) => this.dehydrate(element, accessPath.concat(String(index))));\n return {\n value: results.map(r => r.value),\n isParallelSafe: results.every(r => r.isParallelSafe),\n needsHydrate: results.some(r => r.needsHydrate),\n };\n }\n\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return { value, isParallelSafe: true, needsHydrate: false };\n case 'object':\n if (Object.getPrototypeOf(value) === Object.prototype) {\n let isParallelSafe = true;\n let needsHydrate = false;\n let result = mapValues(value, (propertyValue, key) => {\n let result = this.dehydrate(propertyValue, accessPath.concat(key));\n isParallelSafe = isParallelSafe && result.isParallelSafe;\n needsHydrate = needsHydrate || result.needsHydrate;\n return result.value;\n });\n return { value: result, isParallelSafe, needsHydrate };\n }\n }\n\n let found = this.foundHints.get(value);\n if (found) {\n return {\n value: {\n embroiderPlaceholder: true,\n type: 'broccoli-parallel',\n requireFile: found.requireFile,\n packageVersion: maybeNodeModuleVersion(found.requireFile),\n useMethod: found.useMethod,\n },\n isParallelSafe: true,\n needsHydrate: true,\n };\n }\n\n return globalPlaceholder(value);\n }\n\n hydrate(input: any, accessPath: string[] = []): any {\n if (this.opts.hydrate) {\n let result = this.opts.hydrate.call(this, input, accessPath);\n if (result) {\n return result;\n }\n }\n if (Array.isArray(input)) {\n return input.map((element, index) => this.hydrate(element, accessPath.concat(String(index))));\n }\n if (input && typeof input === 'object') {\n if (input.embroiderPlaceholder) {\n let placeholder = input as Placeholder;\n switch (placeholder.type) {\n case 'global':\n if (placeholder.nonce !== nonce) {\n throw new Error(`unable to use this non-serializable babel config in this node process`);\n }\n return globalValues[placeholder.index];\n case 'broccoli-parallel':\n return buildBroccoli(placeholder);\n case 'htmlbars-parallel':\n return buildHTMLBars(placeholder);\n default:\n assertNever(placeholder);\n }\n } else {\n return mapValues(input, (value, key) => this.hydrate(value, accessPath.concat(key)));\n }\n }\n return input;\n }\n\n @Memoize()\n get foundHints(): Map<any, PortableHint> {\n let found = new Map();\n if (this.opts.hints) {\n for (let hint of this.opts.hints) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let mod = require(hint.requireFile);\n if (hint.useMethod) {\n mod = mod[hint.useMethod];\n }\n found.set(mod, hint);\n }\n }\n return found;\n }\n}\n\ninterface GlobalPlaceholder {\n embroiderPlaceholder: true;\n type: 'global';\n nonce: number;\n index: number;\n}\n\ninterface BroccoliParallelPlaceholder {\n embroiderPlaceholder: true;\n type: 'broccoli-parallel';\n requireFile: string;\n packageVersion: string | undefined;\n useMethod: string | undefined;\n buildUsing: string | undefined;\n params: any;\n}\n\ninterface HTMLBarsParallelPlaceholder {\n embroiderPlaceholder: true;\n type: 'htmlbars-parallel';\n packageVersion: string | undefined;\n requireFile: string;\n buildUsing: string;\n params: any;\n}\n\ntype Placeholder = GlobalPlaceholder | BroccoliParallelPlaceholder | HTMLBarsParallelPlaceholder;\n\nfunction setupGlobals() {\n let G = global as any as { [protocol]: { globalValues: any[]; nonce: number } };\n if (!G[protocol]) {\n G[protocol] = { globalValues: [], nonce: Math.floor(Math.random() * Math.pow(2, 32)) };\n }\n return G[protocol];\n}\n\n// === broccoli-babel-transpiler support ===\n\nfunction maybeBroccoli(object: any): BroccoliParallelPlaceholder | undefined {\n const type = typeof object;\n const hasProperties = type === 'function' || (type === 'object' && object !== null);\n\n if (\n hasProperties &&\n object._parallelBabel !== null &&\n typeof object._parallelBabel === 'object' &&\n typeof object._parallelBabel.requireFile === 'string'\n ) {\n return {\n embroiderPlaceholder: true,\n type: 'broccoli-parallel',\n requireFile: object._parallelBabel.requireFile,\n packageVersion: maybeNodeModuleVersion(object._parallelBabel.requireFile),\n buildUsing: object._parallelBabel.buildUsing,\n useMethod: object._parallelBabel.useMethod,\n params: object._parallelBabel.params,\n };\n }\n}\n\nfunction buildBroccoli(parallelApiInfo: BroccoliParallelPlaceholder) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let requiredStuff = require(parallelApiInfo.requireFile);\n\n if (parallelApiInfo.useMethod) {\n if (requiredStuff[parallelApiInfo.useMethod] === undefined) {\n throw new Error(\n \"method '\" + parallelApiInfo.useMethod + \"' does not exist in file \" + parallelApiInfo.requireFile\n );\n }\n return requiredStuff[parallelApiInfo.useMethod];\n }\n\n if (parallelApiInfo.buildUsing) {\n if (typeof requiredStuff[parallelApiInfo.buildUsing] !== 'function') {\n throw new Error(\"'\" + parallelApiInfo.buildUsing + \"' is not a function in file \" + parallelApiInfo.requireFile);\n }\n return requiredStuff[parallelApiInfo.buildUsing](parallelApiInfo.params);\n }\n\n return requiredStuff;\n}\n\n// ember-cli-htmlbars-inline-precompile support ===\nfunction maybeHTMLBars(object: any): HTMLBarsParallelPlaceholder | undefined {\n const type = typeof object;\n const hasProperties = type === 'function' || (type === 'object' && object !== null);\n\n if (\n hasProperties &&\n object.parallelBabel !== null &&\n typeof object.parallelBabel === 'object' &&\n typeof object.parallelBabel.requireFile === 'string'\n ) {\n return {\n embroiderPlaceholder: true,\n type: 'htmlbars-parallel',\n requireFile: object.parallelBabel.requireFile,\n packageVersion: maybeNodeModuleVersion(object.parallelBabel.requireFile),\n buildUsing: String(object.parallelBabel.buildUsing),\n params: object.parallelBabel.params,\n };\n }\n}\n\nfunction buildHTMLBars(parallelApiInfo: HTMLBarsParallelPlaceholder) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let requiredStuff = require(parallelApiInfo.requireFile);\n if (typeof requiredStuff[parallelApiInfo.buildUsing] !== 'function') {\n throw new Error(\"'\" + parallelApiInfo.buildUsing + \"' is not a function in file \" + parallelApiInfo.requireFile);\n }\n return requiredStuff[parallelApiInfo.buildUsing](parallelApiInfo.params);\n}\n\nfunction globalPlaceholder(value: any): { value: GlobalPlaceholder; isParallelSafe: false; needsHydrate: true } {\n let index = globalValues.length;\n globalValues.push(value);\n return {\n value: {\n embroiderPlaceholder: true,\n type: 'global',\n nonce,\n index,\n },\n isParallelSafe: false,\n needsHydrate: true,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/portable.ts"],"names":[],"mappings":"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","sourcesContent":["import mapValues from 'lodash/mapValues';\nimport assertNever from 'assert-never';\nimport { Memoize } from 'typescript-memoize';\nimport resolvePackagePath from 'resolve-package-path';\n\nexport const protocol = '__embroider_portable_values__';\nconst { globalValues, nonce } = setupGlobals();\n\nexport interface PortableResult {\n value: any;\n isParallelSafe: boolean;\n needsHydrate: boolean;\n}\n\nexport interface PortableHint {\n requireFile: string;\n packageVersion: string | undefined;\n useMethod?: string;\n}\n\nconst { findUpPackagePath } = resolvePackagePath;\n\nexport function maybeNodeModuleVersion(path: string) {\n const packagePath = findUpPackagePath(path);\n\n if (packagePath === null) {\n throw new Error(`Could not find package.json for '${path}'`);\n } else {\n return require(packagePath).version; // eslint-disable-line @typescript-eslint/no-require-imports\n }\n}\n\nexport class Portable {\n constructor(\n private opts: {\n dehydrate?: (value: any, accessPath: string[]) => PortableResult | undefined;\n hydrate?: (value: any, accessPath: string[]) => { value: any } | undefined;\n hints?: PortableHint[];\n } = {}\n ) {}\n\n dehydrate(value: any, accessPath: string[] = []): PortableResult {\n if (this.opts.dehydrate) {\n let result = this.opts.dehydrate.call(this, value, accessPath);\n if (result) {\n return result;\n }\n }\n\n if (value === null) {\n return { value, isParallelSafe: true, needsHydrate: false };\n }\n\n let broccoli = maybeBroccoli(value);\n if (broccoli) {\n return { value: broccoli, isParallelSafe: true, needsHydrate: true };\n }\n\n let htmlbars = maybeHTMLBars(value);\n if (htmlbars) {\n return { value: htmlbars, isParallelSafe: true, needsHydrate: true };\n }\n\n if (Array.isArray(value)) {\n let results = value.map((element, index) => this.dehydrate(element, accessPath.concat(String(index))));\n return {\n value: results.map(r => r.value),\n isParallelSafe: results.every(r => r.isParallelSafe),\n needsHydrate: results.some(r => r.needsHydrate),\n };\n }\n\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return { value, isParallelSafe: true, needsHydrate: false };\n case 'object':\n if (Object.getPrototypeOf(value) === Object.prototype) {\n let isParallelSafe = true;\n let needsHydrate = false;\n let result = mapValues(value, (propertyValue, key) => {\n let result = this.dehydrate(propertyValue, accessPath.concat(key));\n isParallelSafe = isParallelSafe && result.isParallelSafe;\n needsHydrate = needsHydrate || result.needsHydrate;\n return result.value;\n });\n return { value: result, isParallelSafe, needsHydrate };\n }\n }\n\n let found = this.foundHints.get(value);\n if (found) {\n return {\n value: {\n embroiderPlaceholder: true,\n type: 'broccoli-parallel',\n requireFile: found.requireFile,\n packageVersion: maybeNodeModuleVersion(found.requireFile),\n useMethod: found.useMethod,\n },\n isParallelSafe: true,\n needsHydrate: true,\n };\n }\n\n return globalPlaceholder(value);\n }\n\n hydrate(input: any, accessPath: string[] = []): any {\n if (this.opts.hydrate) {\n let result = this.opts.hydrate.call(this, input, accessPath);\n if (result) {\n return result;\n }\n }\n if (Array.isArray(input)) {\n return input.map((element, index) => this.hydrate(element, accessPath.concat(String(index))));\n }\n if (input && typeof input === 'object') {\n if (input.embroiderPlaceholder) {\n let placeholder = input as Placeholder;\n switch (placeholder.type) {\n case 'global':\n if (placeholder.nonce !== nonce) {\n throw new Error(`unable to use this non-serializable babel config in this node process`);\n }\n return globalValues[placeholder.index];\n case 'broccoli-parallel':\n return buildBroccoli(placeholder);\n case 'htmlbars-parallel':\n return buildHTMLBars(placeholder);\n default:\n assertNever(placeholder);\n }\n } else {\n return mapValues(input, (value, key) => this.hydrate(value, accessPath.concat(key)));\n }\n }\n return input;\n }\n\n @Memoize()\n get foundHints(): Map<any, PortableHint> {\n let found = new Map();\n if (this.opts.hints) {\n for (let hint of this.opts.hints) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let mod = require(hint.requireFile);\n if (hint.useMethod) {\n mod = mod[hint.useMethod];\n }\n found.set(mod, hint);\n }\n }\n return found;\n }\n}\n\ninterface GlobalPlaceholder {\n embroiderPlaceholder: true;\n type: 'global';\n nonce: number;\n index: number;\n}\n\ninterface BroccoliParallelPlaceholder {\n embroiderPlaceholder: true;\n type: 'broccoli-parallel';\n requireFile: string;\n packageVersion: string | undefined;\n useMethod: string | undefined;\n buildUsing: string | undefined;\n params: any;\n}\n\ninterface HTMLBarsParallelPlaceholder {\n embroiderPlaceholder: true;\n type: 'htmlbars-parallel';\n packageVersion: string | undefined;\n requireFile: string;\n buildUsing: string;\n params: any;\n}\n\ntype Placeholder = GlobalPlaceholder | BroccoliParallelPlaceholder | HTMLBarsParallelPlaceholder;\n\nfunction setupGlobals() {\n let G = global as any as { [protocol]: { globalValues: any[]; nonce: number } };\n if (!G[protocol]) {\n G[protocol] = { globalValues: [], nonce: Math.floor(Math.random() * Math.pow(2, 32)) };\n }\n return G[protocol];\n}\n\n// === broccoli-babel-transpiler support ===\n\nfunction maybeBroccoli(object: any): BroccoliParallelPlaceholder | undefined {\n const type = typeof object;\n const hasProperties = type === 'function' || (type === 'object' && object !== null);\n\n if (\n hasProperties &&\n object._parallelBabel !== null &&\n typeof object._parallelBabel === 'object' &&\n typeof object._parallelBabel.requireFile === 'string'\n ) {\n return {\n embroiderPlaceholder: true,\n type: 'broccoli-parallel',\n requireFile: object._parallelBabel.requireFile,\n packageVersion: maybeNodeModuleVersion(object._parallelBabel.requireFile),\n buildUsing: object._parallelBabel.buildUsing,\n useMethod: object._parallelBabel.useMethod,\n params: object._parallelBabel.params,\n };\n }\n}\n\nfunction buildBroccoli(parallelApiInfo: BroccoliParallelPlaceholder) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let requiredStuff = require(parallelApiInfo.requireFile);\n\n if (parallelApiInfo.useMethod) {\n if (requiredStuff[parallelApiInfo.useMethod] === undefined) {\n throw new Error(\n \"method '\" + parallelApiInfo.useMethod + \"' does not exist in file \" + parallelApiInfo.requireFile\n );\n }\n return requiredStuff[parallelApiInfo.useMethod];\n }\n\n if (parallelApiInfo.buildUsing) {\n if (typeof requiredStuff[parallelApiInfo.buildUsing] !== 'function') {\n throw new Error(\"'\" + parallelApiInfo.buildUsing + \"' is not a function in file \" + parallelApiInfo.requireFile);\n }\n return requiredStuff[parallelApiInfo.buildUsing](parallelApiInfo.params);\n }\n\n return requiredStuff;\n}\n\n// ember-cli-htmlbars-inline-precompile support ===\nfunction maybeHTMLBars(object: any): HTMLBarsParallelPlaceholder | undefined {\n const type = typeof object;\n const hasProperties = type === 'function' || (type === 'object' && object !== null);\n\n if (\n hasProperties &&\n object.parallelBabel !== null &&\n typeof object.parallelBabel === 'object' &&\n typeof object.parallelBabel.requireFile === 'string'\n ) {\n return {\n embroiderPlaceholder: true,\n type: 'htmlbars-parallel',\n requireFile: object.parallelBabel.requireFile,\n packageVersion: maybeNodeModuleVersion(object.parallelBabel.requireFile),\n buildUsing: String(object.parallelBabel.buildUsing),\n params: object.parallelBabel.params,\n };\n }\n}\n\nfunction buildHTMLBars(parallelApiInfo: HTMLBarsParallelPlaceholder) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n let requiredStuff = require(parallelApiInfo.requireFile);\n if (typeof requiredStuff[parallelApiInfo.buildUsing] !== 'function') {\n throw new Error(\"'\" + parallelApiInfo.buildUsing + \"' is not a function in file \" + parallelApiInfo.requireFile);\n }\n return requiredStuff[parallelApiInfo.buildUsing](parallelApiInfo.params);\n}\n\nfunction globalPlaceholder(value: any): { value: GlobalPlaceholder; isParallelSafe: false; needsHydrate: true } {\n let index = globalValues.length;\n globalValues.push(value);\n return {\n value: {\n embroiderPlaceholder: true,\n type: 'global',\n nonce,\n index,\n },\n isParallelSafe: false,\n needsHydrate: true,\n };\n}\n"]}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
-
};
|
|
8
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
-
};
|
|
13
|
-
var _ResolverLoader_resolver, _ResolverLoader_configFile, _ResolverLoader_watcher;
|
|
14
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
3
|
exports.ResolverLoader = void 0;
|
|
16
4
|
const fs_extra_1 = require("fs-extra");
|
|
@@ -20,29 +8,28 @@ const shared_internals_1 = require("@embroider/shared-internals");
|
|
|
20
8
|
const path_1 = require("path");
|
|
21
9
|
const fs_1 = require("fs");
|
|
22
10
|
class ResolverLoader {
|
|
11
|
+
appRoot;
|
|
12
|
+
#resolver;
|
|
13
|
+
#configFile;
|
|
14
|
+
#watcher;
|
|
23
15
|
constructor(appRoot, watch = false) {
|
|
24
16
|
this.appRoot = appRoot;
|
|
25
|
-
|
|
26
|
-
_ResolverLoader_configFile.set(this, void 0);
|
|
27
|
-
_ResolverLoader_watcher.set(this, void 0);
|
|
28
|
-
__classPrivateFieldSet(this, _ResolverLoader_configFile, (0, path_1.join)((0, shared_internals_1.locateEmbroiderWorkingDir)(this.appRoot), 'resolver.json'), "f");
|
|
17
|
+
this.#configFile = (0, path_1.join)((0, shared_internals_1.locateEmbroiderWorkingDir)(this.appRoot), 'resolver.json');
|
|
29
18
|
if (watch) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
})
|
|
19
|
+
this.#watcher = (0, fs_1.watch)(this.#configFile, { persistent: false }, () => {
|
|
20
|
+
this.#resolver = undefined;
|
|
21
|
+
});
|
|
33
22
|
}
|
|
34
23
|
}
|
|
35
24
|
close() {
|
|
36
|
-
|
|
37
|
-
(_a = __classPrivateFieldGet(this, _ResolverLoader_watcher, "f")) === null || _a === void 0 ? void 0 : _a.close();
|
|
25
|
+
this.#watcher?.close();
|
|
38
26
|
}
|
|
39
27
|
get resolver() {
|
|
40
|
-
|
|
41
|
-
if (!__classPrivateFieldGet(this, _ResolverLoader_resolver, "f")) {
|
|
28
|
+
if (!this.#resolver) {
|
|
42
29
|
let config;
|
|
43
|
-
if ((0, fs_extra_1.existsSync)(
|
|
44
|
-
let rawConfig = (0, fs_extra_1.readJSONSync)(
|
|
45
|
-
rawConfig.splitAtRoutes =
|
|
30
|
+
if ((0, fs_extra_1.existsSync)(this.#configFile)) {
|
|
31
|
+
let rawConfig = (0, fs_extra_1.readJSONSync)(this.#configFile);
|
|
32
|
+
rawConfig.splitAtRoutes = rawConfig.splitAtRoutes?.map((splitRouteConfig) => {
|
|
46
33
|
if (splitRouteConfig.type === 'regex') {
|
|
47
34
|
const fragments = splitRouteConfig.value.match(/^\/(.*)\/([gimsuy]*)$/);
|
|
48
35
|
if (!fragments) {
|
|
@@ -58,11 +45,10 @@ class ResolverLoader {
|
|
|
58
45
|
else {
|
|
59
46
|
config = (0, module_resolver_options_1.buildResolverOptions)({});
|
|
60
47
|
}
|
|
61
|
-
|
|
48
|
+
this.#resolver = new module_resolver_1.Resolver(config);
|
|
62
49
|
}
|
|
63
|
-
return
|
|
50
|
+
return this.#resolver;
|
|
64
51
|
}
|
|
65
52
|
}
|
|
66
53
|
exports.ResolverLoader = ResolverLoader;
|
|
67
|
-
_ResolverLoader_resolver = new WeakMap(), _ResolverLoader_configFile = new WeakMap(), _ResolverLoader_watcher = new WeakMap();
|
|
68
54
|
//# sourceMappingURL=resolver-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver-loader.js","sourceRoot":"","sources":["../../src/resolver-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver-loader.js","sourceRoot":"","sources":["../../src/resolver-loader.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AACpD,uEAA+E;AAC/E,uDAA6C;AAC7C,kEAAwE;AACxE,+BAA4B;AAE5B,2BAAsC;AAItC,MAAa,cAAc;IAKJ;IAJrB,SAAS,CAAuB;IAChC,WAAW,CAAS;IACpB,QAAQ,CAAwB;IAEhC,YAAqB,OAAe,EAAE,KAAK,GAAG,KAAK;QAA9B,YAAO,GAAP,OAAO,CAAQ;QAClC,IAAI,CAAC,WAAW,GAAG,IAAA,WAAI,EAAC,IAAA,4CAAyB,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;QAClF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,GAAG,IAAA,UAAO,EAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;gBACpE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,MAAe,CAAC;YACpB,IAAI,IAAA,qBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,IAAI,SAAS,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAE/C,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,gBAAsC,EAAE,EAAE;oBAChG,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;wBACxE,IAAI,CAAC,SAAS,EAAE,CAAC;4BACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;wBACrF,CAAC;wBACD,MAAM,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;wBACjD,OAAO,IAAI,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAChD,CAAC;oBACD,OAAO,gBAAgB,CAAC,KAAK,CAAC;gBAChC,CAAC,CAAC,CAAC;gBAEH,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAA,8CAAoB,EAAC,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,0BAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AA5CD,wCA4CC","sourcesContent":["import { existsSync, readJSONSync } from 'fs-extra';\nimport { buildResolverOptions, type Options } from './module-resolver-options';\nimport { Resolver } from './module-resolver';\nimport { locateEmbroiderWorkingDir } from '@embroider/shared-internals';\nimport { join } from 'path';\nimport type { FSWatcher } from 'fs';\nimport { watch as fsWatch } from 'fs';\n\ntype SplitRouteConfigType = { type: 'string'; value: string } | { type: 'regex'; value: string };\n\nexport class ResolverLoader {\n #resolver: Resolver | undefined;\n #configFile: string;\n #watcher: FSWatcher | undefined;\n\n constructor(readonly appRoot: string, watch = false) {\n this.#configFile = join(locateEmbroiderWorkingDir(this.appRoot), 'resolver.json');\n if (watch) {\n this.#watcher = fsWatch(this.#configFile, { persistent: false }, () => {\n this.#resolver = undefined;\n });\n }\n }\n\n close() {\n this.#watcher?.close();\n }\n\n get resolver(): Resolver {\n if (!this.#resolver) {\n let config: Options;\n if (existsSync(this.#configFile)) {\n let rawConfig = readJSONSync(this.#configFile);\n\n rawConfig.splitAtRoutes = rawConfig.splitAtRoutes?.map((splitRouteConfig: SplitRouteConfigType) => {\n if (splitRouteConfig.type === 'regex') {\n const fragments = splitRouteConfig.value.match(/^\\/(.*)\\/([gimsuy]*)$/);\n if (!fragments) {\n throw new Error(`Unable to parse splitAtRoutes pattern ${splitRouteConfig.value}`);\n }\n const [, parsedPattern, parsedFlags] = fragments;\n return new RegExp(parsedPattern, parsedFlags);\n }\n return splitRouteConfig.value;\n });\n\n config = rawConfig;\n } else {\n config = buildResolverOptions({});\n }\n this.#resolver = new Resolver(config);\n }\n return this.#resolver;\n }\n}\n"]}
|
|
@@ -124,7 +124,7 @@ function hasDepsWithImplicitModules(pkg, type) {
|
|
|
124
124
|
function renderImplicitModules({ type, fromFile }, resolver) {
|
|
125
125
|
let resolvableExtensionsPattern = (0, _1.extensionsPattern)(resolver.options.resolvableExtensions);
|
|
126
126
|
const pkg = resolver.packageCache.ownerOfFile(fromFile);
|
|
127
|
-
if (!
|
|
127
|
+
if (!pkg?.isV2Ember()) {
|
|
128
128
|
throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);
|
|
129
129
|
}
|
|
130
130
|
let ownModules = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-content.js","sourceRoot":"","sources":["../../src/virtual-content.ts"],"names":[],"mappings":"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","sourcesContent":["import { posix, sep, join } from 'path';\nimport type { Resolver, AddonPackage, Package } from '.';\nimport { extensionsPattern, syntheticJStoHBS, templateOnlyComponentSource } from '.';\nimport { compile } from './js-handlebars';\nimport { renderImplicitTestScripts, type TestSupportResponse } from './virtual-test-support';\nimport { renderTestSupportStyles, type TestSupportStylesResponse } from './virtual-test-support-styles';\nimport { renderVendor, type VirtualVendorResponse } from './virtual-vendor';\nimport { renderVendorStyles, type VirtualVendorStylesResponse } from './virtual-vendor-styles';\n\nimport { type EntrypointResponse, renderEntrypoint } from './virtual-entrypoint';\nimport { renderRouteEntrypoint, type RouteEntrypointResponse } from './virtual-route-entrypoint';\nimport assertNever from 'assert-never';\n\nexport type VirtualResponse = { specifier: string } & (\n | FastbootSwitchResponse\n | ImplicitModulesResponse\n | EntrypointResponse\n | RouteEntrypointResponse\n | TestSupportResponse\n | TestSupportStylesResponse\n | VirtualVendorResponse\n | VirtualVendorStylesResponse\n | VirtualPairResponse\n | TemplateOnlyComponentResponse\n);\n\nexport interface VirtualContentResult {\n src: string;\n watches: string[];\n}\n\n// Given a filename that was passed to your ModuleRequest's `virtualize()`,\n// this produces the corresponding contents. It's a static, stateless function\n// because we recognize that that process that did resolution might not be the\n// same one that loads the content.\nexport function virtualContent(response: VirtualResponse, resolver: Resolver): VirtualContentResult {\n switch (response.type) {\n case 'entrypoint':\n return renderEntrypoint(resolver, response);\n case 'vendor-js':\n return renderVendor(response, resolver);\n case 'vendor-css':\n return renderVendorStyles(response, resolver);\n case 'test-support-css':\n return renderTestSupportStyles(response, resolver);\n case 'test-support-js':\n return renderImplicitTestScripts(response, resolver);\n case 'component-pair':\n return pairedComponentShim(response);\n case 'implicit-modules':\n case 'implicit-test-modules':\n return renderImplicitModules(response, resolver);\n case 'route-entrypoint':\n return renderRouteEntrypoint(response, resolver);\n case 'fastboot-switch':\n return renderFastbootSwitchTemplate(response);\n case 'template-only-component-js':\n return renderTemplateOnlyComponent(response);\n default:\n throw assertNever(response);\n }\n}\n\ninterface PairedComponentShimParams {\n hbsModule: string;\n jsModule: string | null;\n debugName: string;\n}\n\nfunction pairedComponentShim(params: PairedComponentShimParams): VirtualContentResult {\n return {\n src: pairedComponentShimTemplate(params),\n watches: [],\n };\n}\n\nconst pairedComponentShimTemplate = compile(`\nimport { setComponentTemplate } from \"@ember/component\";\nimport template from \"{{{js-string-escape hbsModule}}}\";\nimport { deprecate } from \"@ember/debug\";\n\n\ndeprecate(\"Components with separately resolved templates are deprecated. Migrate to either co-located js/ts + hbs files or to gjs/gts. Tried to lookup '{{debugName}}'.\",\n false, {\n id: 'component-template-resolving',\n url: 'https://deprecations.emberjs.com/id/component-template-resolving',\n until: '6.0.0',\n for: 'ember-source',\n since: {\n available: '5.10.0',\n enabled: '5.10.0',\n },\n }\n);\n\n{{#if jsModule}}\nimport component from \"{{{js-string-escape jsModule}}}\";\nexport default setComponentTemplate(template, component);\n{{else}}\nimport templateOnlyComponent from \"@ember/component/template-only\";\nexport default setComponentTemplate(template, templateOnlyComponent(undefined, \"{{{js-string-escape debugName}}}\"));\n{{/if}}\n`) as (params: PairedComponentShimParams) => string;\n\nexport interface VirtualPairResponse {\n type: 'component-pair';\n specifier: string;\n hbsModule: string;\n jsModule: string | null;\n debugName: string;\n}\n\ninterface FastbootSwitchResponse {\n type: 'fastboot-switch';\n names: Set<string>;\n}\n\nfunction renderFastbootSwitchTemplate(params: FastbootSwitchResponse): VirtualContentResult {\n return {\n src: fastbootSwitchTemplate({\n names: [...params.names].filter(name => name !== 'default'),\n hasDefaultExport: params.names.has('default'),\n }),\n watches: [],\n };\n}\n\nconst fastbootSwitchTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync('./fastboot');\n} else {\n mod = importSync('./browser');\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: { names: string[]; hasDefaultExport: boolean }) => string;\n\nexport interface ImplicitModulesResponse {\n type: 'implicit-modules' | 'implicit-test-modules';\n fromFile: string;\n}\n\nfunction hasDepsWithImplicitModules(pkg: Package, type: 'implicit-modules' | 'implicit-test-modules'): boolean {\n for (let dep of pkg.dependencies) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon. We ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (!dep.isV2Addon() || pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n let implicitModules = dep.meta[type];\n if (implicitModules && implicitModules.length > 0) {\n return true;\n }\n if (hasDepsWithImplicitModules(dep, type)) {\n return true;\n }\n }\n return false;\n}\n\nfunction renderImplicitModules({ type, fromFile }: ImplicitModulesResponse, resolver: Resolver): VirtualContentResult {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n\n const pkg = resolver.packageCache.ownerOfFile(fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);\n }\n\n let ownModules: { runtime: string; buildtime: string }[] = [];\n let dependencyModules: string[] = [];\n\n let deps = pkg.dependencies.sort(orderAddons);\n\n for (let dep of deps) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon.\n if (!dep.isV2Addon()) {\n continue;\n }\n\n // we ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n\n let implicitModules = dep.meta[type];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(dep.meta, resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = dep.name;\n\n let renamedMeta = dep.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === dep.name) {\n packageName = key;\n }\n });\n }\n\n let runtime = join(packageName, name).replace(resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n ownModules.push({\n runtime,\n buildtime: posix.join(packageName, name),\n });\n }\n }\n // we don't recurse across an engine boundary. Engines import their own\n // implicit-modules.\n if (!dep.isEngine() && hasDepsWithImplicitModules(dep, type)) {\n dependencyModules.push(posix.join(dep.name, `-embroider-${type}.js`));\n }\n }\n return { src: implicitModulesTemplate({ ownModules, dependencyModules }), watches: [] };\n}\n\nconst implicitModulesTemplate = compile(`\n\n\n{{#each dependencyModules as |module index|}}\n import dep{{index}} from \"{{js-string-escape module}}\";\n{{/each}}\n\n{{#each ownModules as |module index|}}\n import * as own{{index}} from \"{{js-string-escape module.buildtime}}\";\n{{/each}}\n\nexport default Object.assign({},\n {{#each dependencyModules as |module index|}}\n dep{{index}},\n {{/each}}\n {\n {{#each ownModules as |module index|}}\n \"{{js-string-escape module.runtime}}\": own{{index}},\n {{/each}}\n }\n);\n`) as (params: { dependencyModules: string[]; ownModules: { runtime: string; buildtime: string }[] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n}\n\nexport interface TemplateOnlyComponentResponse {\n type: 'template-only-component-js';\n specifier: string;\n}\n\nfunction renderTemplateOnlyComponent({ specifier }: TemplateOnlyComponentResponse): VirtualContentResult {\n let watches = [specifier];\n let hbs = syntheticJStoHBS(specifier);\n if (hbs) {\n watches.push(hbs);\n }\n return { src: templateOnlyComponentSource(), watches };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"virtual-content.js","sourceRoot":"","sources":["../../src/virtual-content.ts"],"names":[],"mappings":";;;;;AAmCA,wCA0BC;AA7DD,+BAAwC;AAExC,wBAAqF;AACrF,mDAA0C;AAC1C,iEAA6F;AAC7F,+EAAwG;AACxG,qDAA4E;AAC5E,mEAA+F;AAE/F,6DAAiF;AACjF,yEAAiG;AACjG,gEAAuC;AAoBvC,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,mCAAmC;AACnC,SAAgB,cAAc,CAAC,QAAyB,EAAE,QAAkB;IAC1E,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,YAAY;YACf,OAAO,IAAA,qCAAgB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,IAAA,6BAAY,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,KAAK,YAAY;YACf,OAAO,IAAA,0CAAkB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,KAAK,kBAAkB;YACrB,OAAO,IAAA,qDAAuB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,KAAK,iBAAiB;YACpB,OAAO,IAAA,gDAAyB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvD,KAAK,gBAAgB;YACnB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,kBAAkB,CAAC;QACxB,KAAK,uBAAuB;YAC1B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,KAAK,kBAAkB;YACrB,OAAO,IAAA,gDAAqB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,KAAK,iBAAiB;YACpB,OAAO,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAChD,KAAK,4BAA4B;YAC/B,OAAO,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC/C;YACE,MAAM,IAAA,sBAAW,EAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAQD,SAAS,mBAAmB,CAAC,MAAiC;IAC5D,OAAO;QACL,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC;QACxC,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,2BAA2B,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B3C,CAAkD,CAAC;AAepD,SAAS,4BAA4B,CAAC,MAA8B;IAClE,OAAO;QACL,GAAG,EAAE,sBAAsB,CAAC;YAC1B,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;YAC3D,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;SAC9C,CAAC;QACF,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;CActC,CAAuE,CAAC;AAOzE,SAAS,0BAA0B,CAAC,GAAY,EAAE,IAAkD;IAClG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACjC,wEAAwE;QACxE,2EAA2E;QAC3E,qEAAqE;QACrE,iCAAiC;QACjC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE,CAAC;YAClF,SAAS;QACX,CAAC;QACD,IAAI,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAA2B,EAAE,QAAkB;IAC5F,IAAI,2BAA2B,GAAG,IAAA,oBAAiB,EAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3F,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oEAAoE,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,UAAU,GAA6C,EAAE,CAAC;IAC9D,IAAI,iBAAiB,GAAa,EAAE,CAAC;IAErC,IAAI,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE9C,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,wEAAwE;QACxE,SAAS;QACT,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QAED,oEAAoE;QACpE,qEAAqE;QACrE,iCAAiC;QACjC,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,IAAI,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAClF,KAAK,IAAI,IAAI,IAAI,eAAe,EAAE,CAAC;gBACjC,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;gBAE3B,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC/C,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACnD,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;4BACvB,WAAW,GAAG,GAAG,CAAC;wBACpB,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,OAAO,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAC/E,IAAI,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,cAAc,IAAI,cAAc,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC1D,OAAO,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC;oBACd,OAAO;oBACP,SAAS,EAAE,YAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;iBACzC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,uEAAuE;QACvE,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,iBAAiB,CAAC,IAAI,CAAC,YAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,uBAAuB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC1F,CAAC;AAED,MAAM,uBAAuB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;CAqBvC,CAA8G,CAAC;AAEhH,8EAA8E;AAC9E,+EAA+E;AAC/E,0BAA0B;AAC1B,SAAS,qBAAqB,CAAC,IAA0B,EAAE,UAAkB;IAC3E,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,QAAQ,GAAG,EAAgC,CAAC;QAChD,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,IAAa;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,GAAG,OAAO,CAAC;AAC3B,CAAC;AAOD,SAAS,2BAA2B,CAAC,EAAE,SAAS,EAAiC;IAC/E,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,IAAI,GAAG,GAAG,IAAA,mBAAgB,EAAC,SAAS,CAAC,CAAC;IACtC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAA,8BAA2B,GAAE,EAAE,OAAO,EAAE,CAAC;AACzD,CAAC","sourcesContent":["import { posix, sep, join } from 'path';\nimport type { Resolver, AddonPackage, Package } from '.';\nimport { extensionsPattern, syntheticJStoHBS, templateOnlyComponentSource } from '.';\nimport { compile } from './js-handlebars';\nimport { renderImplicitTestScripts, type TestSupportResponse } from './virtual-test-support';\nimport { renderTestSupportStyles, type TestSupportStylesResponse } from './virtual-test-support-styles';\nimport { renderVendor, type VirtualVendorResponse } from './virtual-vendor';\nimport { renderVendorStyles, type VirtualVendorStylesResponse } from './virtual-vendor-styles';\n\nimport { type EntrypointResponse, renderEntrypoint } from './virtual-entrypoint';\nimport { renderRouteEntrypoint, type RouteEntrypointResponse } from './virtual-route-entrypoint';\nimport assertNever from 'assert-never';\n\nexport type VirtualResponse = { specifier: string } & (\n | FastbootSwitchResponse\n | ImplicitModulesResponse\n | EntrypointResponse\n | RouteEntrypointResponse\n | TestSupportResponse\n | TestSupportStylesResponse\n | VirtualVendorResponse\n | VirtualVendorStylesResponse\n | VirtualPairResponse\n | TemplateOnlyComponentResponse\n);\n\nexport interface VirtualContentResult {\n src: string;\n watches: string[];\n}\n\n// Given a filename that was passed to your ModuleRequest's `virtualize()`,\n// this produces the corresponding contents. It's a static, stateless function\n// because we recognize that that process that did resolution might not be the\n// same one that loads the content.\nexport function virtualContent(response: VirtualResponse, resolver: Resolver): VirtualContentResult {\n switch (response.type) {\n case 'entrypoint':\n return renderEntrypoint(resolver, response);\n case 'vendor-js':\n return renderVendor(response, resolver);\n case 'vendor-css':\n return renderVendorStyles(response, resolver);\n case 'test-support-css':\n return renderTestSupportStyles(response, resolver);\n case 'test-support-js':\n return renderImplicitTestScripts(response, resolver);\n case 'component-pair':\n return pairedComponentShim(response);\n case 'implicit-modules':\n case 'implicit-test-modules':\n return renderImplicitModules(response, resolver);\n case 'route-entrypoint':\n return renderRouteEntrypoint(response, resolver);\n case 'fastboot-switch':\n return renderFastbootSwitchTemplate(response);\n case 'template-only-component-js':\n return renderTemplateOnlyComponent(response);\n default:\n throw assertNever(response);\n }\n}\n\ninterface PairedComponentShimParams {\n hbsModule: string;\n jsModule: string | null;\n debugName: string;\n}\n\nfunction pairedComponentShim(params: PairedComponentShimParams): VirtualContentResult {\n return {\n src: pairedComponentShimTemplate(params),\n watches: [],\n };\n}\n\nconst pairedComponentShimTemplate = compile(`\nimport { setComponentTemplate } from \"@ember/component\";\nimport template from \"{{{js-string-escape hbsModule}}}\";\nimport { deprecate } from \"@ember/debug\";\n\n\ndeprecate(\"Components with separately resolved templates are deprecated. Migrate to either co-located js/ts + hbs files or to gjs/gts. Tried to lookup '{{debugName}}'.\",\n false, {\n id: 'component-template-resolving',\n url: 'https://deprecations.emberjs.com/id/component-template-resolving',\n until: '6.0.0',\n for: 'ember-source',\n since: {\n available: '5.10.0',\n enabled: '5.10.0',\n },\n }\n);\n\n{{#if jsModule}}\nimport component from \"{{{js-string-escape jsModule}}}\";\nexport default setComponentTemplate(template, component);\n{{else}}\nimport templateOnlyComponent from \"@ember/component/template-only\";\nexport default setComponentTemplate(template, templateOnlyComponent(undefined, \"{{{js-string-escape debugName}}}\"));\n{{/if}}\n`) as (params: PairedComponentShimParams) => string;\n\nexport interface VirtualPairResponse {\n type: 'component-pair';\n specifier: string;\n hbsModule: string;\n jsModule: string | null;\n debugName: string;\n}\n\ninterface FastbootSwitchResponse {\n type: 'fastboot-switch';\n names: Set<string>;\n}\n\nfunction renderFastbootSwitchTemplate(params: FastbootSwitchResponse): VirtualContentResult {\n return {\n src: fastbootSwitchTemplate({\n names: [...params.names].filter(name => name !== 'default'),\n hasDefaultExport: params.names.has('default'),\n }),\n watches: [],\n };\n}\n\nconst fastbootSwitchTemplate = compile(`\nimport { macroCondition, getGlobalConfig, importSync } from '@embroider/macros';\nlet mod;\nif (macroCondition(getGlobalConfig().fastboot?.isRunning)){\n mod = importSync('./fastboot');\n} else {\n mod = importSync('./browser');\n}\n{{#if hasDefaultExport}}\nexport default mod.default;\n{{/if}}\n{{#each names as |name|}}\nexport const {{name}} = mod.{{name}};\n{{/each}}\n`) as (params: { names: string[]; hasDefaultExport: boolean }) => string;\n\nexport interface ImplicitModulesResponse {\n type: 'implicit-modules' | 'implicit-test-modules';\n fromFile: string;\n}\n\nfunction hasDepsWithImplicitModules(pkg: Package, type: 'implicit-modules' | 'implicit-test-modules'): boolean {\n for (let dep of pkg.dependencies) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon. We ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (!dep.isV2Addon() || pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n let implicitModules = dep.meta[type];\n if (implicitModules && implicitModules.length > 0) {\n return true;\n }\n if (hasDepsWithImplicitModules(dep, type)) {\n return true;\n }\n }\n return false;\n}\n\nfunction renderImplicitModules({ type, fromFile }: ImplicitModulesResponse, resolver: Resolver): VirtualContentResult {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n\n const pkg = resolver.packageCache.ownerOfFile(fromFile);\n if (!pkg?.isV2Ember()) {\n throw new Error(`bug: saw special implicit modules import in non-ember package at ${fromFile}`);\n }\n\n let ownModules: { runtime: string; buildtime: string }[] = [];\n let dependencyModules: string[] = [];\n\n let deps = pkg.dependencies.sort(orderAddons);\n\n for (let dep of deps) {\n // anything that isn't a v2 ember package by this point is not an active\n // addon.\n if (!dep.isV2Addon()) {\n continue;\n }\n\n // we ignore peerDependencies here because classic ember-cli ignores\n // peerDependencies here, and we're implementing the implicit-modules\n // backward-comptibility feature.\n if (pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n continue;\n }\n\n let implicitModules = dep.meta[type];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(dep.meta, resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = dep.name;\n\n let renamedMeta = dep.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === dep.name) {\n packageName = key;\n }\n });\n }\n\n let runtime = join(packageName, name).replace(resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n ownModules.push({\n runtime,\n buildtime: posix.join(packageName, name),\n });\n }\n }\n // we don't recurse across an engine boundary. Engines import their own\n // implicit-modules.\n if (!dep.isEngine() && hasDepsWithImplicitModules(dep, type)) {\n dependencyModules.push(posix.join(dep.name, `-embroider-${type}.js`));\n }\n }\n return { src: implicitModulesTemplate({ ownModules, dependencyModules }), watches: [] };\n}\n\nconst implicitModulesTemplate = compile(`\n\n\n{{#each dependencyModules as |module index|}}\n import dep{{index}} from \"{{js-string-escape module}}\";\n{{/each}}\n\n{{#each ownModules as |module index|}}\n import * as own{{index}} from \"{{js-string-escape module.buildtime}}\";\n{{/each}}\n\nexport default Object.assign({},\n {{#each dependencyModules as |module index|}}\n dep{{index}},\n {{/each}}\n {\n {{#each ownModules as |module index|}}\n \"{{js-string-escape module.runtime}}\": own{{index}},\n {{/each}}\n }\n);\n`) as (params: { dependencyModules: string[]; ownModules: { runtime: string; buildtime: string }[] }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n}\n\nexport interface TemplateOnlyComponentResponse {\n type: 'template-only-component-js';\n specifier: string;\n}\n\nfunction renderTemplateOnlyComponent({ specifier }: TemplateOnlyComponentResponse): VirtualContentResult {\n let watches = [specifier];\n let hbs = syntheticJStoHBS(specifier);\n if (hbs) {\n watches.push(hbs);\n }\n return { src: templateOnlyComponentSource(), watches };\n}\n"]}
|
|
@@ -24,13 +24,12 @@ function staticAppPathsPattern(staticAppPaths) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
function renderEntrypoint(resolver, { fromDir }) {
|
|
27
|
-
var _a;
|
|
28
27
|
const owner = resolver.packageCache.ownerOfFile(fromDir);
|
|
29
28
|
if (!owner) {
|
|
30
29
|
throw new Error('Owner expected'); // ToDo: Really bad error, update message
|
|
31
30
|
}
|
|
32
31
|
let engine = resolver.owningEngine(owner);
|
|
33
|
-
let isApp =
|
|
32
|
+
let isApp = owner?.root === resolver.options.engines[0].root;
|
|
34
33
|
let hasFastboot = Boolean(resolver.options.engines[0].activeAddons.find(a => a.name === 'ember-cli-fastboot'));
|
|
35
34
|
let defineModulesFrom = ['./-embroider-implicit-modules.js'];
|
|
36
35
|
let appFiles = new app_files_1.AppFiles({
|
|
@@ -48,7 +47,7 @@ function renderEntrypoint(resolver, { fromDir }) {
|
|
|
48
47
|
* resolver.options is reporting an incorrect type here, but I have verified this programatically that this
|
|
49
48
|
* is the right shape here and tests fail if it is wrong anyway
|
|
50
49
|
*/
|
|
51
|
-
let options =
|
|
50
|
+
let options = resolver.options.options ?? (0, options_1.optionsWithDefaults)();
|
|
52
51
|
let requiredAppFiles = [appFiles.otherAppFiles];
|
|
53
52
|
if (!options.staticInvokables) {
|
|
54
53
|
requiredAppFiles.push(appFiles.components);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-entrypoint.js","sourceRoot":"","sources":["../../src/virtual-entrypoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppFiles, type RouteFiles } from './app-files';\nimport { compile } from './js-handlebars';\nimport type { Resolver } from './module-resolver';\nimport { flatten, partition } from 'lodash';\nimport { join } from 'path';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport walkSync from 'walk-sync';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport escapeRegExp from 'escape-string-regexp';\nimport { optionsWithDefaults } from './options';\nimport { resolvableExtensions } from './resolvable-extensions';\n\nexport interface EntrypointResponse {\n type: 'entrypoint';\n fromDir: string;\n specifier: string;\n}\n\nexport function staticAppPathsPattern(staticAppPaths: string[] | undefined): RegExp | undefined {\n if (staticAppPaths && staticAppPaths.length > 0) {\n return new RegExp('^(?:' + staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath)).join('|') + ')(?:$|/)');\n }\n}\n\nexport function renderEntrypoint(\n resolver: Resolver,\n { fromDir }: { fromDir: string }\n): { src: string; watches: string[] } {\n const owner = resolver.packageCache.ownerOfFile(fromDir);\n\n if (!owner) {\n throw new Error('Owner expected'); // ToDo: Really bad error, update message\n }\n\n let engine = resolver.owningEngine(owner);\n let isApp = owner?.root === resolver.options.engines[0]!.root;\n let hasFastboot = Boolean(resolver.options.engines[0]!.activeAddons.find(a => a.name === 'ember-cli-fastboot'));\n let defineModulesFrom = ['./-embroider-implicit-modules.js'];\n\n let appFiles = new AppFiles(\n {\n package: owner,\n addons: new Map(\n engine.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp,\n modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(fromDir),\n hasFastboot ? getFastbootFiles(owner.root) : new Set(),\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n /**\n * we are only reading staticInvokables off this type so I'm setting the type manually here. I don't know why\n * resolver.options is reporting an incorrect type here, but I have verified this programatically that this\n * is the right shape here and tests fail if it is wrong anyway\n */\n let options =\n (resolver.options as unknown as { options: { staticInvokables: boolean } }).options ?? optionsWithDefaults();\n\n let requiredAppFiles = [appFiles.otherAppFiles];\n if (!options.staticInvokables) {\n requiredAppFiles.push(appFiles.components);\n requiredAppFiles.push(appFiles.helpers);\n requiredAppFiles.push(appFiles.modifiers);\n }\n\n let styles = [];\n // only import styles from engines with a parent (this excludeds the parent application) as their styles\n // will be inserted via a direct <link> tag.\n if (!appFiles.engine.isApp && appFiles.engine.package.isLazyEngine()) {\n styles.push({\n path: '@embroider/virtual/vendor.css',\n });\n }\n\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n splitRoute(\n routeName,\n routeFiles,\n resolver.options.splitAtRoutes,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[]) => {\n lazyRoutes.push({\n names: routeNames,\n path: `@embroider/core/route/${encodeURIComponent(routeNames[0])}`,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n\n let amdModules = nonFastboot.map(file => importPaths(resolver, appFiles, file));\n let fastbootOnlyAmdModules = fastboot.map(file => importPaths(resolver, appFiles, file));\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n\n if (isApp) {\n // deliberately ignoring the app (which is the first entry in the engines array)\n let [, ...childEngines] = resolver.options.engines;\n for (let childEngine of childEngines) {\n if (childEngine.isLazy) {\n lazyEngines.push({\n names: [childEngine.packageName],\n path: `${childEngine.packageName}/engine`,\n });\n } else {\n amdModules.push({\n buildtime: `${childEngine.packageName}/engine`,\n runtime: `${childEngine.packageName}/engine`,\n });\n }\n }\n }\n\n let params = {\n amdModules,\n fastbootOnlyAmdModules,\n lazyRoutes,\n lazyEngines,\n styles,\n // this is a backward-compatibility feature: addons can force inclusion of modules.\n defineModulesFrom,\n };\n return {\n src: entryTemplate(params),\n watches: [fromDir],\n };\n}\n\nconst entryTemplate = compile(`\nimport { macroCondition, getGlobalConfig } from '@embroider/macros';\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n await import(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each defineModulesFrom as |module index| ~}}\n import defineModule{{index}} from \"{{js-string-escape module}}\";\n{{/each}}\n\n{{#each amdModules as |amdModule index| ~}}\n import * as amdModule{{index}} from \"{{js-string-escape amdModule.buildtime}}\"\n{{/each}}\n\nlet exportFastbootModules = {};\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n let fastbootModules = {};\n\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n fastbootModules[\"{{js-string-escape amdModule.runtime}}\"] = import(\"{{js-string-escape amdModule.buildtime}}\");\n {{/each}}\n\n const resolvedValues = await Promise.all(Object.values(fastbootModules));\n\n Object.keys(fastbootModules).forEach((k, i) => {\n exportFasbootModules[k] = resolvedValues[i];\n })\n }\n{{/if}}\n\n\n{{#if lazyRoutes}}\nwindow._embroiderRouteBundles_ = [\n {{#each lazyRoutes as |route|}}\n {\n names: {{json-stringify route.names}},\n load: function() {\n return import(\"{{js-string-escape route.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if lazyEngines}}\nwindow._embroiderEngineBundles_ = [\n {{#each lazyEngines as |engine|}}\n {\n names: {{json-stringify engine.names}},\n load: function() {\n return import(\"{{js-string-escape engine.path}}\").then(m=> ({ default: { \"{{engine.path}}\": m.default } }));;\n }\n },\n {{/each}}\n]\n{{/if}}\n\nexport default Object.assign(\n {},\n {{#each defineModulesFrom as |module index| ~}}\n defineModule{{index}},\n {{/each}}\n {\n {{#each amdModules as |amdModule index| ~}}\n \"{{js-string-escape amdModule.runtime}}\": amdModule{{index}},\n {{/each}}\n },\n exportFastbootModules\n);\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n defineModulesFrom: string[];\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nfunction excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\nexport function importPaths(resolver: Resolver, { engine }: AppFiles, engineRelativePath: string) {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n let noHBS = engineRelativePath.replace(resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: `./${engineRelativePath}`,\n };\n}\n\nexport function splitRoute(\n routeName: string,\n files: RouteFiles,\n splitAtRoutes: (RegExp | string)[] | undefined,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n) {\n let shouldSplit = routeName && shouldSplitRoute(routeName, splitAtRoutes);\n let ownFiles = [];\n let ownNames = new Set() as Set<string>;\n\n if (files.template) {\n if (shouldSplit) {\n ownFiles.push(files.template);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.template);\n }\n }\n\n if (files.controller) {\n if (shouldSplit) {\n ownFiles.push(files.controller);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.controller);\n }\n }\n\n if (files.route) {\n if (shouldSplit) {\n ownFiles.push(files.route);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.route);\n }\n }\n\n for (let [childName, childFiles] of files.children) {\n splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n splitAtRoutes,\n (childRouteName: string, childFile: string) => {\n // this is our child calling \"addToParent\"\n if (shouldSplit) {\n ownFiles.push(childFile);\n ownNames.add(childRouteName);\n } else {\n addToParent(childRouteName, childFile);\n }\n },\n (routeNames: string[], files: string[]) => {\n addLazyBundle(routeNames, files);\n }\n );\n }\n\n if (ownFiles.length > 0) {\n addLazyBundle([...ownNames], ownFiles);\n }\n}\n\nfunction shouldSplitRoute(routeName: string, splitAtRoutes: (RegExp | string)[] | undefined) {\n if (!splitAtRoutes) {\n return false;\n }\n return splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n });\n}\n\nexport function getAppFiles(appRoot: string): Set<string> {\n const files: string[] = walkSync(appRoot, {\n ignore: [\n '_babel_filter_.js',\n ...resolvableExtensions().map(ext => `app${ext}`),\n ...resolvableExtensions().map(ext => `engine${ext}`),\n 'assets',\n ...resolvableExtensions().map(ext => `testem${ext}`),\n 'node_modules',\n ],\n });\n return new Set(files);\n}\n\nexport function getFastbootFiles(appRoot: string): Set<string> {\n const appDirPath = join(appRoot, '_fastboot_');\n const files: string[] = walkSync(appDirPath);\n return new Set(files);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"virtual-entrypoint.js","sourceRoot":"","sources":["../../src/virtual-entrypoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppFiles, type RouteFiles } from './app-files';\nimport { compile } from './js-handlebars';\nimport type { Resolver } from './module-resolver';\nimport { flatten, partition } from 'lodash';\nimport { join } from 'path';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport walkSync from 'walk-sync';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport escapeRegExp from 'escape-string-regexp';\nimport { optionsWithDefaults } from './options';\nimport { resolvableExtensions } from './resolvable-extensions';\n\nexport interface EntrypointResponse {\n type: 'entrypoint';\n fromDir: string;\n specifier: string;\n}\n\nexport function staticAppPathsPattern(staticAppPaths: string[] | undefined): RegExp | undefined {\n if (staticAppPaths && staticAppPaths.length > 0) {\n return new RegExp('^(?:' + staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath)).join('|') + ')(?:$|/)');\n }\n}\n\nexport function renderEntrypoint(\n resolver: Resolver,\n { fromDir }: { fromDir: string }\n): { src: string; watches: string[] } {\n const owner = resolver.packageCache.ownerOfFile(fromDir);\n\n if (!owner) {\n throw new Error('Owner expected'); // ToDo: Really bad error, update message\n }\n\n let engine = resolver.owningEngine(owner);\n let isApp = owner?.root === resolver.options.engines[0]!.root;\n let hasFastboot = Boolean(resolver.options.engines[0]!.activeAddons.find(a => a.name === 'ember-cli-fastboot'));\n let defineModulesFrom = ['./-embroider-implicit-modules.js'];\n\n let appFiles = new AppFiles(\n {\n package: owner,\n addons: new Map(\n engine.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp,\n modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(fromDir),\n hasFastboot ? getFastbootFiles(owner.root) : new Set(),\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n /**\n * we are only reading staticInvokables off this type so I'm setting the type manually here. I don't know why\n * resolver.options is reporting an incorrect type here, but I have verified this programatically that this\n * is the right shape here and tests fail if it is wrong anyway\n */\n let options =\n (resolver.options as unknown as { options: { staticInvokables: boolean } }).options ?? optionsWithDefaults();\n\n let requiredAppFiles = [appFiles.otherAppFiles];\n if (!options.staticInvokables) {\n requiredAppFiles.push(appFiles.components);\n requiredAppFiles.push(appFiles.helpers);\n requiredAppFiles.push(appFiles.modifiers);\n }\n\n let styles = [];\n // only import styles from engines with a parent (this excludeds the parent application) as their styles\n // will be inserted via a direct <link> tag.\n if (!appFiles.engine.isApp && appFiles.engine.package.isLazyEngine()) {\n styles.push({\n path: '@embroider/virtual/vendor.css',\n });\n }\n\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n splitRoute(\n routeName,\n routeFiles,\n resolver.options.splitAtRoutes,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[]) => {\n lazyRoutes.push({\n names: routeNames,\n path: `@embroider/core/route/${encodeURIComponent(routeNames[0])}`,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n\n let amdModules = nonFastboot.map(file => importPaths(resolver, appFiles, file));\n let fastbootOnlyAmdModules = fastboot.map(file => importPaths(resolver, appFiles, file));\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n\n if (isApp) {\n // deliberately ignoring the app (which is the first entry in the engines array)\n let [, ...childEngines] = resolver.options.engines;\n for (let childEngine of childEngines) {\n if (childEngine.isLazy) {\n lazyEngines.push({\n names: [childEngine.packageName],\n path: `${childEngine.packageName}/engine`,\n });\n } else {\n amdModules.push({\n buildtime: `${childEngine.packageName}/engine`,\n runtime: `${childEngine.packageName}/engine`,\n });\n }\n }\n }\n\n let params = {\n amdModules,\n fastbootOnlyAmdModules,\n lazyRoutes,\n lazyEngines,\n styles,\n // this is a backward-compatibility feature: addons can force inclusion of modules.\n defineModulesFrom,\n };\n return {\n src: entryTemplate(params),\n watches: [fromDir],\n };\n}\n\nconst entryTemplate = compile(`\nimport { macroCondition, getGlobalConfig } from '@embroider/macros';\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n await import(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each defineModulesFrom as |module index| ~}}\n import defineModule{{index}} from \"{{js-string-escape module}}\";\n{{/each}}\n\n{{#each amdModules as |amdModule index| ~}}\n import * as amdModule{{index}} from \"{{js-string-escape amdModule.buildtime}}\"\n{{/each}}\n\nlet exportFastbootModules = {};\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n let fastbootModules = {};\n\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n fastbootModules[\"{{js-string-escape amdModule.runtime}}\"] = import(\"{{js-string-escape amdModule.buildtime}}\");\n {{/each}}\n\n const resolvedValues = await Promise.all(Object.values(fastbootModules));\n\n Object.keys(fastbootModules).forEach((k, i) => {\n exportFasbootModules[k] = resolvedValues[i];\n })\n }\n{{/if}}\n\n\n{{#if lazyRoutes}}\nwindow._embroiderRouteBundles_ = [\n {{#each lazyRoutes as |route|}}\n {\n names: {{json-stringify route.names}},\n load: function() {\n return import(\"{{js-string-escape route.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if lazyEngines}}\nwindow._embroiderEngineBundles_ = [\n {{#each lazyEngines as |engine|}}\n {\n names: {{json-stringify engine.names}},\n load: function() {\n return import(\"{{js-string-escape engine.path}}\").then(m=> ({ default: { \"{{engine.path}}\": m.default } }));;\n }\n },\n {{/each}}\n]\n{{/if}}\n\nexport default Object.assign(\n {},\n {{#each defineModulesFrom as |module index| ~}}\n defineModule{{index}},\n {{/each}}\n {\n {{#each amdModules as |amdModule index| ~}}\n \"{{js-string-escape amdModule.runtime}}\": amdModule{{index}},\n {{/each}}\n },\n exportFastbootModules\n);\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n defineModulesFrom: string[];\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nfunction excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\nexport function importPaths(resolver: Resolver, { engine }: AppFiles, engineRelativePath: string) {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n let noHBS = engineRelativePath.replace(resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: `./${engineRelativePath}`,\n };\n}\n\nexport function splitRoute(\n routeName: string,\n files: RouteFiles,\n splitAtRoutes: (RegExp | string)[] | undefined,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n) {\n let shouldSplit = routeName && shouldSplitRoute(routeName, splitAtRoutes);\n let ownFiles = [];\n let ownNames = new Set() as Set<string>;\n\n if (files.template) {\n if (shouldSplit) {\n ownFiles.push(files.template);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.template);\n }\n }\n\n if (files.controller) {\n if (shouldSplit) {\n ownFiles.push(files.controller);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.controller);\n }\n }\n\n if (files.route) {\n if (shouldSplit) {\n ownFiles.push(files.route);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.route);\n }\n }\n\n for (let [childName, childFiles] of files.children) {\n splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n splitAtRoutes,\n (childRouteName: string, childFile: string) => {\n // this is our child calling \"addToParent\"\n if (shouldSplit) {\n ownFiles.push(childFile);\n ownNames.add(childRouteName);\n } else {\n addToParent(childRouteName, childFile);\n }\n },\n (routeNames: string[], files: string[]) => {\n addLazyBundle(routeNames, files);\n }\n );\n }\n\n if (ownFiles.length > 0) {\n addLazyBundle([...ownNames], ownFiles);\n }\n}\n\nfunction shouldSplitRoute(routeName: string, splitAtRoutes: (RegExp | string)[] | undefined) {\n if (!splitAtRoutes) {\n return false;\n }\n return splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n });\n}\n\nexport function getAppFiles(appRoot: string): Set<string> {\n const files: string[] = walkSync(appRoot, {\n ignore: [\n '_babel_filter_.js',\n ...resolvableExtensions().map(ext => `app${ext}`),\n ...resolvableExtensions().map(ext => `engine${ext}`),\n 'assets',\n ...resolvableExtensions().map(ext => `testem${ext}`),\n 'node_modules',\n ],\n });\n return new Set(files);\n}\n\nexport function getFastbootFiles(appRoot: string): Set<string> {\n const appDirPath = join(appRoot, '_fastboot_');\n const files: string[] = walkSync(appDirPath);\n return new Set(files);\n}\n"]}
|
|
@@ -14,7 +14,7 @@ function renderRouteEntrypoint({ fromDir, route }, resolver) {
|
|
|
14
14
|
throw new Error('Owner expected'); // ToDo: Really bad error, update message
|
|
15
15
|
}
|
|
16
16
|
let engine = resolver.owningEngine(owner);
|
|
17
|
-
let isApp =
|
|
17
|
+
let isApp = owner?.root === resolver.options.engines[0].root;
|
|
18
18
|
let hasFastboot = Boolean(resolver.options.engines[0].activeAddons.find(a => a.name === 'ember-cli-fastboot'));
|
|
19
19
|
let appFiles = appFilesCache.get(fromDir);
|
|
20
20
|
if (!appFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-route-entrypoint.js","sourceRoot":"","sources":["../../src/virtual-route-entrypoint.ts"],"names":[],"mappings":";;AAiBA,sDAkEC;AAlFD,2CAAuC;AAEvC,mDAA0C;AAC1C,kEAAgE;AAChE,mCAAmC;AACnC,6DAAqH;AAQrH,+EAA+E;AAC/E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;AAEhC,SAAgB,qBAAqB,CACnC,EAAE,OAAO,EAAE,KAAK,EAA2B,EAC3C,QAAkB;IAElB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,yCAAyC;IAC9E,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"virtual-route-entrypoint.js","sourceRoot":"","sources":["../../src/virtual-route-entrypoint.ts"],"names":[],"mappings":"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","sourcesContent":["import type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { AppFiles } from './app-files';\nimport type { Resolver } from './module-resolver';\nimport { compile } from './js-handlebars';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport { partition } from 'lodash';\nimport { getAppFiles, getFastbootFiles, importPaths, splitRoute, staticAppPathsPattern } from './virtual-entrypoint';\n\nexport interface RouteEntrypointResponse {\n type: 'route-entrypoint';\n fromDir: string;\n route: string;\n}\n\n// Cache AppFiles instances by fromDir to avoid recreating them for every route\nconst appFilesCache = new Map();\n\nexport function renderRouteEntrypoint(\n { fromDir, route }: RouteEntrypointResponse,\n resolver: Resolver\n): { src: string; watches: string[] } {\n const owner = resolver.packageCache.ownerOfFile(fromDir);\n\n if (!owner) {\n throw new Error('Owner expected'); // ToDo: Really bad error, update message\n }\n\n let engine = resolver.owningEngine(owner);\n let isApp = owner?.root === resolver.options.engines[0]!.root;\n let hasFastboot = Boolean(resolver.options.engines[0]!.activeAddons.find(a => a.name === 'ember-cli-fastboot'));\n let appFiles = appFilesCache.get(fromDir);\n\n if (!appFiles) {\n appFiles = new AppFiles(\n {\n package: owner,\n addons: new Map(\n engine.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp,\n modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(fromDir),\n hasFastboot ? getFastbootFiles(owner.root) : new Set(),\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n appFilesCache.set(fromDir, appFiles);\n }\n\n let src = '';\n\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n splitRoute(\n routeName,\n routeFiles,\n resolver.options.splitAtRoutes,\n (_: string, _filename: string) => {\n // noop\n },\n (routeNames: string[], routeFiles: string[]) => {\n if (routeNames[0] === route) {\n let [fastboot, nonFastboot] = partition(routeFiles, file => appFiles.isFastbootOnly.get(file));\n\n const amdModules = nonFastboot.map(f => importPaths(resolver, appFiles, f));\n const fastbootOnlyAmdModules = fastboot.map(f => importPaths(resolver, appFiles, f));\n\n src = routeEntryTemplate({\n amdModules,\n fastbootOnlyAmdModules,\n });\n }\n }\n );\n }\n\n return { src, watches: [] };\n}\n\nconst routeEntryTemplate = compile(`\nconst output = {};\nexport default output;\n\n{{#each amdModules as |amdModule index| ~}}\n import * as amdModule{{index}} from \"{{js-string-escape amdModule.buildtime}}\"\n output[\"{{js-string-escape amdModule.runtime}}\"] = amdModule{{index}};\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n output[\"{{js-string-escape amdModule.runtime}}\"] = await import(\"{{js-string-escape amdModule.buildtime}}\");\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules: { runtime: string; buildtime: string }[];\n}) => string;\n"]}
|
|
@@ -26,6 +26,8 @@ const broccoli_plugin_1 = __importDefault(require("broccoli-plugin"));
|
|
|
26
26
|
|
|
27
27
|
*/
|
|
28
28
|
class WaitForTrees extends broccoli_plugin_1.default {
|
|
29
|
+
trees;
|
|
30
|
+
buildHook;
|
|
29
31
|
constructor(trees, annotation, buildHook) {
|
|
30
32
|
super(flatTrees(trees), {
|
|
31
33
|
persistentOutput: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait-for-trees.js","sourceRoot":"","sources":["../../src/wait-for-trees.ts"],"names":[],"mappings":";;;;;AAAA,sEAA6C;AAG7C;;;;;;;;;;;;;;;;;;;;EAoBE;AACF,MAAqB,YAAyB,SAAQ,yBAAc;
|
|
1
|
+
{"version":3,"file":"wait-for-trees.js","sourceRoot":"","sources":["../../src/wait-for-trees.ts"],"names":[],"mappings":";;;;;AAAA,sEAA6C;AAG7C;;;;;;;;;;;;;;;;;;;;EAoBE;AACF,MAAqB,YAAyB,SAAQ,yBAAc;IAExD;IAEA;IAHV,YACU,KAAiB,EACzB,UAAkB,EACV,SAA2F;QAEnG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACtB,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,UAAU;YACtB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QATK,UAAK,GAAL,KAAK,CAAY;QAEjB,cAAS,GAAT,SAAS,CAAkF;IAQrG,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAoC;QAC9C,IAAI,MAAM,GAA8C,EAAE,CAAC;QAC3D,IAAI,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;gBACvD,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC7D,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAE5F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACtC,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBACjC,gBAAgB,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAA4C,EAAE,UAAU,CAAC,CAAC;IAClF,CAAC;CACF;AAtCD,+BAsCC;AAMD,SAAS,MAAM,CAAC,CAAM;IACpB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,mBAAmB,KAAK,UAAU,CAAC;AAC1D,CAAC;AAED,QAAQ,CAAC,CAAC,SAAS,CAAa,KAAiB;IAC/C,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;YAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uDAAuD,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAa,KAAiB;IAC9C,IAAI,MAAM,GAAW,EAAE,CAAC;IACxB,KAAK,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import BroccoliPlugin from 'broccoli-plugin';\nimport type { Node } from 'broccoli-node-api';\n\n/*\n Takes some named broccoli trees and/or lists of broccoli trees and gives you\n the resulting inputPaths once those trees are built. Example:\n\n import { Node } from 'broccoli-node-api';;\n\n interface MyInputs<T> {\n codeFromMyApp: T,\n codeFromMyAddons: T[]\n }\n\n function(trees: MyInputs<Node>): Node {\n return WaitForTrees(trees, build);\n }\n\n async function build(paths: MyInputs<string>) {\n // paths.someTree is a string\n // paths.otherTrees is a string[]\n }\n\n*/\nexport default class WaitForTrees<NamedTrees> extends BroccoliPlugin {\n constructor(\n private trees: NamedTrees,\n annotation: string,\n private buildHook: (trees: OutputPaths<NamedTrees>, changed: Map<string, boolean>) => Promise<void>\n ) {\n super(flatTrees(trees), {\n persistentOutput: true,\n needsCache: false,\n annotation: annotation,\n trackInputChanges: true,\n });\n }\n\n async build(detail?: { changedNodes: boolean[] }) {\n let result: { [treeName: string]: string | string[] } = {};\n let changedMap = new Map();\n\n let inputPathCounter = 0;\n for (let entry of findTrees(this.trees)) {\n if (entry.single) {\n result[entry.name] = this.inputPaths[inputPathCounter];\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(this.inputPaths[inputPathCounter], didChange);\n inputPathCounter += 1;\n } else if (entry.multi) {\n let sliced = this.inputPaths.slice(inputPathCounter, inputPathCounter + entry.multi.length);\n\n result[entry.name] = sliced.map(slice => {\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(slice, didChange);\n inputPathCounter++;\n return slice;\n });\n }\n }\n return this.buildHook(result as unknown as OutputPaths<NamedTrees>, changedMap);\n }\n}\n\nexport type OutputPaths<NamedTrees> = {\n [P in keyof NamedTrees]: NamedTrees[P] extends Node ? string : NamedTrees[P] extends Node[] ? string[] : never;\n};\n\nfunction isTree(x: any): x is Node {\n return x && typeof x.__broccoliGetInfo__ === 'function';\n}\n\nfunction* findTrees<NamedTrees>(trees: NamedTrees): IterableIterator<{ name: string; single?: Node; multi?: Node[] }> {\n for (let [name, value] of Object.entries(trees as Record<string, unknown>)) {\n if (Array.isArray(value)) {\n let stringTrees = value.filter(t => typeof t === 'string');\n if (stringTrees.length > 0) {\n throw new Error(`found strings instead of broccoli trees for ${name}: ${value}`);\n }\n yield { name, multi: value.filter(isTree) };\n } else if (isTree(value)) {\n yield { name, single: value };\n } else if (typeof value === 'string') {\n throw new Error(`found a string when we expected a broccoli tree for ${name}: ${value}`);\n }\n }\n}\n\nfunction flatTrees<NamedTrees>(trees: NamedTrees) {\n let output: Node[] = [];\n for (let value of findTrees(trees)) {\n if (value.multi) {\n output = output.concat(value.multi);\n } else if (value.single) {\n output.push(value.single);\n }\n }\n return output;\n}\n"]}
|