projen 0.51.9 → 0.51.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/.jsii +2 -2
  2. package/changelog.md +1 -1
  3. package/lib/awscdk/auto-discover.js +1 -1
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-ts.js +1 -1
  6. package/lib/awscdk/awscdk-construct.js +2 -2
  7. package/lib/awscdk/awscdk-deps-java.js +1 -1
  8. package/lib/awscdk/awscdk-deps-js.js +1 -1
  9. package/lib/awscdk/awscdk-deps.js +1 -1
  10. package/lib/awscdk/cdk-config.js +1 -1
  11. package/lib/awscdk/cdk-tasks.js +1 -1
  12. package/lib/awscdk/integration-test.js +1 -1
  13. package/lib/awscdk/lambda-function.js +2 -2
  14. package/lib/build/build-workflow.js +1 -1
  15. package/lib/cdk/construct-lib.js +1 -1
  16. package/lib/cdk/jsii-docgen.js +1 -1
  17. package/lib/cdk/jsii-project.js +1 -1
  18. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  19. package/lib/cdk8s/cdk8s-construct.js +1 -1
  20. package/lib/cdktf/cdktf-construct.js +1 -1
  21. package/lib/component.js +1 -1
  22. package/lib/dependencies.js +1 -1
  23. package/lib/dev-env.js +1 -1
  24. package/lib/docker-compose.js +2 -2
  25. package/lib/file.js +1 -1
  26. package/lib/gitattributes.js +1 -1
  27. package/lib/github/auto-approve.js +1 -1
  28. package/lib/github/auto-merge.js +1 -1
  29. package/lib/github/dependabot.js +1 -1
  30. package/lib/github/github-project.js +1 -1
  31. package/lib/github/github.js +1 -1
  32. package/lib/github/mergify.js +1 -1
  33. package/lib/github/pr-template.js +1 -1
  34. package/lib/github/pull-request-lint.js +1 -1
  35. package/lib/github/stale.js +1 -1
  36. package/lib/github/task-workflow.js +1 -1
  37. package/lib/github/workflows.js +1 -1
  38. package/lib/gitlab/configuration.js +1 -1
  39. package/lib/gitlab/gitlab-configuration.js +1 -1
  40. package/lib/gitlab/nested-configuration.js +1 -1
  41. package/lib/gitpod.js +1 -1
  42. package/lib/ignore-file.js +1 -1
  43. package/lib/ini.js +1 -1
  44. package/lib/java/java-project.js +1 -1
  45. package/lib/java/junit.js +1 -1
  46. package/lib/java/maven-compile.js +1 -1
  47. package/lib/java/maven-packaging.js +1 -1
  48. package/lib/java/maven-sample.js +1 -1
  49. package/lib/java/pom.js +1 -1
  50. package/lib/java/projenrc.js +1 -1
  51. package/lib/javascript/bundler.js +1 -1
  52. package/lib/javascript/eslint.js +1 -1
  53. package/lib/javascript/jest.js +1 -1
  54. package/lib/javascript/node-package.js +1 -1
  55. package/lib/javascript/node-project.js +1 -1
  56. package/lib/javascript/npm-config.js +1 -1
  57. package/lib/javascript/prettier.js +1 -1
  58. package/lib/javascript/projenrc.js +1 -1
  59. package/lib/javascript/typescript-config.js +1 -1
  60. package/lib/javascript/upgrade-dependencies.js +2 -2
  61. package/lib/json.js +1 -1
  62. package/lib/license.js +1 -1
  63. package/lib/logger.js +1 -1
  64. package/lib/makefile.js +1 -1
  65. package/lib/object-file.js +1 -1
  66. package/lib/project-build.js +1 -1
  67. package/lib/project.js +1 -1
  68. package/lib/projects.js +1 -1
  69. package/lib/projenrc-json.js +1 -1
  70. package/lib/python/pip.js +1 -1
  71. package/lib/python/poetry.js +2 -2
  72. package/lib/python/projenrc.js +1 -1
  73. package/lib/python/pytest.js +1 -1
  74. package/lib/python/python-project.js +1 -1
  75. package/lib/python/python-sample.js +1 -1
  76. package/lib/python/requirements-file.js +1 -1
  77. package/lib/python/setuppy.js +1 -1
  78. package/lib/python/setuptools.js +1 -1
  79. package/lib/python/venv.js +1 -1
  80. package/lib/readme.js +1 -1
  81. package/lib/release/publisher.js +1 -1
  82. package/lib/release/release-trigger.js +1 -1
  83. package/lib/release/release.js +1 -1
  84. package/lib/sample-file.js +2 -2
  85. package/lib/semver.js +1 -1
  86. package/lib/source-code.js +1 -1
  87. package/lib/task-runtime.js +1 -1
  88. package/lib/task.js +1 -1
  89. package/lib/tasks.js +1 -1
  90. package/lib/testing.js +1 -1
  91. package/lib/textfile.js +1 -1
  92. package/lib/toml.js +1 -1
  93. package/lib/typescript/projenrc.js +1 -1
  94. package/lib/typescript/typescript-typedoc.js +1 -1
  95. package/lib/typescript/typescript.js +3 -3
  96. package/lib/version.js +1 -1
  97. package/lib/vscode/devcontainer.js +1 -1
  98. package/lib/vscode/launch-config.js +1 -1
  99. package/lib/vscode/vscode.js +1 -1
  100. package/lib/web/next.js +3 -3
  101. package/lib/web/postcss.js +1 -1
  102. package/lib/web/react.js +4 -4
  103. package/lib/web/tailwind.js +1 -1
  104. package/lib/xmlfile.js +1 -1
  105. package/lib/yaml.js +1 -1
  106. package/node_modules/resolve/.eslintrc +1 -0
  107. package/node_modules/resolve/bin/resolve +7 -4
  108. package/node_modules/resolve/lib/async.js +10 -1
  109. package/node_modules/resolve/lib/core.json +5 -5
  110. package/node_modules/resolve/lib/homedir.js +24 -0
  111. package/node_modules/resolve/lib/sync.js +10 -1
  112. package/node_modules/resolve/package.json +11 -6
  113. package/node_modules/resolve/test/home_paths.js +127 -0
  114. package/node_modules/resolve/test/home_paths_sync.js +114 -0
  115. package/node_modules/resolve/test/resolver_sync.js +230 -28
  116. package/package.json +2 -2
  117. package/releasetag.txt +1 -1
  118. package/version.txt +1 -1
package/lib/web/react.js CHANGED
@@ -43,7 +43,7 @@ class ReactProject extends javascript_1.NodeProject {
43
43
  }
44
44
  exports.ReactProject = ReactProject;
45
45
  _a = JSII_RTTI_SYMBOL_1;
46
- ReactProject[_a] = { fqn: "projen.web.ReactProject", version: "0.51.9" };
46
+ ReactProject[_a] = { fqn: "projen.web.ReactProject", version: "0.51.13" };
47
47
  /**
48
48
  * (experimental) React project with TypeScript.
49
49
  *
@@ -105,7 +105,7 @@ class ReactTypeScriptProject extends typescript_1.TypeScriptAppProject {
105
105
  }
106
106
  exports.ReactTypeScriptProject = ReactTypeScriptProject;
107
107
  _b = JSII_RTTI_SYMBOL_1;
108
- ReactTypeScriptProject[_b] = { fqn: "projen.web.ReactTypeScriptProject", version: "0.51.9" };
108
+ ReactTypeScriptProject[_b] = { fqn: "projen.web.ReactTypeScriptProject", version: "0.51.13" };
109
109
  /**
110
110
  * @experimental
111
111
  */
@@ -175,7 +175,7 @@ class ReactComponent extends component_1.Component {
175
175
  }
176
176
  exports.ReactComponent = ReactComponent;
177
177
  _c = JSII_RTTI_SYMBOL_1;
178
- ReactComponent[_c] = { fqn: "projen.web.ReactComponent", version: "0.51.9" };
178
+ ReactComponent[_c] = { fqn: "projen.web.ReactComponent", version: "0.51.13" };
179
179
  class ReactSampleCode extends component_1.Component {
180
180
  constructor(project, options) {
181
181
  var _e;
@@ -370,5 +370,5 @@ class ReactTypeDef extends file_1.FileBase {
370
370
  }
371
371
  exports.ReactTypeDef = ReactTypeDef;
372
372
  _d = JSII_RTTI_SYMBOL_1;
373
- ReactTypeDef[_d] = { fqn: "projen.web.ReactTypeDef", version: "0.51.9" };
373
+ ReactTypeDef[_d] = { fqn: "projen.web.ReactTypeDef", version: "0.51.13" };
374
374
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViL3JlYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDRDQUF5QztBQUN6QyxrQ0FBK0Q7QUFDL0QsOENBS3VCO0FBQ3ZCLGdEQUEyQztBQUMzQyxnREFBNEM7QUFDNUMsOENBQStFO0FBQy9FLGtDQUFvQzs7Ozs7OztBQXFCcEMsTUFBYSxZQUFhLFNBQVEsd0JBQVc7Ozs7SUFJM0MsWUFBWSxPQUE0Qjs7UUFDdEMsS0FBSyxDQUFDO1lBQ0osSUFBSSxFQUFFLEtBQUs7WUFDWCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxTQUFHLE9BQU8sQ0FBQyxNQUFNLG1DQUFJLEtBQUssQ0FBQztRQUV0QyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV4RSw2RkFBNkY7UUFDN0YsVUFBSSxPQUFPLENBQUMsVUFBVSxtQ0FBSSxJQUFJLEVBQUU7WUFDOUIsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFO2dCQUN4QixPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07YUFDcEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQ3RFLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7QUF4Qkgsb0NBeUJDOzs7Ozs7Ozs7QUFHRCxNQUFhLHNCQUF1QixTQUFRLGlDQUFvQjs7OztJQU85RCxZQUFZLE9BQXNDOztRQUNoRCxNQUFNLGNBQWMs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QUlELE1BQWEsWUFBYSxTQUFRLGVBQVE7Ozs7SUFDeEMsWUFDRSxPQUErQixFQUMvQixRQUFnQixFQUNoQixVQUErQixFQUFFO1FBRWpDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Ozs7OztJQUVTLGlCQUFpQixDQUFDLENBQVk7UUFDdEMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7O0FBWEgsb0NBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGaWxlQmFzZSwgRmlsZUJhc2VPcHRpb25zLCBJUmVzb2x2ZXIgfSBmcm9tIFwiLi4vZmlsZVwiO1xuaW1wb3J0IHtcbiAgTm9kZVByb2plY3QsXG4gIE5vZGVQcm9qZWN0T3B0aW9ucyxcbiAgVHlwZVNjcmlwdEpzeE1vZGUsXG4gIFR5cGVTY3JpcHRNb2R1bGVSZXNvbHV0aW9uLFxufSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgU2FtcGxlRGlyIH0gZnJvbSBcIi4uL3NhbXBsZS1maWxlXCI7XG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSBcIi4uL3NvdXJjZS1jb2RlXCI7XG5pbXBvcnQgeyBUeXBlU2NyaXB0QXBwUHJvamVjdCwgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RSZXdpcmVPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZXdpcmU/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0VHlwZVNjcmlwdFByb2plY3RPcHRpb25zXG4gIGV4dGVuZHMgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zLFxuICAgIFJlYWN0UmV3aXJlT3B0aW9ucyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0UHJvamVjdE9wdGlvbnNcbiAgZXh0ZW5kcyBOb2RlUHJvamVjdE9wdGlvbnMsXG4gICAgUmVhY3RSZXdpcmVPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNyY2Rpcj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNhbXBsZUNvZGU/OiBib29sZWFuO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIFJlYWN0UHJvamVjdCBleHRlbmRzIE5vZGVQcm9qZWN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBzcmNkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZWFjdFByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgamVzdDogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zcmNkaXIgPSBvcHRpb25zLnNyY2RpciA/PyBcInNyY1wiO1xuXG4gICAgbmV3IFJlYWN0Q29tcG9uZW50KHRoaXMsIHsgdHlwZXNjcmlwdDogZmFsc2UsIHJld2lyZTogb3B0aW9ucy5yZXdpcmUgfSk7XG5cbiAgICAvLyBnZW5lcmF0ZSBzYW1wbGUgY29kZSBpbiBgc3JjYCBhbmQgYHB1YmxpY2AgaWYgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIGVtcHR5IG9yIG5vbi1leGlzdGVudC5cbiAgICBpZiAob3B0aW9ucy5zYW1wbGVDb2RlID8/IHRydWUpIHtcbiAgICAgIG5ldyBSZWFjdFNhbXBsZUNvZGUodGhpcywge1xuICAgICAgICBmaWxlRXh0OiBcImpzeFwiLFxuICAgICAgICBzcmNkaXI6IHRoaXMuc3JjZGlyLFxuICAgICAgfSk7XG4gICAgICBuZXcgU2FtcGxlRGlyKHRoaXMsIFwicHVibGljXCIsIHtcbiAgICAgICAgc291cmNlRGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJhc3NldHNcIiwgXCJ3ZWJcIiwgXCJyZWFjdFwiKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIFJlYWN0VHlwZVNjcmlwdFByb2plY3QgZXh0ZW5kcyBUeXBlU2NyaXB0QXBwUHJvamVjdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHJlYWN0VHlwZURlZjogUmVhY3RUeXBlRGVmO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlYWN0VHlwZVNjcmlwdFByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBzcmNkaXI6IFwic3JjXCIsXG4gICAgICBlc2xpbnQ6IGZhbHNlLFxuICAgICAgamVzdDogZmFsc2UsXG4gICAgICB0c2NvbmZpZzoge1xuICAgICAgICBpbmNsdWRlOiBbXCJzcmNcIl0sXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHRhcmdldDogXCJlczVcIixcbiAgICAgICAgICBsaWI6IFtcImRvbVwiLCBcImRvbS5pdGVyYWJsZVwiLCBcImVzbmV4dFwiXSxcbiAgICAgICAgICBhbGxvd0pzOiB0cnVlLFxuICAgICAgICAgIHNraXBMaWJDaGVjazogdHJ1ZSxcbiAgICAgICAgICBlc01vZHVsZUludGVyb3A6IHRydWUsXG4gICAgICAgICAgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czogdHJ1ZSxcbiAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXM6IHRydWUsXG4gICAgICAgICAgbm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2g6IHRydWUsXG4gICAgICAgICAgbW9kdWxlOiBcImVzbmV4dFwiLFxuICAgICAgICAgIG1vZHVsZVJlc29sdXRpb246IFR5cGVTY3JpcHRNb2R1bGVSZXNvbHV0aW9uLk5PREUsXG4gICAgICAgICAgcmVzb2x2ZUpzb25Nb2R1bGU6IHRydWUsXG4gICAgICAgICAgaXNvbGF0ZWRNb2R1bGVzOiB0cnVlLFxuICAgICAgICAgIG5vRW1pdDogdHJ1ZSxcbiAgICAgICAgICBqc3g6IFR5cGVTY3JpcHRKc3hNb2RlLlJFQUNUX0pTWCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbjogb3B0aW9ucy50eXBlc2NyaXB0VmVyc2lvbiA/PyBcIl40LjAuM1wiLFxuICAgIH07XG5cbiAgICAvLyBuZXZlciBnZW5lcmF0ZSBkZWZhdWx0IFR5cGVTY3JpcHQgc2FtcGxlIGNvZGUsIHNpbmNlIHRoaXMgY2xhc3MgcHJvdmlkZXMgaXRzIG93blxuICAgIHN1cGVyKFxuICAgICAgZGVlcE1lcmdlKFtcbiAgICAgICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHsgc2FtcGxlQ29kZTogZmFsc2UgfSxcbiAgICAgIF0pIGFzIFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLnNyY2RpciA9IG9wdGlvbnMuc3JjZGlyID8/IFwic3JjXCI7XG5cbiAgICBuZXcgUmVhY3RDb21wb25lbnQodGhpcywgeyB0eXBlc2NyaXB0OiB0cnVlLCByZXdpcmU6IG9wdGlvbnMucmV3aXJlIH0pO1xuXG4gICAgdGhpcy5yZWFjdFR5cGVEZWYgPSBuZXcgUmVhY3RUeXBlRGVmKHRoaXMsIFwicmVhY3QtYXBwLWVudi5kLnRzXCIpO1xuXG4gICAgLy8gZ2VuZXJhdGUgc2FtcGxlIGNvZGUgaW4gYHNyY2AgYW5kIGBwdWJsaWNgIGlmIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBlbXB0eSBvciBub24tZXhpc3RlbnQuXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgUmVhY3RTYW1wbGVDb2RlKHRoaXMsIHtcbiAgICAgICAgZmlsZUV4dDogXCJ0c3hcIixcbiAgICAgICAgc3JjZGlyOiB0aGlzLnNyY2RpcixcbiAgICAgIH0pO1xuICAgICAgbmV3IFNhbXBsZURpcih0aGlzLCBcInB1YmxpY1wiLCB7XG4gICAgICAgIHNvdXJjZURpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiYXNzZXRzXCIsIFwid2ViXCIsIFwicmVhY3RcIiksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdENvbXBvbmVudE9wdGlvbnMgZXh0ZW5kcyBSZWFjdFJld2lyZU9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0eXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlc2NyaXB0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBSZWFjdENvbXBvbmVudE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMudHlwZXNjcmlwdCA9IG9wdGlvbnMudHlwZXNjcmlwdCA/PyBmYWxzZTtcblxuICAgIC8vIE5vIGNvbXBpbGUgZm9yIHJlYWN0IGFwcFxuICAgIHByb2plY3QuY29tcGlsZVRhc2sucmVzZXQoKTtcblxuICAgIHByb2plY3QuYWRkRGVwcyhcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwicmVhY3Qtc2NyaXB0c0BeNVwiLCBcIndlYi12aXRhbHNcIik7XG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgXCJAdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tXCIsXG4gICAgICBcIkB0ZXN0aW5nLWxpYnJhcnkvcmVhY3RcIixcbiAgICAgIFwiQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50XCJcbiAgICApO1xuICAgIGlmICh0aGlzLnR5cGVzY3JpcHQpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhcIkB0eXBlcy9qZXN0XCIsIFwiQHR5cGVzL3JlYWN0XCIsIFwiQHR5cGVzL3JlYWN0LWRvbVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXdpcmUgPSBvcHRpb25zLnJld2lyZSA/PyBmYWxzZTtcblxuICAgIGlmIChyZXdpcmUpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlc1BhdGggPSBcIi5wcm9qZW4vcmVhY3QtY29uZmlnLW92ZXJyaWRlcy5qc1wiO1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKFwicmVhY3QtYXBwLXJld2lyZWRcIik7XG4gICAgICBwcm9qZWN0LmFkZEZpZWxkcyh7IFwiY29uZmlnLW92ZXJyaWRlcy1wYXRoXCI6IG92ZXJyaWRlc1BhdGggfSk7XG5cbiAgICAgIGNvbnN0IGNvbmZpZ092ZXJyaWRlcyA9IG5ldyBTb3VyY2VDb2RlKHRoaXMucHJvamVjdCwgb3ZlcnJpZGVzUGF0aCk7XG4gICAgICBjb25maWdPdmVycmlkZXMubGluZShgLy8gJHtGaWxlQmFzZS5QUk9KRU5fTUFSS0VSfWApO1xuICAgICAgY29uZmlnT3ZlcnJpZGVzLmxpbmUoXCIvKipcIik7XG4gICAgICBjb25maWdPdmVycmlkZXMubGluZShcbiAgICAgICAgXCIgKiBPdmVycmlkZSBDUkEgY29uZmlndXJhdGlvbiB3aXRob3V0IG5lZWRpbmcgdG8gZWplY3QuXCJcbiAgICAgICk7XG4gICAgICBjb25maWdPdmVycmlkZXMubGluZShcIiAqXCIpO1xuICAgICAgY29uZmlnT3ZlcnJpZGVzLmxpbmUoXG4gICAgICAgIFwiICogQHNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9yZWFjdC1hcHAtcmV3aXJlZFwiXG4gICAgICApO1xuICAgICAgY29uZmlnT3ZlcnJpZGVzLmxpbmUoXCIgKi9cIik7XG4gICAgICBjb25maWdPdmVycmlkZXMub3BlbihcIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb3ZlcnJpZGUoY29uZmlnLCBlbnYpIHtcIik7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXdpcmUpKSB7XG4gICAgICAgIGNvbmZpZ092ZXJyaWRlcy5saW5lKGBjb25maWcuJHtrZXl9ID0gJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9O2ApO1xuICAgICAgfVxuICAgICAgY29uZmlnT3ZlcnJpZGVzLmxpbmUoXCJyZXR1cm4gY29uZmlnO1wiKTtcbiAgICAgIGNvbmZpZ092ZXJyaWRlcy5jbG9zZShcIn07XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWN0U2NyaXB0cyA9IHJld2lyZSA/IFwicmVhY3QtYXBwLXJld2lyZWRcIiA6IFwicmVhY3Qtc2NyaXB0c1wiO1xuXG4gICAgLy8gQ3JlYXRlIFJlYWN0IEFwcCBDTEkgY29tbWFuZHMsIHNlZTogaHR0cHM6Ly9jcmVhdGUtcmVhY3QtYXBwLmRldi9kb2NzL2F2YWlsYWJsZS1zY3JpcHRzL1xuICAgIHByb2plY3QuYWRkVGFzayhcImRldlwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTdGFydHMgdGhlIHJlYWN0IGFwcGxpY2F0aW9uXCIsXG4gICAgICBleGVjOiBgJHtyZWFjdFNjcmlwdHN9IHN0YXJ0YCxcbiAgICB9KTtcblxuICAgIHByb2plY3QuY29tcGlsZVRhc2suZXhlYyhgJHtyZWFjdFNjcmlwdHN9IGJ1aWxkYCk7XG5cbiAgICBwcm9qZWN0LmFkZFRhc2soXCJlamVjdFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJFamVjdHMgeW91ciBSZWFjdCBhcHBsaWNhdGlvbiBmcm9tIHJlYWN0LXNjcmlwdHNcIixcbiAgICAgIC8vIGVqZWN0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcmV3aXJlXG4gICAgICBleGVjOiBcInJlYWN0LXNjcmlwdHMgZWplY3RcIixcbiAgICB9KTtcblxuICAgIHByb2plY3QudGVzdFRhc2suZXhlYyhgJHtyZWFjdFNjcmlwdHN9IHRlc3QgLS13YXRjaEFsbD1mYWxzZWApO1xuXG4gICAgY29uc3QgdGVzdFdhdGNoID0gcHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp3YXRjaFwiKTtcbiAgICB0ZXN0V2F0Y2g/LnJlc2V0KGAke3JlYWN0U2NyaXB0c30gdGVzdGApO1xuXG4gICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoXCIjIEJ1aWxkXCIsIFwiL2J1aWxkL1wiKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwiIyBCdWlsZFwiLCBcIi9idWlsZC9cIik7XG5cbiAgICBwcm9qZWN0LnBhY2thZ2UuYWRkRmllbGQoXCJlc2xpbnRDb25maWdcIiwge1xuICAgICAgZXh0ZW5kczogW1wicmVhY3QtYXBwXCIsIFwicmVhY3QtYXBwL2plc3RcIl0sXG4gICAgfSk7XG5cbiAgICBwcm9qZWN0LnBhY2thZ2UuYWRkRmllbGQoXCJicm93c2Vyc2xpc3RcIiwge1xuICAgICAgcHJvZHVjdGlvbjogW1wiPjAuMiVcIiwgXCJub3QgZGVhZFwiLCBcIm5vdCBvcF9taW5pIGFsbFwiXSxcbiAgICAgIGRldmVsb3BtZW50OiBbXG4gICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgIFwibGFzdCAxIGZpcmVmb3ggdmVyc2lvblwiLFxuICAgICAgICBcImxhc3QgMSBzYWZhcmkgdmVyc2lvblwiLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVhY3RTYW1wbGVDb2RlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiBmb3Igc2FtcGxlIGphdmFzY3JpcHQgY29kZSB0byBiZSBzYXZlZCBhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJqc3hcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZUV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBSZWFjdCBqc3ggZmlsZXMgYXJlIGRlY2xhcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG59XG5cbmNsYXNzIFJlYWN0U2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZUV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBSZWFjdFNhbXBsZUNvZGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmZpbGVFeHQgPSBvcHRpb25zLmZpbGVFeHQgPz8gXCJqc3hcIjtcbiAgICB0aGlzLnNyY2RpciA9IG9wdGlvbnMuc3JjZGlyO1xuXG4gICAgY29uc3QgbG9nb1N2ZyA9IFtcbiAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDg0MS45IDU5NS4zXCI+JyxcbiAgICAgICcgICAgPGcgZmlsbD1cIiM2MURBRkJcIj4nLFxuICAgICAgJyAgICAgICAgPHBhdGggZD1cIk02NjYuMyAyOTYuNWMwLTMyLjUtNDAuNy02My4zLTEwMy4xLTgyLjQgMTQuNC02My42IDgtMTE0LjItMjAuMi0xMzAuNC02LjUtMy44LTE0LjEtNS42LTIyLjQtNS42djIyLjNjNC42IDAgOC4zLjkgMTEuNCAyLjYgMTMuNiA3LjggMTkuNSAzNy41IDE0LjkgNzUuNy0xLjEgOS40LTIuOSAxOS4zLTUuMSAyOS40LTE5LjYtNC44LTQxLTguNS02My41LTEwLjktMTMuNS0xOC41LTI3LjUtMzUuMy00MS42LTUwIDMyLjYtMzAuMyA2My4yLTQ2LjkgODQtNDYuOVY3OGMtMjcuNSAwLTYzLjUgMTkuNi05OS45IDUzLjYtMzYuNC0zMy44LTcyLjQtNTMuMi05OS45LTUzLjJ2MjIuM2MyMC43IDAgNTEuNCAxNi41IDg0IDQ2LjYtMTQgMTQuNy0yOCAzMS40LTQxLjMgNDkuOS0yMi42IDIuNC00NCA2LjEtNjMuNiAxMS0yLjMtMTAtNC0xOS43LTUuMi0yOS00LjctMzguMiAxLjEtNjcuOSAxNC42LTc1LjggMy0xLjggNi45LTIuNiAxMS41LTIuNlY3OC41Yy04LjQgMC0xNiAxLjgtMjIuNiA1LjYtMjguMSAxNi4yLTM0LjQgNjYuNy0xOS45IDEzMC4xLTYyLjIgMTkuMi0xMDIuNyA0OS45LTEwMi43IDgyLjMgMCAzMi41IDQwLjcgNjMuMyAxMDMuMSA4Mi40LTE0LjQgNjMuNi04IDExNC4yIDIwLjIgMTMwLjQgNi41IDMuOCAxNC4xIDUuNiAyMi41IDUuNiAyNy41IDAgNjMuNS0xOS42IDk5LjktNTMuNiAzNi40IDMzLjggNzIuNCA1My4yIDk5LjkgNTMuMiA4LjQgMCAxNi0xLjggMjIuNi01LjYgMjguMS0xNi4yIDM0LjQtNjYuNyAxOS45LTEzMC4xIDYyLTE5LjEgMTAyLjUtNDkuOSAxMDIuNS04Mi4zem0tMTMwLjItNjYuN2MtMy43IDEyLjktOC4zIDI2LjItMTMuNSAzOS41LTQuMS04LTguNC0xNi0xMy4xLTI0LTQuNi04LTkuNS0xNS44LTE0LjQtMjMuNCAxNC4yIDIuMSAyNy45IDQuNyA0MSA3Ljl6bS00NS44IDEwNi41Yy03LjggMTMuNS0xNS44IDI2LjMtMjQuMSAzOC4yLTE0LjkgMS4zLTMwIDItNDUuMiAyLTE1LjEgMC0zMC4yLS43LTQ1LTEuOS04LjMtMTEuOS0xNi40LTI0LjYtMjQuMi0zOC03LjYtMTMuMS0xNC41LTI2LjQtMjAuOC0zOS44IDYuMi0xMy40IDEzLjItMjYuOCAyMC43LTM5LjkgNy44LTEzLjUgMTUuOC0yNi4zIDI0LjEtMzguMiAxNC45LTEuMyAzMC0yIDQ1LjItMiAxNS4xIDAgMzAuMi43IDQ1IDEuOSA4LjMgMTEuOSAxNi40IDI0LjYgMjQuMiAzOCA3LjYgMTMuMSAxNC41IDI2LjQgMjAuOCAzOS44LTYuMyAxMy40LTEzLjIgMjYuOC0yMC43IDM5Ljl6bTMyLjMtMTNjNS40IDEzLjQgMTAgMjYuOCAxMy44IDM5LjgtMTMuMSAzLjItMjYuOSA1LjktNDEuMiA4IDQuOS03LjcgOS44LTE1LjYgMTQuNC0yMy43IDQuNi04IDguOS0xNi4xIDEzLTI0LjF6TTQyMS4yIDQzMGMtOS4zLTkuNi0xOC42LTIwLjMtMjcuOC0zMiA5IC40IDE4LjIuNyAyNy41LjcgOS40IDAgMTguNy0uMiAyNy44LS43LTkgMTEuNy0xOC4zIDIyLjQtMjcuNSAzMnptLTc0LjQtNTguOWMtMTQuMi0yLjEtMjcuOS00LjctNDEtNy45IDMuNy0xMi45IDguMy0yNi4yIDEzLjUtMzkuNSA0LjEgOCA4LjQgMTYgMTMuMSAyNCA0LjcgOCA5LjUgMTUuOCAxNC40IDIzLjR6TTQyMC43IDE2M2M5LjMgOS42IDE4LjYgMjAuMyAyNy44IDMyLTktLjQtMTguMi0uNy0yNy41LS43LTkuNCAwLTE4LjcuMi0yNy44LjcgOS0xMS43IDE4LjMtMjIuNCAyNy41LTMyem0tNzQgNTguOWMtNC45IDcuNy05LjggMTUuNi0xNC40IDIzLjctNC42IDgtOC45IDE2LTEzIDI0LTUuNC0xMy40LTEwLTI2LjgtMTMuOC0zOS44IDEzLjEtMy4xIDI2LjktNS44IDQxLjItNy45em0tOTAuNSAxMjUuMmMtMzUuNC0xNS4xLTU4LjMtMzQuOS01OC4zLTUwLjYgMC0xNS43IDIyLjktMzUuNiA1OC4zLTUwLjYgOC42LTMuNyAxOC03IDI3LjctMTAuMSA1LjcgMTkuNiAxMy4yIDQwIDIyLjUgNjAuOS05LjIgMjAuOC0xNi42IDQxLjEtMjIuMiA2MC42LTkuOS0zLjEtMTkuMy02LjUtMjgtMTAuMnpNMzEwIDQ5MGMtMTMuNi03LjgtMTkuNS0zNy41LTE0LjktNzUuNyAxLjEtOS40IDIuOS0xOS4zIDUuMS0yOS40IDE5LjYgNC44IDQxIDguNSA2My41IDEwLjkgMTMuNSAxOC41IDI3LjUgMzUuMyA0MS42IDUwLTMyLjYgMzAuMy02My4yIDQ2LjktODQgNDYuOS00LjUtLjEtOC4zLTEtMTEuMy0yLjd6bTIzNy4yLTc2LjJjNC43IDM4LjItMS4xIDY3LjktMTQuNiA3NS44LTMgMS44LTYuOSAyLjYtMTEuNSAyLjYtMjAuNyAwLTUxLjQtMTYuNS04NC00Ni42IDE0LTE0LjcgMjgtMzEuNCA0MS4zLTQ5LjkgMjIuNi0yLjQgNDQtNi4xIDYzLjYtMTEgMi4zIDEwLjEgNC4xIDE5LjggNS4yIDI5LjF6bTM4LjUtNjYuN2MtOC42IDMuNy0xOCA3LTI3LjcgMTAuMS01LjctMTkuNi0xMy4yLTQwLTIyLjUtNjAuOSA5LjItMjAuOCAxNi42LTQxLjEgMjIuMi02MC42IDkuOSAzLjEgMTkuMyA2LjUgMjguMSAxMC4yIDM1LjQgMTUuMSA1OC4zIDM0LjkgNTguMyA1MC42LS4xIDE1LjctMjMgMzUuNi01OC40IDUwLjZ6TTMyMC44IDc4LjR6XCIvPicsXG4gICAgICAnICAgICAgICA8Y2lyY2xlIGN4PVwiNDIwLjlcIiBjeT1cIjI5Ni41XCIgcj1cIjQ1LjdcIi8+JyxcbiAgICAgICcgICAgICAgIDxwYXRoIGQ9XCJNNTIwLjUgNzguMXpcIi8+JyxcbiAgICAgIFwiICAgIDwvZz5cIixcbiAgICAgIFwiPC9zdmc+XCIsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICBjb25zdCBhcHBKc3ggPSBbXG4gICAgICBcImltcG9ydCBsb2dvIGZyb20gJy4vbG9nby5zdmcnO1wiLFxuICAgICAgXCJpbXBvcnQgJy4vQXBwLmNzcydcIixcbiAgICAgIFwiXCIsXG4gICAgICBcImZ1bmN0aW9uIEFwcCgpIHtcIixcbiAgICAgIFwiICByZXR1cm4gKFwiLFxuICAgICAgJyAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwXCI+JyxcbiAgICAgICcgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIkFwcC1oZWFkZXJcIj4nLFxuICAgICAgJyAgICAgICAgPGltZyBzcmM9e2xvZ299IGNsYXNzTmFtZT1cIkFwcC1sb2dvXCIgYWx0PVwibG9nb1wiIC8+JyxcbiAgICAgIFwiICAgICAgICA8cD5cIixcbiAgICAgIGAgICAgICAgICAgRWRpdCA8Y29kZT5zcmMvQXBwLiR7dGhpcy5maWxlRXh0fTwvY29kZT4gYW5kIHNhdmUgdG8gcmVsb2FkLmAsXG4gICAgICBcIiAgICAgICAgPC9wPlwiLFxuICAgICAgJyAgICAgICAgPGEgY2xhc3NOYW1lPVwiQXBwLWxpbmtcIicsXG4gICAgICAnICAgICAgICAgIGhyZWY9XCJodHRwczovL3JlYWN0anMub3JnXCInLFxuICAgICAgJyAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIicsXG4gICAgICAnICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIicsXG4gICAgICBcIiAgICAgICAgPlwiLFxuICAgICAgXCIgICAgICAgICAgTGVhcm4gUmVhY3RcIixcbiAgICAgIFwiICAgICAgICA8L2E+XCIsXG4gICAgICBcIiAgICAgIDwvaGVhZGVyPlwiLFxuICAgICAgXCIgICAgPC9kaXY+XCIsXG4gICAgICBcIiAgKTtcIixcbiAgICAgIFwifVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiZXhwb3J0IGRlZmF1bHQgQXBwO1wiLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgY29uc3QgYXBwQ3NzID0gW1xuICAgICAgXCIuQXBwIHtcIixcbiAgICAgIFwiICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgICBcIn1cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIi5BcHAtbG9nbyB7XCIsXG4gICAgICBcIiAgaGVpZ2h0OiA0MHZtaW47XCIsXG4gICAgICBcIiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgICBcIn1cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkge1wiLFxuICAgICAgXCIgIC5BcHAtbG9nbyB7XCIsXG4gICAgICBcIiAgICBhbmltYXRpb246IEFwcC1sb2dvLXNwaW4gaW5maW5pdGUgMjBzIGxpbmVhcjtcIixcbiAgICAgIFwiICB9XCIsXG4gICAgICBcIn1cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIi5BcHAtaGVhZGVyIHtcIixcbiAgICAgIFwiICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYzM0O1wiLFxuICAgICAgXCIgIG1pbi1oZWlnaHQ6IDEwMHZoO1wiLFxuICAgICAgXCIgIGRpc3BsYXk6IGZsZXg7XCIsXG4gICAgICBcIiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIixcbiAgICAgIFwiICBhbGlnbi1pdGVtczogY2VudGVyO1wiLFxuICAgICAgXCIgIGp1c3RpZnktY29udGVudDogY2VudGVyO1wiLFxuICAgICAgXCIgIGZvbnQtc2l6ZTogY2FsYygxMHB4ICsgMnZtaW4pO1wiLFxuICAgICAgXCIgIGNvbG9yOiB3aGl0ZTtcIixcbiAgICAgIFwifVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiLkFwcC1saW5rIHtcIixcbiAgICAgIFwiICBjb2xvcjogIzYxZGFmYjtcIixcbiAgICAgIFwifVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiQGtleWZyYW1lcyBBcHAtbG9nby1zcGluIHtcIixcbiAgICAgIFwiICBmcm9tIHtcIixcbiAgICAgIFwiICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1wiLFxuICAgICAgXCIgIH1cIixcbiAgICAgIFwiICB0byB7XCIsXG4gICAgICBcIiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1wiLFxuICAgICAgXCIgIH1cIixcbiAgICAgIFwifVwiLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgY29uc3QgYXBwVGVzdEpzeCA9IFtcbiAgICAgIFwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcIixcbiAgICAgIFwiaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcIixcbiAgICAgIFwiaW1wb3J0IEFwcCBmcm9tICcuL0FwcCc7XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCJ0ZXN0KCdyZW5kZXJzIGxlYXJuIHJlYWN0IGxpbmsnLCAoKSA9PiB7XCIsXG4gICAgICBcIiAgcmVuZGVyKDxBcHAgLz4pO1wiLFxuICAgICAgXCIgIGNvbnN0IGxpbmtFbGVtZW50ID0gc2NyZWVuLmdldEJ5VGV4dCgvbGVhcm4gcmVhY3QvaSk7XCIsXG4gICAgICBcIiAgZXhwZWN0KGxpbmtFbGVtZW50KS50b0JlSW5UaGVEb2N1bWVudCgpO1wiLFxuICAgICAgXCJ9KTtcIixcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIGNvbnN0IGluZGV4SnN4ID0gW1xuICAgICAgXCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1wiLFxuICAgICAgXCJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcIixcbiAgICAgIFwiaW1wb3J0ICcuL2luZGV4LmNzcyc7XCIsXG4gICAgICBcImltcG9ydCBBcHAgZnJvbSAnLi9BcHAnO1wiLFxuICAgICAgXCJpbXBvcnQgcmVwb3J0V2ViVml0YWxzIGZyb20gJy4vcmVwb3J0V2ViVml0YWxzJztcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIlJlYWN0RE9NLnJlbmRlcihcIixcbiAgICAgIFwiICA8UmVhY3QuU3RyaWN0TW9kZT5cIixcbiAgICAgIFwiICAgIDxBcHAgLz5cIixcbiAgICAgIFwiICA8L1JlYWN0LlN0cmljdE1vZGU+LFwiLFxuICAgICAgXCIgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290JylcIixcbiAgICAgIFwiKTtcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIi8vIElmIHlvdSB3YW50IHRvIHN0YXJ0IG1lYXN1cmluZyBwZXJmb3JtYW5jZSBpbiB5b3VyIGFwcCwgcGFzcyBhIGZ1bmN0aW9uXCIsXG4gICAgICBcIi8vIHRvIGxvZyByZXN1bHRzIChmb3IgZXhhbXBsZTogcmVwb3J0V2ViVml0YWxzKGNvbnNvbGUubG9nKSlcIixcbiAgICAgIFwiLy8gb3Igc2VuZCB0byBhbiBhbmFseXRpY3MgZW5kcG9pbnQuIExlYXJuIG1vcmU6IGh0dHBzOi8vYml0Lmx5L0NSQS12aXRhbHNcIixcbiAgICAgIFwicmVwb3J0V2ViVml0YWxzKCk7XCIsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICBjb25zdCBpbmRleENzcyA9IFtcbiAgICAgIFwiYm9keSB7XCIsXG4gICAgICBcIiAgbWFyZ2luOiAwO1wiLFxuICAgICAgXCIgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCAnT3h5Z2VuJyxcIixcbiAgICAgIFwiICAgICdVYnVudHUnLCAnQ2FudGFyZWxsJywgJ0ZpcmEgU2FucycsICdEcm9pZCBTYW5zJywgJ0hlbHZldGljYSBOZXVlJyxcIixcbiAgICAgIFwiICAgIHNhbnMtc2VyaWY7XCIsXG4gICAgICBcIiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XCIsXG4gICAgICBcIiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcIixcbiAgICAgIFwifVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiY29kZSB7XCIsXG4gICAgICBcIiAgZm9udC1mYW1pbHk6IHNvdXJjZS1jb2RlLXBybywgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsXCIsXG4gICAgICBcIiAgICBtb25vc3BhY2U7XCIsXG4gICAgICBcIn1cIixcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIGNvbnN0IHJlcG9ydFdlYlZpdGFsc0pzID0gW1xuICAgICAgXCJpbXBvcnQgeyBSZXBvcnRIYW5kbGVyIH0gZnJvbSAnd2ViLXZpdGFscyc7XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCJjb25zdCByZXBvcnRXZWJWaXRhbHMgPSAob25QZXJmRW50cnk/OiBSZXBvcnRIYW5kbGVyKSA9PiB7XCIsXG4gICAgICBcIiAgaWYgKG9uUGVyZkVudHJ5ICYmIG9uUGVyZkVudHJ5IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcIixcbiAgICAgIFwiICAgIGltcG9ydCgnd2ViLXZpdGFscycpLnRoZW4oKHsgZ2V0Q0xTLCBnZXRGSUQsIGdldEZDUCwgZ2V0TENQLCBnZXRUVEZCIH0pID0+IHtcIixcbiAgICAgIFwiICAgICAgZ2V0Q0xTKG9uUGVyZkVudHJ5KTtcIixcbiAgICAgIFwiICAgICAgZ2V0RklEKG9uUGVyZkVudHJ5KTtcIixcbiAgICAgIFwiICAgICAgZ2V0RkNQKG9uUGVyZkVudHJ5KTtcIixcbiAgICAgIFwiICAgICAgZ2V0TENQKG9uUGVyZkVudHJ5KTtcIixcbiAgICAgIFwiICAgICAgZ2V0VFRGQihvblBlcmZFbnRyeSk7XCIsXG4gICAgICBcIiAgICB9KTtcIixcbiAgICAgIFwiICB9XCIsXG4gICAgICBcIn1cIixcbiAgICAgIFwiXCIsXG4gICAgICBcImV4cG9ydCBkZWZhdWx0IHJlcG9ydFdlYlZpdGFscztcIixcbiAgICBdO1xuXG4gICAgY29uc3Qgc2V0dXBUZXN0c0pzID0gW1xuICAgICAgXCIvLyBqZXN0LWRvbSBhZGRzIGN1c3RvbSBqZXN0IG1hdGNoZXJzIGZvciBhc3NlcnRpbmcgb24gRE9NIG5vZGVzLlwiLFxuICAgICAgXCIvLyBhbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlOlwiLFxuICAgICAgXCIvLyBleHBlY3QoZWxlbWVudCkudG9IYXZlVGV4dENvbnRlbnQoL3JlYWN0L2kpXCIsXG4gICAgICBcIi8vIGxlYXJuIG1vcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb21cIixcbiAgICAgIFwiaW1wb3J0ICdAdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tJztcIixcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIC8vIGpzL3RzIG5vdCBqc3gvdHN4XG4gICAgY29uc3QgZmlsZUV4dFdpdGhvdXRYID0gdGhpcy5maWxlRXh0LnJlcGxhY2UoXCJ4XCIsIFwiXCIpO1xuXG4gICAgbmV3IFNhbXBsZURpcihwcm9qZWN0LCB0aGlzLnNyY2Rpciwge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgXCJsb2dvLnN2Z1wiOiBsb2dvU3ZnLmpvaW4oXCJcXG5cIiksXG4gICAgICAgIFtcIkFwcC5cIiArIHRoaXMuZmlsZUV4dF06IGFwcEpzeC5qb2luKFwiXFxuXCIpLFxuICAgICAgICBbXCJBcHAudGVzdC5cIiArIHRoaXMuZmlsZUV4dF06IGFwcFRlc3RKc3guam9pbihcIlxcblwiKSxcbiAgICAgICAgXCJBcHAuY3NzXCI6IGFwcENzcy5qb2luKFwiXFxuXCIpLFxuICAgICAgICBbXCJpbmRleC5cIiArIHRoaXMuZmlsZUV4dF06IGluZGV4SnN4LmpvaW4oXCJcXG5cIiksXG4gICAgICAgIFwiaW5kZXguY3NzXCI6IGluZGV4Q3NzLmpvaW4oXCJcXG5cIiksXG4gICAgICAgIFtcInJlcG9ydFdlYlZpdGFscy5cIiArIGZpbGVFeHRXaXRob3V0WF06IHJlcG9ydFdlYlZpdGFsc0pzLmpvaW4oXCJcXG5cIiksXG4gICAgICAgIFtcInNldHVwVGVzdHMuXCIgKyBmaWxlRXh0V2l0aG91dFhdOiBzZXR1cFRlc3RzSnMuam9pbihcIlxcblwiKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdFR5cGVEZWZPcHRpb25zIGV4dGVuZHMgRmlsZUJhc2VPcHRpb25zIHt9XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFR5cGVEZWYgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IFJlYWN0VHlwZVNjcmlwdFByb2plY3QsXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSZWFjdFR5cGVEZWZPcHRpb25zID0ge31cbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCwgZmlsZVBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KF86IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIFsnLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJyZWFjdC1zY3JpcHRzXCIgLz4nXS5qb2luKFwiXFxuXCIpO1xuICB9XG59XG4iXX0=
@@ -38,5 +38,5 @@ class TailwindConfig {
38
38
  }
39
39
  exports.TailwindConfig = TailwindConfig;
40
40
  _a = JSII_RTTI_SYMBOL_1;
41
- TailwindConfig[_a] = { fqn: "projen.web.TailwindConfig", version: "0.51.9" };
41
+ TailwindConfig[_a] = { fqn: "projen.web.TailwindConfig", version: "0.51.13" };
42
42
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbHdpbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViL3RhaWx3aW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esa0NBQW1DOzs7Ozs7Ozs7O0FBUW5DLE1BQWEsY0FBYzs7OztJQUl6QixZQUFZLE9BQW9CLEVBQUUsT0FBK0I7O1FBQy9ELElBQUksQ0FBQyxRQUFRLFNBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsbUNBQUksc0JBQXNCLENBQUM7UUFFNUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGVBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvQyxHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2dCQUNELFFBQVEsRUFBRTtvQkFDUixNQUFNLEVBQUUsRUFBRTtpQkFDWDtnQkFDRCxPQUFPLEVBQUUsRUFBRTthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBQSxPQUFPLENBQUMsU0FBUywwQ0FBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDbEQsQ0FBQzs7QUF0Qkgsd0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi4vanNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhaWx3aW5kQ29uZmlnT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZmlsZU5hbWU/OiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBUYWlsd2luZENvbmZpZyB7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogSnNvbkZpbGU7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM/OiBUYWlsd2luZENvbmZpZ09wdGlvbnMpIHtcbiAgICB0aGlzLmZpbGVOYW1lID0gb3B0aW9ucz8uZmlsZU5hbWUgPz8gXCJ0YWlsd2luZC5jb25maWcuanNvblwiO1xuXG4gICAgdGhpcy5maWxlID0gbmV3IEpzb25GaWxlKHByb2plY3QsIHRoaXMuZmlsZU5hbWUsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBwdXJnZTogW10sXG4gICAgICAgIGRhcmtNb2RlOiBmYWxzZSxcbiAgICAgICAgdGhlbWU6IHtcbiAgICAgICAgICBleHRlbmQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB2YXJpYW50czoge1xuICAgICAgICAgIGV4dGVuZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IFtdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHByb2plY3QubnBtaWdub3JlPy5leGNsdWRlKGAvJHt0aGlzLmZpbGVOYW1lfWApO1xuICB9XG59XG4iXX0=
package/lib/xmlfile.js CHANGED
@@ -42,5 +42,5 @@ class XmlFile extends object_file_1.ObjectFile {
42
42
  }
43
43
  exports.XmlFile = XmlFile;
44
44
  _a = JSII_RTTI_SYMBOL_1;
45
- XmlFile[_a] = { fqn: "projen.XmlFile", version: "0.51.9" };
45
+ XmlFile[_a] = { fqn: "projen.XmlFile", version: "0.51.13" };
46
46
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy94bWxmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWtEO0FBRWxELCtDQUE4RDs7Ozs7Ozs7O0FBTzlELE1BQWEsT0FBUSxTQUFRLHdCQUFVOzs7O0lBQ3JDLFlBQ0UsT0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsVUFBMEIsRUFBRTtRQUU1QixLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7SUFFUyxpQkFBaUIsQ0FBQyxRQUFtQjtRQUM3QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsTUFBTSxTQUFTLEdBQUcsb0JBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDMUQsV0FBVyxFQUFFLElBQUk7WUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxTQUFTO1lBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxPQUFPLENBQUMsYUFBYSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzlELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQzs7QUF4QkgsMEJBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlIGFzIGNyZWF0ZXhtbCB9IGZyb20gXCJ4bWxidWlsZGVyMlwiO1xuaW1wb3J0IHsgSVJlc29sdmVyIH0gZnJvbSBcIi4vZmlsZVwiO1xuaW1wb3J0IHsgT2JqZWN0RmlsZSwgT2JqZWN0RmlsZU9wdGlvbnMgfSBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIFhtbEZpbGVPcHRpb25zIGV4dGVuZHMgT2JqZWN0RmlsZU9wdGlvbnMge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBYbWxGaWxlIGV4dGVuZHMgT2JqZWN0RmlsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IFByb2plY3QsXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBYbWxGaWxlT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHN1cGVyKHByb2plY3QsIGZpbGVQYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQ29udGVudChyZXNvbHZlcjogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvYmogPSBzdXBlci5zeW50aGVzaXplQ29udGVudChyZXNvbHZlcik7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeG1sU3RyaW5nID0gY3JlYXRleG1sKHsgZW5jb2Rpbmc6IFwiVVRGLThcIiB9LCBvYmopLmVuZCh7XG4gICAgICBwcmV0dHlQcmludDogdHJ1ZSxcbiAgICAgIGluZGVudDogXCIgXCIucmVwZWF0KDQpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHhtbFN0cmluZyxcbiAgICAgIC4uLih0aGlzLm1hcmtlciA/IFtgPCEtLSAke1htbEZpbGUuUFJPSkVOX01BUktFUn0gLS0+YF0gOiBbXSksXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG59XG4iXX0=
package/lib/yaml.js CHANGED
@@ -41,5 +41,5 @@ class YamlFile extends object_file_1.ObjectFile {
41
41
  }
42
42
  exports.YamlFile = YamlFile;
43
43
  _a = JSII_RTTI_SYMBOL_1;
44
- YamlFile[_a] = { fqn: "projen.YamlFile", version: "0.51.9" };
44
+ YamlFile[_a] = { fqn: "projen.YamlFile", version: "0.51.13" };
45
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy95YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBRTdCLCtDQUE4RDs7Ozs7O0FBVTlELE1BQWEsUUFBUyxTQUFRLHdCQUFVOzs7O0lBSXRDLFlBQVksT0FBZ0IsRUFBRSxRQUFnQixFQUFFLE9BQXdCOztRQUN0RSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxTQUFHLE9BQU8sQ0FBQyxTQUFTLG1DQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7Ozs7SUFFUyxpQkFBaUIsQ0FBQyxRQUFtQjtRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsT0FBTztZQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxFQUFFO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixNQUFNLEVBQUUsQ0FBQztnQkFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQztTQUNILENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQzs7QUF2QkgsNEJBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgWUFNTCBmcm9tIFwieWFtbFwiO1xuaW1wb3J0IHsgSVJlc29sdmVyIH0gZnJvbSBcIi4vZmlsZVwiO1xuaW1wb3J0IHsgT2JqZWN0RmlsZSwgT2JqZWN0RmlsZU9wdGlvbnMgfSBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBZYW1sRmlsZU9wdGlvbnMgZXh0ZW5kcyBPYmplY3RGaWxlT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBZYW1sRmlsZSBleHRlbmRzIE9iamVjdEZpbGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBsaW5lV2lkdGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBmaWxlUGF0aDogc3RyaW5nLCBvcHRpb25zOiBZYW1sRmlsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBmaWxlUGF0aCwgb3B0aW9ucyk7XG4gICAgdGhpcy5saW5lV2lkdGggPSBvcHRpb25zLmxpbmVXaWR0aCA/PyAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyOiBJUmVzb2x2ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGpzb24gPSBzdXBlci5zeW50aGVzaXplQ29udGVudChyZXNvbHZlcik7XG4gICAgaWYgKCFqc29uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tYXJrZXIgPyBbYCMgJHtZYW1sRmlsZS5QUk9KRU5fTUFSS0VSfWBdIDogW10pLFxuICAgICAgXCJcIixcbiAgICAgIFlBTUwuc3RyaW5naWZ5KEpTT04ucGFyc2UoanNvbiksIHtcbiAgICAgICAgaW5kZW50OiAyLFxuICAgICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVdpZHRoLFxuICAgICAgfSksXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG59XG4iXX0=
@@ -14,6 +14,7 @@
14
14
  "func-style": 0,
15
15
  "global-require": 1,
16
16
  "id-length": [2, { "min": 1, "max": 30 }],
17
+ "max-lines": [2, 350],
17
18
  "max-lines-per-function": 0,
18
19
  "max-nested-callbacks": 0,
19
20
  "max-params": 0,
@@ -6,10 +6,13 @@ var path = require('path');
6
6
  var fs = require('fs');
7
7
 
8
8
  if (
9
- !process.argv
10
- || process.argv.length < 2
11
- || (process.argv[1] !== __filename && fs.statSync(process.argv[1]).ino !== fs.statSync(__filename).ino)
12
- || (process.env._ && path.resolve(process.env._) !== __filename)
9
+ String(process.env.npm_lifecycle_script).slice(0, 8) !== 'resolve '
10
+ && (
11
+ !process.argv
12
+ || process.argv.length < 2
13
+ || (process.argv[1] !== __filename && fs.statSync(process.argv[1]).ino !== fs.statSync(__filename).ino)
14
+ || (process.env._ && path.resolve(process.env._) !== __filename)
15
+ )
13
16
  ) {
14
17
  console.error('Error: `resolve` must be run directly as an executable');
15
18
  process.exit(1);
@@ -1,4 +1,5 @@
1
1
  var fs = require('fs');
2
+ var getHomedir = require('./homedir');
2
3
  var path = require('path');
3
4
  var caller = require('./caller');
4
5
  var nodeModulesPaths = require('./node-modules-paths');
@@ -7,6 +8,14 @@ var isCore = require('is-core-module');
7
8
 
8
9
  var realpathFS = fs.realpath && typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath;
9
10
 
11
+ var homedir = getHomedir();
12
+ var defaultPaths = function () {
13
+ return [
14
+ path.join(homedir, '.node_modules'),
15
+ path.join(homedir, '.node_libraries')
16
+ ];
17
+ };
18
+
10
19
  var defaultIsFile = function isFile(file, cb) {
11
20
  fs.stat(file, function (err, stat) {
12
21
  if (!err) {
@@ -98,7 +107,7 @@ module.exports = function resolve(x, options, callback) {
98
107
  var basedir = opts.basedir || path.dirname(caller());
99
108
  var parent = opts.filename || basedir;
100
109
 
101
- opts.paths = opts.paths || [];
110
+ opts.paths = opts.paths || defaultPaths();
102
111
 
103
112
  // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
104
113
  var absoluteStart = path.resolve(basedir);
@@ -5,12 +5,12 @@
5
5
  "node:assert/strict": ">= 16",
6
6
  "async_hooks": ">= 8",
7
7
  "node:async_hooks": [">= 14.18 && < 15", ">= 16"],
8
- "buffer_ieee754": "< 0.9.7",
8
+ "buffer_ieee754": ">= 0.5 && < 0.9.7",
9
9
  "buffer": true,
10
10
  "node:buffer": [">= 14.18 && < 15", ">= 16"],
11
11
  "child_process": true,
12
12
  "node:child_process": [">= 14.18 && < 15", ">= 16"],
13
- "cluster": true,
13
+ "cluster": ">= 0.5",
14
14
  "node:cluster": [">= 14.18 && < 15", ">= 16"],
15
15
  "console": true,
16
16
  "node:console": [">= 14.18 && < 15", ">= 16"],
@@ -77,7 +77,7 @@
77
77
  "node:perf_hooks": [">= 14.18 && < 15", ">= 16"],
78
78
  "process": ">= 1",
79
79
  "node:process": [">= 14.18 && < 15", ">= 16"],
80
- "punycode": true,
80
+ "punycode": ">= 0.5",
81
81
  "node:punycode": [">= 14.18 && < 15", ">= 16"],
82
82
  "querystring": true,
83
83
  "node:querystring": [">= 14.18 && < 15", ">= 16"],
@@ -110,7 +110,7 @@
110
110
  "node:stream/web": ">= 16.5",
111
111
  "string_decoder": true,
112
112
  "node:string_decoder": [">= 14.18 && < 15", ">= 16"],
113
- "sys": [">= 0.6 && < 0.7", ">= 0.8"],
113
+ "sys": [">= 0.4 && < 0.7", ">= 0.8"],
114
114
  "node:sys": [">= 14.18 && < 15", ">= 16"],
115
115
  "timers": true,
116
116
  "node:timers": [">= 14.18 && < 15", ">= 16"],
@@ -147,6 +147,6 @@
147
147
  "wasi": ">= 13.4 && < 13.5",
148
148
  "worker_threads": ">= 11.7",
149
149
  "node:worker_threads": [">= 14.18 && < 15", ">= 16"],
150
- "zlib": true,
150
+ "zlib": ">= 0.5",
151
151
  "node:zlib": [">= 14.18 && < 15", ">= 16"]
152
152
  }
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var os = require('os');
4
+
5
+ // adapted from https://github.com/sindresorhus/os-homedir/blob/11e089f4754db38bb535e5a8416320c4446e8cfd/index.js
6
+
7
+ module.exports = os.homedir || function homedir() {
8
+ var home = process.env.HOME;
9
+ var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME;
10
+
11
+ if (process.platform === 'win32') {
12
+ return process.env.USERPROFILE || process.env.HOMEDRIVE + process.env.HOMEPATH || home || null;
13
+ }
14
+
15
+ if (process.platform === 'darwin') {
16
+ return home || (user ? '/Users/' + user : null);
17
+ }
18
+
19
+ if (process.platform === 'linux') {
20
+ return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null)); // eslint-disable-line no-extra-parens
21
+ }
22
+
23
+ return home || null;
24
+ };
@@ -1,12 +1,21 @@
1
1
  var isCore = require('is-core-module');
2
2
  var fs = require('fs');
3
3
  var path = require('path');
4
+ var getHomedir = require('./homedir');
4
5
  var caller = require('./caller');
5
6
  var nodeModulesPaths = require('./node-modules-paths');
6
7
  var normalizeOptions = require('./normalize-options');
7
8
 
8
9
  var realpathFS = fs.realpathSync && typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync;
9
10
 
11
+ var homedir = getHomedir();
12
+ var defaultPaths = function () {
13
+ return [
14
+ path.join(homedir, '.node_modules'),
15
+ path.join(homedir, '.node_libraries')
16
+ ];
17
+ };
18
+
10
19
  var defaultIsFile = function isFile(file) {
11
20
  try {
12
21
  var stat = fs.statSync(file, { throwIfNoEntry: false });
@@ -82,7 +91,7 @@ module.exports = function resolveSync(x, options) {
82
91
  var basedir = opts.basedir || path.dirname(caller());
83
92
  var parent = opts.filename || basedir;
84
93
 
85
- opts.paths = opts.paths || [];
94
+ opts.paths = opts.paths || defaultPaths();
86
95
 
87
96
  // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
88
97
  var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "resolve",
3
3
  "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously",
4
- "version": "1.21.0",
4
+ "version": "1.22.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git://github.com/browserify/resolve.git"
@@ -29,16 +29,21 @@
29
29
  "test:multirepo": "cd ./test/resolver/multirepo && npm install && npm test"
30
30
  },
31
31
  "devDependencies": {
32
- "@ljharb/eslint-config": "^20.1.0",
32
+ "@ljharb/eslint-config": "^20.2.0",
33
33
  "array.prototype.map": "^1.0.4",
34
- "aud": "^1.1.5",
34
+ "aud": "^2.0.0",
35
+ "copy-dir": "^1.3.0",
35
36
  "eclint": "^2.8.1",
36
- "eslint": "^8.6.0",
37
+ "eslint": "^8.7.0",
37
38
  "in-publish": "^2.0.1",
39
+ "mkdirp": "^0.5.5",
40
+ "mv": "^2.1.1",
38
41
  "object-keys": "^1.1.1",
42
+ "rimraf": "^2.7.1",
39
43
  "safe-publish-latest": "^2.0.0",
40
44
  "tap": "0.4.13",
41
- "tape": "^5.4.0"
45
+ "tape": "^5.4.1",
46
+ "tmp": "^0.0.31"
42
47
  },
43
48
  "license": "MIT",
44
49
  "author": {
@@ -50,7 +55,7 @@
50
55
  "url": "https://github.com/sponsors/ljharb"
51
56
  },
52
57
  "dependencies": {
53
- "is-core-module": "^2.8.0",
58
+ "is-core-module": "^2.8.1",
54
59
  "path-parse": "^1.0.7",
55
60
  "supports-preserve-symlinks-flag": "^1.0.0"
56
61
  }
@@ -0,0 +1,127 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs');
4
+ var homedir = require('../lib/homedir');
5
+ var path = require('path');
6
+
7
+ var test = require('tape');
8
+ var mkdirp = require('mkdirp');
9
+ var rimraf = require('rimraf');
10
+ var mv = require('mv');
11
+ var copyDir = require('copy-dir');
12
+ var tmp = require('tmp');
13
+
14
+ var HOME = homedir();
15
+
16
+ var hnm = path.join(HOME, '.node_modules');
17
+ var hnl = path.join(HOME, '.node_libraries');
18
+
19
+ var resolve = require('../async');
20
+
21
+ function makeDir(t, dir, cb) {
22
+ mkdirp(dir, function (err) {
23
+ if (err) {
24
+ cb(err);
25
+ } else {
26
+ t.teardown(function cleanup() {
27
+ rimraf.sync(dir);
28
+ });
29
+ cb();
30
+ }
31
+ });
32
+ }
33
+
34
+ function makeTempDir(t, dir, cb) {
35
+ if (fs.existsSync(dir)) {
36
+ var tmpResult = tmp.dirSync();
37
+ t.teardown(tmpResult.removeCallback);
38
+ var backup = path.join(tmpResult.name, path.basename(dir));
39
+ mv(dir, backup, function (err) {
40
+ if (err) {
41
+ cb(err);
42
+ } else {
43
+ t.teardown(function () {
44
+ mv(backup, dir, cb);
45
+ });
46
+ makeDir(t, dir, cb);
47
+ }
48
+ });
49
+ } else {
50
+ makeDir(t, dir, cb);
51
+ }
52
+ }
53
+
54
+ test('homedir module paths', function (t) {
55
+ t.plan(7);
56
+
57
+ makeTempDir(t, hnm, function (err) {
58
+ t.error(err, 'no error with HNM temp dir');
59
+ if (err) {
60
+ return t.end();
61
+ }
62
+
63
+ var bazHNMDir = path.join(hnm, 'baz');
64
+ var dotMainDir = path.join(hnm, 'dot_main');
65
+ copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir);
66
+ copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir);
67
+
68
+ var bazPkg = { name: 'baz', main: 'quux.js' };
69
+ var dotMainPkg = { main: 'index' };
70
+
71
+ var bazHNMmain = path.join(bazHNMDir, 'quux.js');
72
+ t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
73
+ var dotMainMain = path.join(dotMainDir, 'index.js');
74
+ t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`');
75
+
76
+ makeTempDir(t, hnl, function (err) {
77
+ t.error(err, 'no error with HNL temp dir');
78
+ if (err) {
79
+ return t.end();
80
+ }
81
+ var bazHNLDir = path.join(hnl, 'baz');
82
+ copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir);
83
+
84
+ var dotSlashMainDir = path.join(hnl, 'dot_slash_main');
85
+ var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js');
86
+ var dotSlashMainPkg = { main: 'index' };
87
+ copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir);
88
+
89
+ t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
90
+ t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`');
91
+
92
+ t.test('with temp dirs', function (st) {
93
+ st.plan(3);
94
+
95
+ st.test('just in `$HOME/.node_modules`', function (s2t) {
96
+ s2t.plan(3);
97
+
98
+ resolve('dot_main', function (err, res, pkg) {
99
+ s2t.error(err, 'no error resolving `dot_main`');
100
+ s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`');
101
+ s2t.deepEqual(pkg, dotMainPkg);
102
+ });
103
+ });
104
+
105
+ st.test('just in `$HOME/.node_libraries`', function (s2t) {
106
+ s2t.plan(3);
107
+
108
+ resolve('dot_slash_main', function (err, res, pkg) {
109
+ s2t.error(err, 'no error resolving `dot_slash_main`');
110
+ s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`');
111
+ s2t.deepEqual(pkg, dotSlashMainPkg);
112
+ });
113
+ });
114
+
115
+ st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) {
116
+ s2t.plan(3);
117
+
118
+ resolve('baz', function (err, res, pkg) {
119
+ s2t.error(err, 'no error resolving `baz`');
120
+ s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both');
121
+ s2t.deepEqual(pkg, bazPkg);
122
+ });
123
+ });
124
+ });
125
+ });
126
+ });
127
+ });
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs');
4
+ var homedir = require('../lib/homedir');
5
+ var path = require('path');
6
+
7
+ var test = require('tape');
8
+ var mkdirp = require('mkdirp');
9
+ var rimraf = require('rimraf');
10
+ var mv = require('mv');
11
+ var copyDir = require('copy-dir');
12
+ var tmp = require('tmp');
13
+
14
+ var HOME = homedir();
15
+
16
+ var hnm = path.join(HOME, '.node_modules');
17
+ var hnl = path.join(HOME, '.node_libraries');
18
+
19
+ var resolve = require('../sync');
20
+
21
+ function makeDir(t, dir, cb) {
22
+ mkdirp(dir, function (err) {
23
+ if (err) {
24
+ cb(err);
25
+ } else {
26
+ t.teardown(function cleanup() {
27
+ rimraf.sync(dir);
28
+ });
29
+ cb();
30
+ }
31
+ });
32
+ }
33
+
34
+ function makeTempDir(t, dir, cb) {
35
+ if (fs.existsSync(dir)) {
36
+ var tmpResult = tmp.dirSync();
37
+ t.teardown(tmpResult.removeCallback);
38
+ var backup = path.join(tmpResult.name, path.basename(dir));
39
+ mv(dir, backup, function (err) {
40
+ if (err) {
41
+ cb(err);
42
+ } else {
43
+ t.teardown(function () {
44
+ mv(backup, dir, cb);
45
+ });
46
+ makeDir(t, dir, cb);
47
+ }
48
+ });
49
+ } else {
50
+ makeDir(t, dir, cb);
51
+ }
52
+ }
53
+
54
+ test('homedir module paths', function (t) {
55
+ t.plan(7);
56
+
57
+ makeTempDir(t, hnm, function (err) {
58
+ t.error(err, 'no error with HNM temp dir');
59
+ if (err) {
60
+ return t.end();
61
+ }
62
+
63
+ var bazHNMDir = path.join(hnm, 'baz');
64
+ var dotMainDir = path.join(hnm, 'dot_main');
65
+ copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir);
66
+ copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir);
67
+
68
+ var bazHNMmain = path.join(bazHNMDir, 'quux.js');
69
+ t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
70
+ var dotMainMain = path.join(dotMainDir, 'index.js');
71
+ t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`');
72
+
73
+ makeTempDir(t, hnl, function (err) {
74
+ t.error(err, 'no error with HNL temp dir');
75
+ if (err) {
76
+ return t.end();
77
+ }
78
+ var bazHNLDir = path.join(hnl, 'baz');
79
+ copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir);
80
+
81
+ var dotSlashMainDir = path.join(hnl, 'dot_slash_main');
82
+ var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js');
83
+ copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir);
84
+
85
+ t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
86
+ t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`');
87
+
88
+ t.test('with temp dirs', function (st) {
89
+ st.plan(3);
90
+
91
+ st.test('just in `$HOME/.node_modules`', function (s2t) {
92
+ s2t.plan(1);
93
+
94
+ var res = resolve('dot_main');
95
+ s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`');
96
+ });
97
+
98
+ st.test('just in `$HOME/.node_libraries`', function (s2t) {
99
+ s2t.plan(1);
100
+
101
+ var res = resolve('dot_slash_main');
102
+ s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`');
103
+ });
104
+
105
+ st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) {
106
+ s2t.plan(1);
107
+
108
+ var res = resolve('baz');
109
+ s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both');
110
+ });
111
+ });
112
+ });
113
+ });
114
+ });