diff --git a/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart b/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart index 3fe46487e..2f1eab3df 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart @@ -1,3 +1,4 @@ +export 'src/copy_workspace_pubspec_lock.dart'; export 'src/create_bundle.dart'; export 'src/create_external_packages_folder.dart'; export 'src/dart_pub_get.dart'; @@ -6,3 +7,6 @@ export 'src/exit_overrides.dart'; export 'src/get_internal_path_dependencies.dart'; export 'src/get_pubspec_lock.dart'; export 'src/uses_workspace_resolution.dart'; + +/// A void callback function (e.g. `void Function()`). +typedef VoidCallback = void Function(); diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart b/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart new file mode 100644 index 000000000..05cb61719 --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart @@ -0,0 +1,79 @@ +import 'dart:io'; +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; +import 'package:mason/mason.dart'; +import 'package:path/path.dart' as path; +import 'package:yaml/yaml.dart'; + +/// Copies the pubspec.lock from the workspace root into the project directory +/// in order to ensure the production build uses the exact same versions of all +/// dependencies. +VoidCallback copyWorkspacePubspecLock( + HookContext context, { + required String projectDirectory, + required void Function(int exitCode) exit, +}) { + final workspaceRoot = _getWorkspaceRoot(projectDirectory); + if (workspaceRoot == null) { + context.logger.err( + 'Unable to determine workspace root for $projectDirectory', + ); + exit(1); + return () {}; + } + + final pubspecLockFile = File(path.join(workspaceRoot.path, 'pubspec.lock')); + if (!pubspecLockFile.existsSync()) return () {}; + + try { + pubspecLockFile.copySync(path.join(projectDirectory, 'pubspec.lock')); + return () { + File(path.join(projectDirectory, 'pubspec.lock')).delete().ignore(); + }; + } on Exception catch (error) { + context.logger.err('$error'); + exit(1); + return () {}; + } +} + +/// Returns the root directory of the nearest Dart workspace. +Directory? _getWorkspaceRoot(String workingDirectory) { + final file = _findNearestAncestor( + where: (path) => _getWorkspaceRootPubspecYaml(cwd: Directory(path)), + cwd: Directory(workingDirectory), + ); + if (file == null || !file.existsSync()) return null; + return Directory(path.dirname(file.path)); +} + +/// The workspace root `pubspec.yaml` file for this project. +File? _getWorkspaceRootPubspecYaml({required Directory cwd}) { + try { + final pubspecYamlFile = File(path.join(cwd.path, 'pubspec.yaml')); + if (!pubspecYamlFile.existsSync()) return null; + final pubspec = loadYaml(pubspecYamlFile.readAsStringSync()); + if (pubspec is! YamlMap) return null; + final workspace = pubspec['workspace'] as List?; + if (workspace?.isEmpty ?? true) return null; + return pubspecYamlFile; + } on Exception { + return null; + } +} + +/// Finds nearest ancestor file +/// relative to the [cwd] that satisfies [where]. +File? _findNearestAncestor({ + required File? Function(String path) where, + required Directory cwd, +}) { + Directory? prev; + var dir = cwd; + while (prev?.path != dir.path) { + final file = where(dir.path); + if (file?.existsSync() ?? false) return file; + prev = dir; + dir = dir.parent; + } + return null; +} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart b/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart index 1236fe23e..8ae665165 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart @@ -1,12 +1,10 @@ import 'dart:io'; +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; import 'package:mason/mason.dart'; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart'; import 'package:yaml_edit/yaml_edit.dart'; -/// A void callback function (e.g. `void Function()`). -typedef VoidCallback = void Function(); - /// Opts out of dart workspaces until we can generate per package lockfiles. /// https://github.com/dart-lang/pub/issues/4594 VoidCallback disableWorkspaceResolution( diff --git a/bricks/dart_frog_prod_server/hooks/pre_gen.dart b/bricks/dart_frog_prod_server/hooks/pre_gen.dart index e3f50c410..42eb969a8 100644 --- a/bricks/dart_frog_prod_server/hooks/pre_gen.dart +++ b/bricks/dart_frog_prod_server/hooks/pre_gen.dart @@ -30,6 +30,7 @@ Future preGen( ); VoidCallback? restoreWorkspaceResolution; + VoidCallback? revertPubspecLock; if (usesWorkspaces) { // Disable workspace resolution until we can generate per-package lockfiles. @@ -39,6 +40,13 @@ Future preGen( projectDirectory: projectDirectory.path, exit: exit, ); + // Copy the pubspec.lock from the workspace root to ensure the same versions + // of dependencies are used in the production build. + revertPubspecLock = copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exit, + ); } // We need to make sure that the pubspec.lock file is up to date @@ -94,10 +102,6 @@ Future preGen( onViolationEnd: () => exit(1), ); - final customDockerFile = io.File( - path.join(projectDirectory.path, 'Dockerfile'), - ); - final internalPathDependencies = await getInternalPathDependencies( projectDirectory, ); @@ -108,6 +112,11 @@ Future preGen( copyPath: copyPath, ); + revertPubspecLock?.call(); + + final customDockerFile = io.File( + path.join(projectDirectory.path, 'Dockerfile'), + ); final addDockerfile = !customDockerFile.existsSync(); context.vars = { diff --git a/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart new file mode 100644 index 000000000..74c13de7d --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart @@ -0,0 +1,154 @@ +import 'dart:io'; + +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; + +class _MockHookContext extends Mock implements HookContext {} + +class _MockLogger extends Mock implements Logger {} + +void main() { + group('copyWorkspacePubspecLock', () { + late List exitCalls; + late HookContext context; + late Logger logger; + late Directory projectDirectory; + late Directory rootDirectory; + + setUp(() { + exitCalls = []; + context = _MockHookContext(); + logger = _MockLogger(); + rootDirectory = Directory.systemTemp.createTempSync('root'); + projectDirectory = Directory( + path.join(rootDirectory.path, 'packages', 'project'), + )..createSync(recursive: true); + + when(() => context.logger).thenReturn(logger); + + addTearDown(() { + projectDirectory.delete().ignore(); + rootDirectory.delete().ignore(); + }); + }); + + test('exits with error when unable to determine the workspace root', () { + copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err( + 'Unable to determine workspace root for ${projectDirectory.path}', + ), + ); + }); + + test('exits with error when unable to parse pubspec.yaml', () { + File(path.join(rootDirectory.path, 'pubspec.yaml')) + .writeAsStringSync('invalid pubspec.yaml'); + copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err( + 'Unable to determine workspace root for ${projectDirectory.path}', + ), + ); + }); + + test('does nothing when pubspec.lock does not exist in workspace root', () { + File(path.join(rootDirectory.path, 'pubspec.yaml')).writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + expect(projectDirectory.listSync(), isEmpty); + }); + + test('exits with error when unable to copy lockfile', () { + const pubspecLockContents = ''' +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: +'''; + File(path.join(rootDirectory.path, 'pubspec.yaml')).writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + final file = File(path.join(rootDirectory.path, 'pubspec.lock')) + ..writeAsStringSync(pubspecLockContents); + Process.runSync('chmod', ['000', file.path]); + copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err(any(that: contains('Permission denied'))), + ); + }); + + test('copies pubspec.lock to project directory when found', () { + const pubspecLockContents = ''' +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: +'''; + File(path.join(rootDirectory.path, 'pubspec.yaml')).writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + File(path.join(rootDirectory.path, 'pubspec.lock')) + .writeAsStringSync(pubspecLockContents); + copyWorkspacePubspecLock( + context, + projectDirectory: projectDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + final projectDirectoryContents = projectDirectory.listSync(); + expect(projectDirectoryContents, hasLength(1)); + expect( + projectDirectoryContents.first, + isA().having( + (f) => path.basename(f.path), + 'name', + 'pubspec.lock', + ), + ); + expect( + (projectDirectoryContents.first as File).readAsStringSync(), + equals(pubspecLockContents), + ); + }); + }); +} diff --git a/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart b/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart index d621f622d..6d262e181 100644 --- a/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart +++ b/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart @@ -28,7 +28,13 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "build/lib/dart_frog_prod_server_hooks.dart", "data": - "ZXhwb3J0ICdzcmMvY3JlYXRlX2J1bmRsZS5kYXJ0JzsKZXhwb3J0ICdzcmMvY3JlYXRlX2V4dGVybmFsX3BhY2thZ2VzX2ZvbGRlci5kYXJ0JzsKZXhwb3J0ICdzcmMvZGFydF9wdWJfZ2V0LmRhcnQnOwpleHBvcnQgJ3NyYy9kaXNhYmxlX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwpleHBvcnQgJ3NyYy9leGl0X292ZXJyaWRlcy5kYXJ0JzsKZXhwb3J0ICdzcmMvZ2V0X2ludGVybmFsX3BhdGhfZGVwZW5kZW5jaWVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy91c2VzX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwo=", + "ZXhwb3J0ICdzcmMvY29weV93b3Jrc3BhY2VfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfYnVuZGxlLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfZXh0ZXJuYWxfcGFja2FnZXNfZm9sZGVyLmRhcnQnOwpleHBvcnQgJ3NyYy9kYXJ0X3B1Yl9nZXQuZGFydCc7CmV4cG9ydCAnc3JjL2Rpc2FibGVfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7CmV4cG9ydCAnc3JjL2V4aXRfb3ZlcnJpZGVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfaW50ZXJuYWxfcGF0aF9kZXBlbmRlbmNpZXMuZGFydCc7CmV4cG9ydCAnc3JjL2dldF9wdWJzcGVjX2xvY2suZGFydCc7CmV4cG9ydCAnc3JjL3VzZXNfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7Cg==", + "type": "text" + }, + { + "path": "build/lib/src/copy_workspace_pubspec_lock.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp5YW1sL3lhbWwuZGFydCc7CgovLy8gQ29waWVzIHRoZSBwdWJzcGVjLmxvY2sgZnJvbSB0aGUgd29ya3NwYWNlIHJvb3QgaW50byB0aGUgcHJvamVjdCBkaXJlY3RvcnkKLy8vIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgcHJvZHVjdGlvbiBidWlsZCB1c2VzIHRoZSBleGFjdCBzYW1lIHZlcnNpb25zIG9mIGFsbAovLy8gZGVwZW5kZW5jaWVzLgp2b2lkIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgcmVxdWlyZWQgU3RyaW5nIHByb2plY3REaXJlY3RvcnksCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIHsKICBmaW5hbCB3b3Jrc3BhY2VSb290ID0gX2dldFdvcmtzcGFjZVJvb3QocHJvamVjdERpcmVjdG9yeSk7CiAgaWYgKHdvcmtzcGFjZVJvb3QgPT0gbnVsbCkgewogICAgY29udGV4dC5sb2dnZXIuZXJyKAogICAgICAnVW5hYmxlIHRvIGRldGVybWluZSB3b3Jrc3BhY2Ugcm9vdCBmb3IgJHByb2plY3REaXJlY3RvcnknLAogICAgKTsKICAgIHJldHVybiBleGl0KDEpOwogIH0KCiAgZmluYWwgcHVic3BlY0xvY2tGaWxlID0gRmlsZShwYXRoLmpvaW4od29ya3NwYWNlUm9vdC5wYXRoLCAncHVic3BlYy5sb2NrJykpOwogIGlmICghcHVic3BlY0xvY2tGaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuOwoKICB0cnkgewogICAgcHVic3BlY0xvY2tGaWxlLmNvcHlTeW5jKHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LCAncHVic3BlYy5sb2NrJykpOwogIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlcnJvcikgewogICAgY29udGV4dC5sb2dnZXIuZXJyKCckZXJyb3InKTsKICAgIHJldHVybiBleGl0KDEpOwogIH0KfQoKLy8vIFJldHVybnMgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBuZWFyZXN0IERhcnQgd29ya3NwYWNlLgpEaXJlY3Rvcnk/IF9nZXRXb3Jrc3BhY2VSb290KFN0cmluZyB3b3JraW5nRGlyZWN0b3J5KSB7CiAgZmluYWwgZmlsZSA9IF9maW5kTmVhcmVzdEFuY2VzdG9yKAogICAgd2hlcmU6IChwYXRoKSA9PiBfZ2V0V29ya3NwYWNlUm9vdFB1YnNwZWNZYW1sKGN3ZDogRGlyZWN0b3J5KHBhdGgpKSwKICAgIGN3ZDogRGlyZWN0b3J5KHdvcmtpbmdEaXJlY3RvcnkpLAogICk7CiAgaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHNTeW5jKCkpIHJldHVybiBudWxsOwogIHJldHVybiBEaXJlY3RvcnkocGF0aC5kaXJuYW1lKGZpbGUucGF0aCkpOwp9CgovLy8gVGhlIHdvcmtzcGFjZSByb290IGBwdWJzcGVjLnlhbWxgIGZpbGUgZm9yIHRoaXMgcHJvamVjdC4KRmlsZT8gX2dldFdvcmtzcGFjZVJvb3RQdWJzcGVjWWFtbCh7cmVxdWlyZWQgRGlyZWN0b3J5IGN3ZH0pIHsKICB0cnkgewogICAgZmluYWwgcHVic3BlY1lhbWxGaWxlID0gRmlsZShwYXRoLmpvaW4oY3dkLnBhdGgsICdwdWJzcGVjLnlhbWwnKSk7CiAgICBpZiAoIXB1YnNwZWNZYW1sRmlsZS5leGlzdHNTeW5jKCkpIHJldHVybiBudWxsOwogICAgZmluYWwgcHVic3BlYyA9IGxvYWRZYW1sKHB1YnNwZWNZYW1sRmlsZS5yZWFkQXNTdHJpbmdTeW5jKCkpOwogICAgaWYgKHB1YnNwZWMgaXMhIFlhbWxNYXApIHJldHVybiBudWxsOwogICAgZmluYWwgd29ya3NwYWNlID0gcHVic3BlY1snd29ya3NwYWNlJ10gYXMgTGlzdD87CiAgICBpZiAod29ya3NwYWNlPy5pc0VtcHR5ID8/IHRydWUpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHB1YnNwZWNZYW1sRmlsZTsKICB9IG9uIEV4Y2VwdGlvbiB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBGaW5kcyBuZWFyZXN0IGFuY2VzdG9yIGZpbGUKLy8vIHJlbGF0aXZlIHRvIHRoZSBbY3dkXSB0aGF0IHNhdGlzZmllcyBbd2hlcmVdLgpGaWxlPyBfZmluZE5lYXJlc3RBbmNlc3Rvcih7CiAgcmVxdWlyZWQgRmlsZT8gRnVuY3Rpb24oU3RyaW5nIHBhdGgpIHdoZXJlLAogIHJlcXVpcmVkIERpcmVjdG9yeSBjd2QsCn0pIHsKICBEaXJlY3Rvcnk/IHByZXY7CiAgdmFyIGRpciA9IGN3ZDsKICB3aGlsZSAocHJldj8ucGF0aCAhPSBkaXIucGF0aCkgewogICAgZmluYWwgZmlsZSA9IHdoZXJlKGRpci5wYXRoKTsKICAgIGlmIChmaWxlPy5leGlzdHNTeW5jKCkgPz8gZmFsc2UpIHJldHVybiBmaWxlOwogICAgcHJldiA9IGRpcjsKICAgIGRpciA9IGRpci5wYXJlbnQ7CiAgfQogIHJldHVybiBudWxsOwp9Cg==", "type": "text" }, { @@ -52,7 +58,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "build/lib/src/disable_workspace_resolution.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp5YW1sL3lhbWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp5YW1sX2VkaXQveWFtbF9lZGl0LmRhcnQnOwoKLy8vIEEgdm9pZCBjYWxsYmFjayBmdW5jdGlvbiAoZS5nLiBgdm9pZCBGdW5jdGlvbigpYCkuCnR5cGVkZWYgVm9pZENhbGxiYWNrID0gdm9pZCBGdW5jdGlvbigpOwoKdm9pZCBfbm9vcCgpIHt9CgovLy8gT3B0cyBvdXQgb2YgZGFydCB3b3Jrc3BhY2VzIHVudGlsIHdlIGNhbiBnZW5lcmF0ZSBwZXIgcGFja2FnZSBsb2NrZmlsZXMuCi8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3B1Yi9pc3N1ZXMvNDU5NApWb2lkQ2FsbGJhY2sgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIHJlcXVpcmVkIFN0cmluZyBwcm9qZWN0RGlyZWN0b3J5LAogIHJlcXVpcmVkIHZvaWQgRnVuY3Rpb24oaW50IGV4aXRDb2RlKSBleGl0LAp9KSB7CiAgdHJ5IHsKICAgIHJldHVybiBvdmVycmlkZVJlc29sdXRpb25JblB1YnNwZWNPdmVycmlkZXMocHJvamVjdERpcmVjdG9yeSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGUnKTsKICAgIGV4aXQoMSk7CiAgICByZXR1cm4gX25vb3A7CiAgfQp9Cgp2b2lkIEZ1bmN0aW9uKCkgb3ZlcnJpZGVSZXNvbHV0aW9uSW5QdWJzcGVjT3ZlcnJpZGVzKFN0cmluZyBwcm9qZWN0RGlyZWN0b3J5KSB7CiAgZmluYWwgcHVic3BlY092ZXJyaWRlc0ZpbGUgPSBGaWxlKAogICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnksICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJyksCiAgKTsKCiAgaWYgKCFwdWJzcGVjT3ZlcnJpZGVzRmlsZS5leGlzdHNTeW5jKCkpIHsKICAgIHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKCdyZXNvbHV0aW9uOiBudWxsJyk7CiAgICByZXR1cm4gcHVic3BlY092ZXJyaWRlc0ZpbGUuZGVsZXRlU3luYzsKICB9CgogIGZpbmFsIGNvbnRlbnRzID0gcHVic3BlY092ZXJyaWRlc0ZpbGUucmVhZEFzU3RyaW5nU3luYygpOwogIGZpbmFsIHB1YnNwZWNPdmVycmlkZXMgPSBsb2FkWWFtbChjb250ZW50cykgYXMgWWFtbE1hcD87CgogIGlmIChwdWJzcGVjT3ZlcnJpZGVzID09IG51bGwpIHsKICAgIHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKCdyZXNvbHV0aW9uOiBudWxsJyk7CiAgICByZXR1cm4gKCkgPT4gcHVic3BlY092ZXJyaWRlc0ZpbGUud3JpdGVBc1N0cmluZ1N5bmMoY29udGVudHMpOwogIH0KCiAgaWYgKHB1YnNwZWNPdmVycmlkZXNbJ3Jlc29sdXRpb24nXSA9PSAnbnVsbCcpIHJldHVybiBfbm9vcDsKCiAgZmluYWwgZWRpdG9yID0gWWFtbEVkaXRvcihjb250ZW50cykuLnVwZGF0ZShbJ3Jlc29sdXRpb24nXSwgbnVsbCk7CiAgcHVic3BlY092ZXJyaWRlc0ZpbGUud3JpdGVBc1N0cmluZ1N5bmMoZWRpdG9yLnRvU3RyaW5nKCkpOwoKICByZXR1cm4gKCkgPT4gcHVic3BlY092ZXJyaWRlc0ZpbGUud3JpdGVBc1N0cmluZ1N5bmMoY29udGVudHMpOwp9Cg==", + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp5YW1sL3lhbWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp5YW1sX2VkaXQveWFtbF9lZGl0LmRhcnQnOwoKLy8vIEEgdm9pZCBjYWxsYmFjayBmdW5jdGlvbiAoZS5nLiBgdm9pZCBGdW5jdGlvbigpYCkuCnR5cGVkZWYgVm9pZENhbGxiYWNrID0gdm9pZCBGdW5jdGlvbigpOwoKLy8vIE9wdHMgb3V0IG9mIGRhcnQgd29ya3NwYWNlcyB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyIHBhY2thZ2UgbG9ja2ZpbGVzLgovLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKVm9pZENhbGxiYWNrIGRpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgcHJvamVjdERpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIHRyeSB7CiAgICByZXR1cm4gb3ZlcnJpZGVSZXNvbHV0aW9uSW5QdWJzcGVjT3ZlcnJpZGVzKHByb2plY3REaXJlY3RvcnkpOwogIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlJyk7CiAgICBleGl0KDEpOwogICAgcmV0dXJuICgpIHt9OyAvLyBuby1vcAogIH0KfQoKVm9pZENhbGxiYWNrIG92ZXJyaWRlUmVzb2x1dGlvbkluUHVic3BlY092ZXJyaWRlcyhTdHJpbmcgcHJvamVjdERpcmVjdG9yeSkgewogIGZpbmFsIHB1YnNwZWNPdmVycmlkZXNGaWxlID0gRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LCAncHVic3BlY19vdmVycmlkZXMueWFtbCcpLAogICk7CgogIGlmICghcHVic3BlY092ZXJyaWRlc0ZpbGUuZXhpc3RzU3luYygpKSB7CiAgICBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYygncmVzb2x1dGlvbjogbnVsbCcpOwogICAgcmV0dXJuIHB1YnNwZWNPdmVycmlkZXNGaWxlLmRlbGV0ZVN5bmM7CiAgfQoKICBmaW5hbCBjb250ZW50cyA9IHB1YnNwZWNPdmVycmlkZXNGaWxlLnJlYWRBc1N0cmluZ1N5bmMoKTsKICBmaW5hbCBwdWJzcGVjT3ZlcnJpZGVzID0gbG9hZFlhbWwoY29udGVudHMpIGFzIFlhbWxNYXA/OwoKICBpZiAocHVic3BlY092ZXJyaWRlcyA9PSBudWxsKSB7CiAgICBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYygncmVzb2x1dGlvbjogbnVsbCcpOwogICAgcmV0dXJuICgpID0+IHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGNvbnRlbnRzKTsKICB9CgogIGlmIChwdWJzcGVjT3ZlcnJpZGVzWydyZXNvbHV0aW9uJ10gPT0gJ251bGwnKSByZXR1cm4gKCkge307IC8vIG5vLW9wCgogIGZpbmFsIGVkaXRvciA9IFlhbWxFZGl0b3IoY29udGVudHMpLi51cGRhdGUoWydyZXNvbHV0aW9uJ10sIG51bGwpOwogIHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGVkaXRvci50b1N0cmluZygpKTsKCiAgcmV0dXJuICgpID0+IHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGNvbnRlbnRzKTsKfQo=", "type": "text" }, { @@ -94,7 +100,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "build/pre_gen.dart", "data": - "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKICBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oU3RyaW5nIGZyb20sIFN0cmluZyB0bykgY29weVBhdGggPSBpb19leHBhbmRlZC5jb3B5UGF0aCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgdXNlc1dvcmtzcGFjZXMgPSB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBleGl0OiBleGl0LAogICk7CgogIFZvaWRDYWxsYmFjaz8gcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb247CgogIGlmICh1c2VzV29ya3NwYWNlcykgewogICAgLy8gRGlzYWJsZSB3b3Jrc3BhY2UgcmVzb2x1dGlvbiB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyLXBhY2thZ2UgbG9ja2ZpbGVzLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKICAgIHJlc3RvcmVXb3Jrc3BhY2VSZXNvbHV0aW9uID0gZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgIGNvbnRleHQsCiAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgfQoKICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwdWJzcGVjLmxvY2sgZmlsZSBpcyB1cCB0byBkYXRlCiAgYXdhaXQgZGFydFB1YkdldCgKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBydW5Qcm9jZXNzOiBydW5Qcm9jZXNzLAogICAgZXhpdDogZXhpdCwKICApOwoKICBmaW5hbCBidWlsZERpcmVjdG9yeSA9IGlvLkRpcmVjdG9yeSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpLAogICk7CgogIGF3YWl0IGNyZWF0ZUJ1bmRsZSgKICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgZXhpdDogZXhpdCwKICApOwoKICByZXN0b3JlV29ya3NwYWNlUmVzb2x1dGlvbj8uY2FsbCgpOwoKICBmaW5hbCBSb3V0ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICB0cnkgewogICAgY29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbihwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CgogIHJlcG9ydFJvdXRlQ29uZmxpY3RzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm91dGVDb25mbGljdDogKAogICAgICBvcmlnaW5hbEZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0ZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0VuZHBvaW50LAogICAgKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycigKICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcChvcmlnaW5hbEZpbGVQYXRoKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoY29uZmxpY3RpbmdGaWxlUGF0aCl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRW5kcG9pbnQpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgcmVwb3J0Um9ndWVSb3V0ZXMoCiAgICBjb25maWd1cmF0aW9uLAogICAgb25Sb2d1ZVJvdXRlOiAoZmlsZVBhdGgsIGlkZWFsUGF0aCkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm9ndWUgcm91dGUgZGV0ZWN0ZWQuJHtkZWZhdWx0Rm9yZWdyb3VuZC53cmFwKCcgJyl9UmVuYW1lICR7bGlnaHRDeWFuLndyYXAoZmlsZVBhdGgpfSB0byAke2xpZ2h0Q3lhbi53cmFwKGlkZWFsUGF0aCl9LicnJywKICAgICAgKTsKICAgIH0sCiAgICBvblZpb2xhdGlvbkVuZDogKCkgPT4gZXhpdCgxKSwKICApOwoKICBmaW5hbCBjdXN0b21Eb2NrZXJGaWxlID0gaW8uRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJyksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKICBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oU3RyaW5nIGZyb20sIFN0cmluZyB0bykgY29weVBhdGggPSBpb19leHBhbmRlZC5jb3B5UGF0aCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgdXNlc1dvcmtzcGFjZXMgPSB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBleGl0OiBleGl0LAogICk7CgogIFZvaWRDYWxsYmFjaz8gcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb247CgogIGlmICh1c2VzV29ya3NwYWNlcykgewogICAgLy8gRGlzYWJsZSB3b3Jrc3BhY2UgcmVzb2x1dGlvbiB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyLXBhY2thZ2UgbG9ja2ZpbGVzLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKICAgIHJlc3RvcmVXb3Jrc3BhY2VSZXNvbHV0aW9uID0gZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgIGNvbnRleHQsCiAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgICAvLyBDb3B5IHRoZSBwdWJzcGVjLmxvY2sgZnJvbSB0aGUgd29ya3NwYWNlIHJvb3QgdG8gZW5zdXJlIHRoZSBzYW1lIHZlcnNpb25zCiAgICAvLyBvZiBkZXBlbmRlbmNpZXMgYXJlIHVzZWQgaW4gdGhlIHByb2R1Y3Rpb24gYnVpbGQuCiAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgIGNvbnRleHQsCiAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgfQoKICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwdWJzcGVjLmxvY2sgZmlsZSBpcyB1cCB0byBkYXRlCiAgYXdhaXQgZGFydFB1YkdldCgKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBydW5Qcm9jZXNzOiBydW5Qcm9jZXNzLAogICAgZXhpdDogZXhpdCwKICApOwoKICBmaW5hbCBidWlsZERpcmVjdG9yeSA9IGlvLkRpcmVjdG9yeSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpLAogICk7CgogIGF3YWl0IGNyZWF0ZUJ1bmRsZSgKICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgZXhpdDogZXhpdCwKICApOwoKICByZXN0b3JlV29ya3NwYWNlUmVzb2x1dGlvbj8uY2FsbCgpOwoKICBmaW5hbCBSb3V0ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICB0cnkgewogICAgY29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbihwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CgogIHJlcG9ydFJvdXRlQ29uZmxpY3RzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm91dGVDb25mbGljdDogKAogICAgICBvcmlnaW5hbEZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0ZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0VuZHBvaW50LAogICAgKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycigKICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcChvcmlnaW5hbEZpbGVQYXRoKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoY29uZmxpY3RpbmdGaWxlUGF0aCl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRW5kcG9pbnQpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgcmVwb3J0Um9ndWVSb3V0ZXMoCiAgICBjb25maWd1cmF0aW9uLAogICAgb25Sb2d1ZVJvdXRlOiAoZmlsZVBhdGgsIGlkZWFsUGF0aCkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm9ndWUgcm91dGUgZGV0ZWN0ZWQuJHtkZWZhdWx0Rm9yZWdyb3VuZC53cmFwKCcgJyl9UmVuYW1lICR7bGlnaHRDeWFuLndyYXAoZmlsZVBhdGgpfSB0byAke2xpZ2h0Q3lhbi53cmFwKGlkZWFsUGF0aCl9LicnJywKICAgICAgKTsKICAgIH0sCiAgICBvblZpb2xhdGlvbkVuZDogKCkgPT4gZXhpdCgxKSwKICApOwoKICBmaW5hbCBjdXN0b21Eb2NrZXJGaWxlID0gaW8uRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJyksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", "type": "text" }, { @@ -127,6 +133,12 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ "Ly8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgYSBjaGlsZCBvZiB0aGUgcHJvamVjdCBkaXJlY3RvcnkuCi8vLyAqIERhcnQgd29ya3NwYWNlcyBlbmFibGVkCmNvbnN0IHdvcmtzcGFjZVJvb3QgPSAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgc2VydmVyOgogICAgcGF0aDogcGFja2FnZXMvc2VydmVyICAKd29ya3NwYWNlOgogIC0gcGFja2FnZXMvc2VydmVyCicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBEYXJ0IHdvcmtzcGFjZXMgZW5hYmxlZApjb25zdCB3b3Jrc3BhY2VDaGlsZCA9ICcnJwpuYW1lOiBzZXJ2ZXIKcmVzb2x1dGlvbjogd29ya3NwYWNlCicnJzsK", "type": "text" }, + { + "path": "build/test/src/copy_workspace_pubspec_lock_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaycsICgpIHsKICAgIGxhdGUgTGlzdDxpbnQ+IGV4aXRDYWxsczsKICAgIGxhdGUgSG9va0NvbnRleHQgY29udGV4dDsKICAgIGxhdGUgTG9nZ2VyIGxvZ2dlcjsKICAgIGxhdGUgRGlyZWN0b3J5IHByb2plY3REaXJlY3Rvcnk7CiAgICBsYXRlIERpcmVjdG9yeSByb290RGlyZWN0b3J5OwoKICAgIHNldFVwKCgpIHsKICAgICAgZXhpdENhbGxzID0gW107CiAgICAgIGNvbnRleHQgPSBfTW9ja0hvb2tDb250ZXh0KCk7CiAgICAgIGxvZ2dlciA9IF9Nb2NrTG9nZ2VyKCk7CiAgICAgIHJvb3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygncm9vdCcpOwogICAgICBwcm9qZWN0RGlyZWN0b3J5ID0gRGlyZWN0b3J5KAogICAgICAgIHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwYWNrYWdlcycsICdwcm9qZWN0JyksCiAgICAgICkuLmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpIHsKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICAgIHJvb3REaXJlY3RvcnkuZGVsZXRlKCkuaWdub3JlKCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2l0aCBlcnJvciB3aGVuIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHdvcmtzcGFjZSByb290JywgKCkgewogICAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgICAgY29udGV4dCwKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAke3Byb2plY3REaXJlY3RvcnkucGF0aH0nLAogICAgICAgICksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aXRoIGVycm9yIHdoZW4gdW5hYmxlIHRvIHBhcnNlIHB1YnNwZWMueWFtbCcsICgpIHsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpCiAgICAgICAgICAud3JpdGVBc1N0cmluZ1N5bmMoJ2ludmFsaWQgcHVic3BlYy55YW1sJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgIHZlcmlmeSgKICAgICAgICAoKSA9PiBsb2dnZXIuZXJyKAogICAgICAgICAgJ1VuYWJsZSB0byBkZXRlcm1pbmUgd29ya3NwYWNlIHJvb3QgZm9yICR7cHJvamVjdERpcmVjdG9yeS5wYXRofScsCiAgICAgICAgKSwKICAgICAgKTsKICAgIH0pOwoKICAgIHRlc3QoJ2RvZXMgbm90aGluZyB3aGVuIHB1YnNwZWMubG9jayBkb2VzIG5vdCBleGlzdCBpbiB3b3Jrc3BhY2Ugcm9vdCcsICgpIHsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QocHJvamVjdERpcmVjdG9yeS5saXN0U3luYygpLCBpc0VtcHR5KTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3Igd2hlbiB1bmFibGUgdG8gY29weSBsb2NrZmlsZScsICgpIHsKICAgICAgY29uc3QgcHVic3BlY0xvY2tDb250ZW50cyA9ICcnJwojIEdlbmVyYXRlZCBieSBwdWIKIyBTZWUgaHR0cHM6Ly9kYXJ0LmRldi90b29scy9wdWIvZ2xvc3NhcnkjbG9ja2ZpbGUKcGFja2FnZXM6CicnJzsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGZpbmFsIGZpbGUgPSBGaWxlKHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAuLndyaXRlQXNTdHJpbmdTeW5jKHB1YnNwZWNMb2NrQ29udGVudHMpOwogICAgICBQcm9jZXNzLnJ1blN5bmMoJ2NobW9kJywgWycwMDAnLCBmaWxlLnBhdGhdKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3BpZXMgcHVic3BlYy5sb2NrIHRvIHByb2plY3QgZGlyZWN0b3J5IHdoZW4gZm91bmQnLCAoKSB7CiAgICAgIGNvbnN0IHB1YnNwZWNMb2NrQ29udGVudHMgPSAnJycKIyBHZW5lcmF0ZWQgYnkgcHViCiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlCnBhY2thZ2VzOgonJyc7CiAgICAgIEZpbGUocGF0aC5qb2luKHJvb3REaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKS53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwp2ZXJzaW9uOiAwLjAuMAplbnZpcm9ubWVudDoKICBzZGs6IF4zLjguMAp3b3Jrc3BhY2U6CiAgLSBwYWNrYWdlcy9oZWxsb193b3JsZAonJycpOwogICAgICBGaWxlKHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhwdWJzcGVjTG9ja0NvbnRlbnRzKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnlDb250ZW50cyA9IHByb2plY3REaXJlY3RvcnkubGlzdFN5bmMoKTsKICAgICAgZXhwZWN0KHByb2plY3REaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgZXhwZWN0KAogICAgICAgIHByb2plY3REaXJlY3RvcnlDb250ZW50cy5maXJzdCwKICAgICAgICBpc0E8RmlsZT4oKS5oYXZpbmcoCiAgICAgICAgICAoZikgPT4gcGF0aC5iYXNlbmFtZShmLnBhdGgpLAogICAgICAgICAgJ25hbWUnLAogICAgICAgICAgJ3B1YnNwZWMubG9jaycsCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZXhwZWN0KAogICAgICAgIChwcm9qZWN0RGlyZWN0b3J5Q29udGVudHMuZmlyc3QgYXMgRmlsZSkucmVhZEFzU3RyaW5nU3luYygpLAogICAgICAgIGVxdWFscyhwdWJzcGVjTG9ja0NvbnRlbnRzKSwKICAgICAgKTsKICAgIH0pOwogIH0pOwp9Cg==", + "type": "text" + }, { "path": "build/test/src/create_bundle_test.dart", "data": @@ -178,7 +190,13 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "lib/dart_frog_prod_server_hooks.dart", "data": - "ZXhwb3J0ICdzcmMvY3JlYXRlX2J1bmRsZS5kYXJ0JzsKZXhwb3J0ICdzcmMvY3JlYXRlX2V4dGVybmFsX3BhY2thZ2VzX2ZvbGRlci5kYXJ0JzsKZXhwb3J0ICdzcmMvZGFydF9wdWJfZ2V0LmRhcnQnOwpleHBvcnQgJ3NyYy9kaXNhYmxlX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwpleHBvcnQgJ3NyYy9leGl0X292ZXJyaWRlcy5kYXJ0JzsKZXhwb3J0ICdzcmMvZ2V0X2ludGVybmFsX3BhdGhfZGVwZW5kZW5jaWVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy91c2VzX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwo=", + "ZXhwb3J0ICdzcmMvY29weV93b3Jrc3BhY2VfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfYnVuZGxlLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfZXh0ZXJuYWxfcGFja2FnZXNfZm9sZGVyLmRhcnQnOwpleHBvcnQgJ3NyYy9kYXJ0X3B1Yl9nZXQuZGFydCc7CmV4cG9ydCAnc3JjL2Rpc2FibGVfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7CmV4cG9ydCAnc3JjL2V4aXRfb3ZlcnJpZGVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfaW50ZXJuYWxfcGF0aF9kZXBlbmRlbmNpZXMuZGFydCc7CmV4cG9ydCAnc3JjL2dldF9wdWJzcGVjX2xvY2suZGFydCc7CmV4cG9ydCAnc3JjL3VzZXNfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7CgovLy8gQSB2b2lkIGNhbGxiYWNrIGZ1bmN0aW9uIChlLmcuIGB2b2lkIEZ1bmN0aW9uKClgKS4KdHlwZWRlZiBWb2lkQ2FsbGJhY2sgPSB2b2lkIEZ1bmN0aW9uKCk7Cg==", + "type": "text" + }, + { + "path": "lib/src/copy_workspace_pubspec_lock.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOmRhcnRfZnJvZ19wcm9kX3NlcnZlcl9ob29rcy9kYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MuZGFydCc7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6eWFtbC95YW1sLmRhcnQnOwoKLy8vIENvcGllcyB0aGUgcHVic3BlYy5sb2NrIGZyb20gdGhlIHdvcmtzcGFjZSByb290IGludG8gdGhlIHByb2plY3QgZGlyZWN0b3J5Ci8vLyBpbiBvcmRlciB0byBlbnN1cmUgdGhlIHByb2R1Y3Rpb24gYnVpbGQgdXNlcyB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9ucyBvZiBhbGwKLy8vIGRlcGVuZGVuY2llcy4KVm9pZENhbGxiYWNrIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgcmVxdWlyZWQgU3RyaW5nIHByb2plY3REaXJlY3RvcnksCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIHsKICBmaW5hbCB3b3Jrc3BhY2VSb290ID0gX2dldFdvcmtzcGFjZVJvb3QocHJvamVjdERpcmVjdG9yeSk7CiAgaWYgKHdvcmtzcGFjZVJvb3QgPT0gbnVsbCkgewogICAgY29udGV4dC5sb2dnZXIuZXJyKAogICAgICAnVW5hYmxlIHRvIGRldGVybWluZSB3b3Jrc3BhY2Ugcm9vdCBmb3IgJHByb2plY3REaXJlY3RvcnknLAogICAgKTsKICAgIGV4aXQoMSk7CiAgICByZXR1cm4gKCkge307CiAgfQoKICBmaW5hbCBwdWJzcGVjTG9ja0ZpbGUgPSBGaWxlKHBhdGguam9pbih3b3Jrc3BhY2VSb290LnBhdGgsICdwdWJzcGVjLmxvY2snKSk7CiAgaWYgKCFwdWJzcGVjTG9ja0ZpbGUuZXhpc3RzU3luYygpKSByZXR1cm4gKCkge307CgogIHRyeSB7CiAgICBwdWJzcGVjTG9ja0ZpbGUuY29weVN5bmMocGF0aC5qb2luKHByb2plY3REaXJlY3RvcnksICdwdWJzcGVjLmxvY2snKSk7CiAgICByZXR1cm4gKCkgewogICAgICBGaWxlKHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LCAncHVic3BlYy5sb2NrJykpLmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgfTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICBleGl0KDEpOwogICAgcmV0dXJuICgpIHt9OwogIH0KfQoKLy8vIFJldHVybnMgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBuZWFyZXN0IERhcnQgd29ya3NwYWNlLgpEaXJlY3Rvcnk/IF9nZXRXb3Jrc3BhY2VSb290KFN0cmluZyB3b3JraW5nRGlyZWN0b3J5KSB7CiAgZmluYWwgZmlsZSA9IF9maW5kTmVhcmVzdEFuY2VzdG9yKAogICAgd2hlcmU6IChwYXRoKSA9PiBfZ2V0V29ya3NwYWNlUm9vdFB1YnNwZWNZYW1sKGN3ZDogRGlyZWN0b3J5KHBhdGgpKSwKICAgIGN3ZDogRGlyZWN0b3J5KHdvcmtpbmdEaXJlY3RvcnkpLAogICk7CiAgaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHNTeW5jKCkpIHJldHVybiBudWxsOwogIHJldHVybiBEaXJlY3RvcnkocGF0aC5kaXJuYW1lKGZpbGUucGF0aCkpOwp9CgovLy8gVGhlIHdvcmtzcGFjZSByb290IGBwdWJzcGVjLnlhbWxgIGZpbGUgZm9yIHRoaXMgcHJvamVjdC4KRmlsZT8gX2dldFdvcmtzcGFjZVJvb3RQdWJzcGVjWWFtbCh7cmVxdWlyZWQgRGlyZWN0b3J5IGN3ZH0pIHsKICB0cnkgewogICAgZmluYWwgcHVic3BlY1lhbWxGaWxlID0gRmlsZShwYXRoLmpvaW4oY3dkLnBhdGgsICdwdWJzcGVjLnlhbWwnKSk7CiAgICBpZiAoIXB1YnNwZWNZYW1sRmlsZS5leGlzdHNTeW5jKCkpIHJldHVybiBudWxsOwogICAgZmluYWwgcHVic3BlYyA9IGxvYWRZYW1sKHB1YnNwZWNZYW1sRmlsZS5yZWFkQXNTdHJpbmdTeW5jKCkpOwogICAgaWYgKHB1YnNwZWMgaXMhIFlhbWxNYXApIHJldHVybiBudWxsOwogICAgZmluYWwgd29ya3NwYWNlID0gcHVic3BlY1snd29ya3NwYWNlJ10gYXMgTGlzdD87CiAgICBpZiAod29ya3NwYWNlPy5pc0VtcHR5ID8/IHRydWUpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHB1YnNwZWNZYW1sRmlsZTsKICB9IG9uIEV4Y2VwdGlvbiB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBGaW5kcyBuZWFyZXN0IGFuY2VzdG9yIGZpbGUKLy8vIHJlbGF0aXZlIHRvIHRoZSBbY3dkXSB0aGF0IHNhdGlzZmllcyBbd2hlcmVdLgpGaWxlPyBfZmluZE5lYXJlc3RBbmNlc3Rvcih7CiAgcmVxdWlyZWQgRmlsZT8gRnVuY3Rpb24oU3RyaW5nIHBhdGgpIHdoZXJlLAogIHJlcXVpcmVkIERpcmVjdG9yeSBjd2QsCn0pIHsKICBEaXJlY3Rvcnk/IHByZXY7CiAgdmFyIGRpciA9IGN3ZDsKICB3aGlsZSAocHJldj8ucGF0aCAhPSBkaXIucGF0aCkgewogICAgZmluYWwgZmlsZSA9IHdoZXJlKGRpci5wYXRoKTsKICAgIGlmIChmaWxlPy5leGlzdHNTeW5jKCkgPz8gZmFsc2UpIHJldHVybiBmaWxlOwogICAgcHJldiA9IGRpcjsKICAgIGRpciA9IGRpci5wYXJlbnQ7CiAgfQogIHJldHVybiBudWxsOwp9Cg==", "type": "text" }, { @@ -202,7 +220,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "lib/src/disable_workspace_resolution.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp5YW1sL3lhbWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp5YW1sX2VkaXQveWFtbF9lZGl0LmRhcnQnOwoKLy8vIEEgdm9pZCBjYWxsYmFjayBmdW5jdGlvbiAoZS5nLiBgdm9pZCBGdW5jdGlvbigpYCkuCnR5cGVkZWYgVm9pZENhbGxiYWNrID0gdm9pZCBGdW5jdGlvbigpOwoKLy8vIE9wdHMgb3V0IG9mIGRhcnQgd29ya3NwYWNlcyB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyIHBhY2thZ2UgbG9ja2ZpbGVzLgovLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKVm9pZENhbGxiYWNrIGRpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgcHJvamVjdERpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIHRyeSB7CiAgICByZXR1cm4gb3ZlcnJpZGVSZXNvbHV0aW9uSW5QdWJzcGVjT3ZlcnJpZGVzKHByb2plY3REaXJlY3RvcnkpOwogIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlJyk7CiAgICBleGl0KDEpOwogICAgcmV0dXJuICgpIHt9OyAvLyBuby1vcAogIH0KfQoKVm9pZENhbGxiYWNrIG92ZXJyaWRlUmVzb2x1dGlvbkluUHVic3BlY092ZXJyaWRlcyhTdHJpbmcgcHJvamVjdERpcmVjdG9yeSkgewogIGZpbmFsIHB1YnNwZWNPdmVycmlkZXNGaWxlID0gRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LCAncHVic3BlY19vdmVycmlkZXMueWFtbCcpLAogICk7CgogIGlmICghcHVic3BlY092ZXJyaWRlc0ZpbGUuZXhpc3RzU3luYygpKSB7CiAgICBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYygncmVzb2x1dGlvbjogbnVsbCcpOwogICAgcmV0dXJuIHB1YnNwZWNPdmVycmlkZXNGaWxlLmRlbGV0ZVN5bmM7CiAgfQoKICBmaW5hbCBjb250ZW50cyA9IHB1YnNwZWNPdmVycmlkZXNGaWxlLnJlYWRBc1N0cmluZ1N5bmMoKTsKICBmaW5hbCBwdWJzcGVjT3ZlcnJpZGVzID0gbG9hZFlhbWwoY29udGVudHMpIGFzIFlhbWxNYXA/OwoKICBpZiAocHVic3BlY092ZXJyaWRlcyA9PSBudWxsKSB7CiAgICBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYygncmVzb2x1dGlvbjogbnVsbCcpOwogICAgcmV0dXJuICgpID0+IHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGNvbnRlbnRzKTsKICB9CgogIGlmIChwdWJzcGVjT3ZlcnJpZGVzWydyZXNvbHV0aW9uJ10gPT0gJ251bGwnKSByZXR1cm4gKCkge307IC8vIG5vLW9wCgogIGZpbmFsIGVkaXRvciA9IFlhbWxFZGl0b3IoY29udGVudHMpLi51cGRhdGUoWydyZXNvbHV0aW9uJ10sIG51bGwpOwogIHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGVkaXRvci50b1N0cmluZygpKTsKCiAgcmV0dXJuICgpID0+IHB1YnNwZWNPdmVycmlkZXNGaWxlLndyaXRlQXNTdHJpbmdTeW5jKGNvbnRlbnRzKTsKfQo=", + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOmRhcnRfZnJvZ19wcm9kX3NlcnZlcl9ob29rcy9kYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MuZGFydCc7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6eWFtbC95YW1sLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6eWFtbF9lZGl0L3lhbWxfZWRpdC5kYXJ0JzsKCi8vLyBPcHRzIG91dCBvZiBkYXJ0IHdvcmtzcGFjZXMgdW50aWwgd2UgY2FuIGdlbmVyYXRlIHBlciBwYWNrYWdlIGxvY2tmaWxlcy4KLy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvcHViL2lzc3Vlcy80NTk0ClZvaWRDYWxsYmFjayBkaXNhYmxlV29ya3NwYWNlUmVzb2x1dGlvbigKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgcmVxdWlyZWQgU3RyaW5nIHByb2plY3REaXJlY3RvcnksCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIHsKICB0cnkgewogICAgcmV0dXJuIG92ZXJyaWRlUmVzb2x1dGlvbkluUHVic3BlY092ZXJyaWRlcyhwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgY29udGV4dC5sb2dnZXIuZXJyKCckZScpOwogICAgZXhpdCgxKTsKICAgIHJldHVybiAoKSB7fTsgLy8gbm8tb3AKICB9Cn0KClZvaWRDYWxsYmFjayBvdmVycmlkZVJlc29sdXRpb25JblB1YnNwZWNPdmVycmlkZXMoU3RyaW5nIHByb2plY3REaXJlY3RvcnkpIHsKICBmaW5hbCBwdWJzcGVjT3ZlcnJpZGVzRmlsZSA9IEZpbGUoCiAgICBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeSwgJ3B1YnNwZWNfb3ZlcnJpZGVzLnlhbWwnKSwKICApOwoKICBpZiAoIXB1YnNwZWNPdmVycmlkZXNGaWxlLmV4aXN0c1N5bmMoKSkgewogICAgcHVic3BlY092ZXJyaWRlc0ZpbGUud3JpdGVBc1N0cmluZ1N5bmMoJ3Jlc29sdXRpb246IG51bGwnKTsKICAgIHJldHVybiBwdWJzcGVjT3ZlcnJpZGVzRmlsZS5kZWxldGVTeW5jOwogIH0KCiAgZmluYWwgY29udGVudHMgPSBwdWJzcGVjT3ZlcnJpZGVzRmlsZS5yZWFkQXNTdHJpbmdTeW5jKCk7CiAgZmluYWwgcHVic3BlY092ZXJyaWRlcyA9IGxvYWRZYW1sKGNvbnRlbnRzKSBhcyBZYW1sTWFwPzsKCiAgaWYgKHB1YnNwZWNPdmVycmlkZXMgPT0gbnVsbCkgewogICAgcHVic3BlY092ZXJyaWRlc0ZpbGUud3JpdGVBc1N0cmluZ1N5bmMoJ3Jlc29sdXRpb246IG51bGwnKTsKICAgIHJldHVybiAoKSA9PiBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYyhjb250ZW50cyk7CiAgfQoKICBpZiAocHVic3BlY092ZXJyaWRlc1sncmVzb2x1dGlvbiddID09ICdudWxsJykgcmV0dXJuICgpIHt9OyAvLyBuby1vcAoKICBmaW5hbCBlZGl0b3IgPSBZYW1sRWRpdG9yKGNvbnRlbnRzKS4udXBkYXRlKFsncmVzb2x1dGlvbiddLCBudWxsKTsKICBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYyhlZGl0b3IudG9TdHJpbmcoKSk7CgogIHJldHVybiAoKSA9PiBwdWJzcGVjT3ZlcnJpZGVzRmlsZS53cml0ZUFzU3RyaW5nU3luYyhjb250ZW50cyk7Cn0K", "type": "text" }, { @@ -244,7 +262,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "pre_gen.dart", "data": - "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKICBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oU3RyaW5nIGZyb20sIFN0cmluZyB0bykgY29weVBhdGggPSBpb19leHBhbmRlZC5jb3B5UGF0aCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgdXNlc1dvcmtzcGFjZXMgPSB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBleGl0OiBleGl0LAogICk7CgogIFZvaWRDYWxsYmFjaz8gcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb247CgogIGlmICh1c2VzV29ya3NwYWNlcykgewogICAgLy8gRGlzYWJsZSB3b3Jrc3BhY2UgcmVzb2x1dGlvbiB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyLXBhY2thZ2UgbG9ja2ZpbGVzLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKICAgIHJlc3RvcmVXb3Jrc3BhY2VSZXNvbHV0aW9uID0gZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgIGNvbnRleHQsCiAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgfQoKICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwdWJzcGVjLmxvY2sgZmlsZSBpcyB1cCB0byBkYXRlCiAgYXdhaXQgZGFydFB1YkdldCgKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBydW5Qcm9jZXNzOiBydW5Qcm9jZXNzLAogICAgZXhpdDogZXhpdCwKICApOwoKICBmaW5hbCBidWlsZERpcmVjdG9yeSA9IGlvLkRpcmVjdG9yeSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpLAogICk7CgogIGF3YWl0IGNyZWF0ZUJ1bmRsZSgKICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgZXhpdDogZXhpdCwKICApOwoKICByZXN0b3JlV29ya3NwYWNlUmVzb2x1dGlvbj8uY2FsbCgpOwoKICBmaW5hbCBSb3V0ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICB0cnkgewogICAgY29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbihwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CgogIHJlcG9ydFJvdXRlQ29uZmxpY3RzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm91dGVDb25mbGljdDogKAogICAgICBvcmlnaW5hbEZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0ZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0VuZHBvaW50LAogICAgKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycigKICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcChvcmlnaW5hbEZpbGVQYXRoKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoY29uZmxpY3RpbmdGaWxlUGF0aCl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRW5kcG9pbnQpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgcmVwb3J0Um9ndWVSb3V0ZXMoCiAgICBjb25maWd1cmF0aW9uLAogICAgb25Sb2d1ZVJvdXRlOiAoZmlsZVBhdGgsIGlkZWFsUGF0aCkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm9ndWUgcm91dGUgZGV0ZWN0ZWQuJHtkZWZhdWx0Rm9yZWdyb3VuZC53cmFwKCcgJyl9UmVuYW1lICR7bGlnaHRDeWFuLndyYXAoZmlsZVBhdGgpfSB0byAke2xpZ2h0Q3lhbi53cmFwKGlkZWFsUGF0aCl9LicnJywKICAgICAgKTsKICAgIH0sCiAgICBvblZpb2xhdGlvbkVuZDogKCkgPT4gZXhpdCgxKSwKICApOwoKICBmaW5hbCBjdXN0b21Eb2NrZXJGaWxlID0gaW8uRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJyksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKICBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oU3RyaW5nIGZyb20sIFN0cmluZyB0bykgY29weVBhdGggPSBpb19leHBhbmRlZC5jb3B5UGF0aCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgdXNlc1dvcmtzcGFjZXMgPSB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBleGl0OiBleGl0LAogICk7CgogIFZvaWRDYWxsYmFjaz8gcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb247CiAgVm9pZENhbGxiYWNrPyByZXZlcnRQdWJzcGVjTG9jazsKCiAgaWYgKHVzZXNXb3Jrc3BhY2VzKSB7CiAgICAvLyBEaXNhYmxlIHdvcmtzcGFjZSByZXNvbHV0aW9uIHVudGlsIHdlIGNhbiBnZW5lcmF0ZSBwZXItcGFja2FnZSBsb2NrZmlsZXMuCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3B1Yi9pc3N1ZXMvNDU5NAogICAgcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb24gPSBkaXNhYmxlV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgY29udGV4dCwKICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICBleGl0OiBleGl0LAogICAgKTsKICAgIC8vIENvcHkgdGhlIHB1YnNwZWMubG9jayBmcm9tIHRoZSB3b3Jrc3BhY2Ugcm9vdCB0byBlbnN1cmUgdGhlIHNhbWUgdmVyc2lvbnMKICAgIC8vIG9mIGRlcGVuZGVuY2llcyBhcmUgdXNlZCBpbiB0aGUgcHJvZHVjdGlvbiBidWlsZC4KICAgIHJldmVydFB1YnNwZWNMb2NrID0gY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICBjb250ZXh0LAogICAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgIGV4aXQ6IGV4aXQsCiAgICApOwogIH0KCiAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHVic3BlYy5sb2NrIGZpbGUgaXMgdXAgdG8gZGF0ZQogIGF3YWl0IGRhcnRQdWJHZXQoCiAgICBjb250ZXh0LAogICAgd29ya2luZ0RpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgcnVuUHJvY2VzczogcnVuUHJvY2VzcywKICAgIGV4aXQ6IGV4aXQsCiAgKTsKCiAgZmluYWwgYnVpbGREaXJlY3RvcnkgPSBpby5EaXJlY3RvcnkoCiAgICBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnYnVpbGQnKSwKICApOwoKICBhd2FpdCBjcmVhdGVCdW5kbGUoCiAgICBjb250ZXh0OiBjb250ZXh0LAogICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeSwKICAgIGV4aXQ6IGV4aXQsCiAgKTsKCiAgcmVzdG9yZVdvcmtzcGFjZVJlc29sdXRpb24/LmNhbGwoKTsKCiAgZmluYWwgUm91dGVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CiAgdHJ5IHsKICAgIGNvbmZpZ3VyYXRpb24gPSBidWlsZENvbmZpZ3VyYXRpb24ocHJvamVjdERpcmVjdG9yeSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlcnJvcicpOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQoKICByZXBvcnRSb3V0ZUNvbmZsaWN0cygKICAgIGNvbmZpZ3VyYXRpb24sCiAgICBvblJvdXRlQ29uZmxpY3Q6ICgKICAgICAgb3JpZ2luYWxGaWxlUGF0aCwKICAgICAgY29uZmxpY3RpbmdGaWxlUGF0aCwKICAgICAgY29uZmxpY3RpbmdFbmRwb2ludCwKICAgICkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm91dGUgY29uZmxpY3QgZGV0ZWN0ZWQuICR7bGlnaHRDeWFuLndyYXAob3JpZ2luYWxGaWxlUGF0aCl9IGFuZCAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRmlsZVBhdGgpfSBib3RoIHJlc29sdmUgdG8gJHtsaWdodEN5YW4ud3JhcChjb25mbGljdGluZ0VuZHBvaW50KX0uJycnLAogICAgICApOwogICAgfSwKICAgIG9uVmlvbGF0aW9uRW5kOiAoKSA9PiBleGl0KDEpLAogICk7CgogIHJlcG9ydFJvZ3VlUm91dGVzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm9ndWVSb3V0ZTogKGZpbGVQYXRoLCBpZGVhbFBhdGgpIHsKICAgICAgY29udGV4dC5sb2dnZXIuZXJyKAogICAgICAgICcnJ1JvZ3VlIHJvdXRlIGRldGVjdGVkLiR7ZGVmYXVsdEZvcmVncm91bmQud3JhcCgnICcpfVJlbmFtZSAke2xpZ2h0Q3lhbi53cmFwKGZpbGVQYXRoKX0gdG8gJHtsaWdodEN5YW4ud3JhcChpZGVhbFBhdGgpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIHJldmVydFB1YnNwZWNMb2NrPy5jYWxsKCk7CgogIGZpbmFsIGN1c3RvbURvY2tlckZpbGUgPSBpby5GaWxlKAogICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJ0RvY2tlcmZpbGUnKSwKICApOwogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", "type": "text" }, { @@ -277,6 +295,12 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ "Ly8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgYSBjaGlsZCBvZiB0aGUgcHJvamVjdCBkaXJlY3RvcnkuCi8vLyAqIERhcnQgd29ya3NwYWNlcyBlbmFibGVkCmNvbnN0IHdvcmtzcGFjZVJvb3QgPSAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgc2VydmVyOgogICAgcGF0aDogcGFja2FnZXMvc2VydmVyICAKd29ya3NwYWNlOgogIC0gcGFja2FnZXMvc2VydmVyCicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBEYXJ0IHdvcmtzcGFjZXMgZW5hYmxlZApjb25zdCB3b3Jrc3BhY2VDaGlsZCA9ICcnJwpuYW1lOiBzZXJ2ZXIKcmVzb2x1dGlvbjogd29ya3NwYWNlCicnJzsK", "type": "text" }, + { + "path": "test/src/copy_workspace_pubspec_lock_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaycsICgpIHsKICAgIGxhdGUgTGlzdDxpbnQ+IGV4aXRDYWxsczsKICAgIGxhdGUgSG9va0NvbnRleHQgY29udGV4dDsKICAgIGxhdGUgTG9nZ2VyIGxvZ2dlcjsKICAgIGxhdGUgRGlyZWN0b3J5IHByb2plY3REaXJlY3Rvcnk7CiAgICBsYXRlIERpcmVjdG9yeSByb290RGlyZWN0b3J5OwoKICAgIHNldFVwKCgpIHsKICAgICAgZXhpdENhbGxzID0gW107CiAgICAgIGNvbnRleHQgPSBfTW9ja0hvb2tDb250ZXh0KCk7CiAgICAgIGxvZ2dlciA9IF9Nb2NrTG9nZ2VyKCk7CiAgICAgIHJvb3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygncm9vdCcpOwogICAgICBwcm9qZWN0RGlyZWN0b3J5ID0gRGlyZWN0b3J5KAogICAgICAgIHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwYWNrYWdlcycsICdwcm9qZWN0JyksCiAgICAgICkuLmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpIHsKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICAgIHJvb3REaXJlY3RvcnkuZGVsZXRlKCkuaWdub3JlKCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2l0aCBlcnJvciB3aGVuIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHdvcmtzcGFjZSByb290JywgKCkgewogICAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgICAgY29udGV4dCwKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAke3Byb2plY3REaXJlY3RvcnkucGF0aH0nLAogICAgICAgICksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aXRoIGVycm9yIHdoZW4gdW5hYmxlIHRvIHBhcnNlIHB1YnNwZWMueWFtbCcsICgpIHsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpCiAgICAgICAgICAud3JpdGVBc1N0cmluZ1N5bmMoJ2ludmFsaWQgcHVic3BlYy55YW1sJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgIHZlcmlmeSgKICAgICAgICAoKSA9PiBsb2dnZXIuZXJyKAogICAgICAgICAgJ1VuYWJsZSB0byBkZXRlcm1pbmUgd29ya3NwYWNlIHJvb3QgZm9yICR7cHJvamVjdERpcmVjdG9yeS5wYXRofScsCiAgICAgICAgKSwKICAgICAgKTsKICAgIH0pOwoKICAgIHRlc3QoJ2RvZXMgbm90aGluZyB3aGVuIHB1YnNwZWMubG9jayBkb2VzIG5vdCBleGlzdCBpbiB3b3Jrc3BhY2Ugcm9vdCcsICgpIHsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QocHJvamVjdERpcmVjdG9yeS5saXN0U3luYygpLCBpc0VtcHR5KTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3Igd2hlbiB1bmFibGUgdG8gY29weSBsb2NrZmlsZScsICgpIHsKICAgICAgY29uc3QgcHVic3BlY0xvY2tDb250ZW50cyA9ICcnJwojIEdlbmVyYXRlZCBieSBwdWIKIyBTZWUgaHR0cHM6Ly9kYXJ0LmRldi90b29scy9wdWIvZ2xvc3NhcnkjbG9ja2ZpbGUKcGFja2FnZXM6CicnJzsKICAgICAgRmlsZShwYXRoLmpvaW4ocm9vdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGZpbmFsIGZpbGUgPSBGaWxlKHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAuLndyaXRlQXNTdHJpbmdTeW5jKHB1YnNwZWNMb2NrQ29udGVudHMpOwogICAgICBQcm9jZXNzLnJ1blN5bmMoJ2NobW9kJywgWycwMDAnLCBmaWxlLnBhdGhdKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3BpZXMgcHVic3BlYy5sb2NrIHRvIHByb2plY3QgZGlyZWN0b3J5IHdoZW4gZm91bmQnLCAoKSB7CiAgICAgIGNvbnN0IHB1YnNwZWNMb2NrQ29udGVudHMgPSAnJycKIyBHZW5lcmF0ZWQgYnkgcHViCiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlCnBhY2thZ2VzOgonJyc7CiAgICAgIEZpbGUocGF0aC5qb2luKHJvb3REaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKS53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwp2ZXJzaW9uOiAwLjAuMAplbnZpcm9ubWVudDoKICBzZGs6IF4zLjguMAp3b3Jrc3BhY2U6CiAgLSBwYWNrYWdlcy9oZWxsb193b3JsZAonJycpOwogICAgICBGaWxlKHBhdGguam9pbihyb290RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhwdWJzcGVjTG9ja0NvbnRlbnRzKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnlDb250ZW50cyA9IHByb2plY3REaXJlY3RvcnkubGlzdFN5bmMoKTsKICAgICAgZXhwZWN0KHByb2plY3REaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgZXhwZWN0KAogICAgICAgIHByb2plY3REaXJlY3RvcnlDb250ZW50cy5maXJzdCwKICAgICAgICBpc0E8RmlsZT4oKS5oYXZpbmcoCiAgICAgICAgICAoZikgPT4gcGF0aC5iYXNlbmFtZShmLnBhdGgpLAogICAgICAgICAgJ25hbWUnLAogICAgICAgICAgJ3B1YnNwZWMubG9jaycsCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZXhwZWN0KAogICAgICAgIChwcm9qZWN0RGlyZWN0b3J5Q29udGVudHMuZmlyc3QgYXMgRmlsZSkucmVhZEFzU3RyaW5nU3luYygpLAogICAgICAgIGVxdWFscyhwdWJzcGVjTG9ja0NvbnRlbnRzKSwKICAgICAgKTsKICAgIH0pOwogIH0pOwp9Cg==", + "type": "text" + }, { "path": "test/src/create_bundle_test.dart", "data":